From b5957ca52f8fcf5bdf0508badd4722e5388d405b Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 3 Nov 2026 19:51:39 +0000 Subject: [PATCH] =?UTF-8?q?Web=200.14.33:=20VisuBot=20=E2=80=93=20Grundlag?= =?UTF-8?q?en=20kleinschrittig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sechs neue Roboter-Lektionen für Anfänger (de/en): Zählen und Summieren, Feste Werte mit final, Nah, mittel oder weit? (else if), Der größte Wert, Ein Merker mit boolean, Zustände (Robo-Ampel). Je mit Spiel, Fehler-Übung, Checkliste und Wissenstest; neue Welten platz-1/platz-2. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ugz28V6JpBRe9Vepxtw51t --- CHANGELOG.md | 1 + web/lessons/de/begriffe.md | 7 + .../de/visubot/05-zaehlen-und-summieren.md | 150 + web/lessons/de/visubot/06-konstanten-final.md | 147 + web/lessons/de/visubot/06-nah-mittel-weit.md | 185 + web/lessons/de/visubot/08-groesster-wert.md | 158 + web/lessons/de/visubot/11-merker-boolean.md | 151 + web/lessons/de/visubot/21-zustaende.md | 156 + .../en/vb-ampel-zustand-loesung.visustruct | 43 + ...-05-zaehlen-und-summieren-start.visustruct | 31 + ...ehler-06-konstanten-final-start.visustruct | 19 + ...fehler-06-nah-mittel-weit-start.visustruct | 26 + ...-fehler-08-groesster-wert-start.visustruct | 41 + ...-fehler-11-merker-boolean-start.visustruct | 42 + .../vb-fehler-21-zustaende-start.visustruct | 48 + .../en/vb-java-ampel-text-loesung.visustruct | 48 + .../vb-java-klatsch-merker-loesung.visustruct | 42 + ...vb-java-konstante-seite-loesung.visustruct | 19 + .../en/vb-java-richtung-loesung.visustruct | 41 + ...vb-java-spirale-strecke-loesung.visustruct | 31 + .../en/vb-java-tageszeit-loesung.visustruct | 26 + .../en/vb-konstante-wand-loesung.visustruct | 17 + .../diagramme/en/vb-l06k-mit.visustruct | 25 + .../diagramme/en/vb-l06k-ohne.visustruct | 22 + .../en/vb-l06n-einparkhilfe.visustruct | 26 + .../en/vb-l21z-ausweichen.visustruct | 39 + .../en/vb-meister-platz-loesung.visustruct | 35 + .../en/vb-schritte-welt-loesung.visustruct | 20 + .../en/vb-tempo-abstand-loesung.visustruct | 26 + .../en/vb-wurde-es-dunkel-loesung.visustruct | 42 + .../vb-ampel-zustand-loesung.visustruct | 43 + ...-05-zaehlen-und-summieren-start.visustruct | 31 + ...ehler-06-konstanten-final-start.visustruct | 19 + ...fehler-06-nah-mittel-weit-start.visustruct | 26 + ...-fehler-08-groesster-wert-start.visustruct | 41 + ...-fehler-11-merker-boolean-start.visustruct | 42 + .../vb-fehler-21-zustaende-start.visustruct | 48 + .../vb-java-ampel-text-loesung.visustruct | 48 + .../vb-java-klatsch-merker-loesung.visustruct | 42 + ...vb-java-konstante-seite-loesung.visustruct | 19 + .../vb-java-richtung-loesung.visustruct | 41 + ...vb-java-spirale-strecke-loesung.visustruct | 31 + .../vb-java-tageszeit-loesung.visustruct | 26 + .../vb-konstante-wand-loesung.visustruct | 17 + web/lessons/diagramme/vb-l06k-mit.visustruct | 25 + web/lessons/diagramme/vb-l06k-ohne.visustruct | 22 + .../diagramme/vb-l06n-einparkhilfe.visustruct | 26 + .../diagramme/vb-l21z-ausweichen.visustruct | 39 + .../vb-meister-platz-loesung.visustruct | 35 + .../vb-schritte-welt-loesung.visustruct | 20 + .../vb-tempo-abstand-loesung.visustruct | 26 + .../vb-wurde-es-dunkel-loesung.visustruct | 42 + web/lessons/en/begriffe.md | 8 + .../en/visubot/05-zaehlen-und-summieren.md | 150 + web/lessons/en/visubot/06-konstanten-final.md | 147 + web/lessons/en/visubot/06-nah-mittel-weit.md | 185 + web/lessons/en/visubot/08-groesster-wert.md | 158 + web/lessons/en/visubot/11-merker-boolean.md | 151 + web/lessons/en/visubot/21-zustaende.md | 156 + web/lessons/welten/platz-1.txt | 8 + web/lessons/welten/platz-2.txt | 11 + web/package-lock.json | 4 +- web/package.json | 2 +- web/test/visubotLessons.test.ts | 15 +- ...lowApp-CSj8R5qO.js => flowApp-CG6s5eaK.js} | 4 +- .../{index-Bqz7Z8YJ.js => index-CnxP9nEG.js} | 6066 +++++++++++++---- ...tApp-DNr8EWA4.js => objectApp-eF0YC-Hb.js} | 8 +- ...Zip-CTDq_c8B.js => projectZip-9121iP6s.js} | 2 +- ...obot3d-C6eyLYBE.js => robot3d-DEkrf1Uk.js} | 2 +- website/app/index.html | 2 +- 70 files changed, 8076 insertions(+), 1376 deletions(-) create mode 100644 web/lessons/de/visubot/05-zaehlen-und-summieren.md create mode 100644 web/lessons/de/visubot/06-konstanten-final.md create mode 100644 web/lessons/de/visubot/06-nah-mittel-weit.md create mode 100644 web/lessons/de/visubot/08-groesster-wert.md create mode 100644 web/lessons/de/visubot/11-merker-boolean.md create mode 100644 web/lessons/de/visubot/21-zustaende.md create mode 100644 web/lessons/diagramme/en/vb-ampel-zustand-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-fehler-05-zaehlen-und-summieren-start.visustruct create mode 100644 web/lessons/diagramme/en/vb-fehler-06-konstanten-final-start.visustruct create mode 100644 web/lessons/diagramme/en/vb-fehler-06-nah-mittel-weit-start.visustruct create mode 100644 web/lessons/diagramme/en/vb-fehler-08-groesster-wert-start.visustruct create mode 100644 web/lessons/diagramme/en/vb-fehler-11-merker-boolean-start.visustruct create mode 100644 web/lessons/diagramme/en/vb-fehler-21-zustaende-start.visustruct create mode 100644 web/lessons/diagramme/en/vb-java-ampel-text-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-java-klatsch-merker-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-java-konstante-seite-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-java-richtung-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-java-spirale-strecke-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-java-tageszeit-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-konstante-wand-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-l06k-mit.visustruct create mode 100644 web/lessons/diagramme/en/vb-l06k-ohne.visustruct create mode 100644 web/lessons/diagramme/en/vb-l06n-einparkhilfe.visustruct create mode 100644 web/lessons/diagramme/en/vb-l21z-ausweichen.visustruct create mode 100644 web/lessons/diagramme/en/vb-meister-platz-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-schritte-welt-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-tempo-abstand-loesung.visustruct create mode 100644 web/lessons/diagramme/en/vb-wurde-es-dunkel-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-ampel-zustand-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-fehler-05-zaehlen-und-summieren-start.visustruct create mode 100644 web/lessons/diagramme/vb-fehler-06-konstanten-final-start.visustruct create mode 100644 web/lessons/diagramme/vb-fehler-06-nah-mittel-weit-start.visustruct create mode 100644 web/lessons/diagramme/vb-fehler-08-groesster-wert-start.visustruct create mode 100644 web/lessons/diagramme/vb-fehler-11-merker-boolean-start.visustruct create mode 100644 web/lessons/diagramme/vb-fehler-21-zustaende-start.visustruct create mode 100644 web/lessons/diagramme/vb-java-ampel-text-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-java-klatsch-merker-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-java-konstante-seite-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-java-richtung-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-java-spirale-strecke-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-java-tageszeit-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-konstante-wand-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-l06k-mit.visustruct create mode 100644 web/lessons/diagramme/vb-l06k-ohne.visustruct create mode 100644 web/lessons/diagramme/vb-l06n-einparkhilfe.visustruct create mode 100644 web/lessons/diagramme/vb-l21z-ausweichen.visustruct create mode 100644 web/lessons/diagramme/vb-meister-platz-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-schritte-welt-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-tempo-abstand-loesung.visustruct create mode 100644 web/lessons/diagramme/vb-wurde-es-dunkel-loesung.visustruct create mode 100644 web/lessons/en/visubot/05-zaehlen-und-summieren.md create mode 100644 web/lessons/en/visubot/06-konstanten-final.md create mode 100644 web/lessons/en/visubot/06-nah-mittel-weit.md create mode 100644 web/lessons/en/visubot/08-groesster-wert.md create mode 100644 web/lessons/en/visubot/11-merker-boolean.md create mode 100644 web/lessons/en/visubot/21-zustaende.md create mode 100644 web/lessons/welten/platz-1.txt create mode 100644 web/lessons/welten/platz-2.txt rename website/app/assets/{flowApp-CSj8R5qO.js => flowApp-CG6s5eaK.js} (99%) rename website/app/assets/{index-Bqz7Z8YJ.js => index-CnxP9nEG.js} (92%) rename website/app/assets/{objectApp-DNr8EWA4.js => objectApp-eF0YC-Hb.js} (99%) rename website/app/assets/{projectZip-CTDq_c8B.js => projectZip-9121iP6s.js} (99%) rename website/app/assets/{robot3d-C6eyLYBE.js => robot3d-DEkrf1Uk.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75c6b2a7..de587da6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog. ### Changed +- **Web 0.14.33, VisuBot: structured programming basics, step by step:** six new beginner robot lessons (de/en), inserted by file name without renaming (the series now has 33 lessons): „Zählen und Summieren“ after do-while (counter and sum pattern, exercises „Schritte bis zur Wand“ in three worlds and Java „Spirale mit Strecke“), „Feste Werte mit final“ after the ultrasonic sensor (constants, `const`/`final`, „Wand mit Konstante“, Java „Quadrat mit Konstante“), „Nah, mittel oder weit?“ (three cases, `else if`, order of conditions; „Tempo nach Abstand“, Java „Tag oder Nacht?“), „Der größte Wert“ after colours (maximum with desk-check table, new worlds `platz-1`/`platz-2`, „Wo ist am meisten Platz?“, Java „Die Richtung merken“), „Ein Merker mit boolean“ after the light sensor („Wurde es dunkel?“, Java „Wurde geklatscht?“) and „Zustände: Was mache ich gerade?“ after stopwatch/battery (state machine, Robo-Ampel with switch, Java with String states and `.equals`). Each lesson has competencies, a game, a „Warum läuft das nicht?“ exercise, a checklist and a quiz. Glossary: Merker/flag, Zustandsautomat/state machine. - **Web 0.14.32, VisuBot: missing basics added:** four new robot lessons, inserted by file name without renaming (the series now has 27 lessons): „Struktogramm und Editor“ at the start (algorithm, Nassi-Shneiderman, the three building blocks with mBot2 examples, inserting/moving/deleting, saving and the workspace; exercise „Um die Ecke“), „Schritt für Schritt testen“ after Variables (simulation controls, desk-check table, logic error exercise „Die Spirale reparieren“ with a faulty start diagram), „Erst fahren, dann prüfen“ after the while loop (do-while vs. while table, structogram exercise, Java „Schritte zählen“) and „Notbremse mit break“ after buttons/joystick (endless loop with exit, Java `while (true)` + `break` with button A). Every robot lesson from lesson 4 on now has a Java exercise „Warum läuft das nicht?“ (`vb-fehler-`): Ludwig's version of the lesson's program has one mistake (wrong case, typo, missing argument, unknown variable, missing quotation marks); the student runs it, reads the error message and fixes it. Lesson 22 gets the Java exercise „Rechteck mit Umdrehungen“. A test checks that every start diagram fails its exercise (de/en). - **Web 0.14.31, web app links point to visucode.de:** the website now lives on one subdomain per world (visustruct.visucode.de, visubot.visucode.de, visuobject.visucode.de, published from the GitLab repo visucode/website). The app's home, imprint and privacy links go to the start page of the current world there (relative on its own subdomain, e.g. `../de/index.html`, otherwise absolute); before, in VisuBot they pointed to `../de/visubot.html`, which no longer exists. On visubot.visucode.de and visuobject.visucode.de the app starts in that world when no world was chosen yet. The about link (web and Swift app) and the Messprotokoll links in lesson 22 use the new addresses (`web/src/ui/site.ts`, test `site.test.ts`). - **Web 0.14.30, VisuBot concentrates on robotics:** the VisuBot world now shows only the robot lessons and robot tasks (23 lessons in four parts: Losfahren, Sensoren und Entscheidungen, Licht/Ton/Bildschirm, Motoren und Methoden) instead of all 40 VisuStruct lessons with the robot lessons in between; plain Java (console, Scanner, files, windows) stays in VisuStruct (Holger 2026-11-03). The five „Jetzt ohne Roboter“ steps became robot steps: L3 „Ergebnis auf dem Bildschirm“ (`mbot.showText`, data types with robot examples), L9 „Startsignal“ (switch in a for loop), L17 „Messreihe“ (five distance measurements in an array, average), L19 „Laufschrift“ (`charAt` backwards on the screen), L22 „Methode mit Rückgabe“ (`int zentimeter(int umdrehungen)`). New lesson 8 „Und, oder, nicht“ (`&&`, `||`, `!` with distance, line and buttons, truth tables, Java exercise „Sicher fahren“ in four worlds); it is inserted after the line lesson without renaming files, robot lessons are numbered in file order. Links „📘 Mehr dazu ohne Roboter“ (`[…](?visustruct&lektion=…)`) open the matching VisuStruct lesson in a new window (`?lektion=` opens a lesson). The robot lesson file `09-fallauswahl.md` is now `09-fallauswahl-mbot2.md`, because an old progress rename for VisuStruct deleted its progress on every load. Robot Java exercises are now also checked by typing them as Java (de/en). diff --git a/web/lessons/de/begriffe.md b/web/lessons/de/begriffe.md index 61c1f086..83ec1c59 100644 --- a/web/lessons/de/begriffe.md +++ b/web/lessons/de/begriffe.md @@ -115,6 +115,13 @@ Eine Variable, die in einer Schleife mitzählt, meistens i. auch: Endlosschleifen Eine Schleife, deren Bedingung nie falsch wird. Sie hört nie von selbst auf. +### Merker +Eine Variable vom Typ boolean, die mit false anfängt und auf true gesetzt wird, sobald etwas passiert ist. + +### Zustandsautomat +auch: Zustandsautomaten, Zustandsvariable, Zustandsvariablen +Ein Programm, das immer in genau einem Zustand ist und nach festen Regeln in den nächsten Zustand wechselt, z. B. eine Ampel. + ### Array auch: Arrays Eine Reihe von Fächern mit einem gemeinsamen Namen und demselben Datentyp. Im Lehrplan heißt es auch Feld. diff --git a/web/lessons/de/visubot/05-zaehlen-und-summieren.md b/web/lessons/de/visubot/05-zaehlen-und-summieren.md new file mode 100644 index 00000000..6d4fdcba --- /dev/null +++ b/web/lessons/de/visubot/05-zaehlen-und-summieren.md @@ -0,0 +1,150 @@ +--- +titel: Zählen und Summieren +bereich: Sensoren und Entscheidungen +kurz: Mit einer Variablen mitzählen und Werte zusammenzählen. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- eine Zählvariable anlegen und in einer Schleife hochzählen +- in einer Schleife eine Summe bilden +- das Ergebnis nach der Schleife auf dem Bildschirm zeigen +::: + +## Mitzählen + +Wie viele Schritte fährt der mBot2 bis zur Wand? Das weißt du vorher nicht, die Welt ist jedes Mal anders. Der mBot2 soll deshalb **mitzählen**. Dafür brauchst du drei Kästen: + +1. **Vor** der Schleife: `int schritte = 0`. Am Anfang ist noch nichts gezählt. +2. **In** der Schleife: `schritte = schritte + 1`. Nach jedem Schritt eins mehr. +3. **Nach** der Schleife: das Ergebnis zeigen, zum Beispiel mit `mbot.showText("Schritte: " + schritte)`. + +Lies `schritte = schritte + 1` von rechts nach links: Nimm den alten Wert von `schritte`, zähle 1 dazu und speichere das Ergebnis wieder in `schritte`. So eine Variable heißt **Zählvariable** oder kurz Zähler. + +> Achtung: Steht `int schritte = 0` **in** der Schleife, fängt der Zähler bei jedem Durchgang wieder bei 0 an. Am Ende steht dann immer 1 da. + +::: angeberwissen +Dein Handy zählt deine Schritte genau so: Bei jedem Schritt rechnet es `schritte = schritte + 1`. Ich zähle lieber meine Grashalme. Ich bin bei 4 Millionen. +::: + +::: übung vb-schritte-welt +titel: Schritte bis zur Wand +auftrag: Baue ein Struktogramm: Der mBot2 fährt vor, solange der Abstand größer als 15 ist. Dabei zählt er seine Schritte mit. Danach zeigt er zum Beispiel **Schritte: 3** auf dem Bildschirm. Es gibt drei Welten. +welt: wand-kurz -> screen "Schritte: 3" +welt: wand-mittel -> screen "Schritte: 7" +welt: wand-lang -> screen "Schritte: 12" +braucht: whileSchleife +tipp: Der erste Kasten ist `int schritte = 0`. Danach kommt die While-Schleife mit `mbot.getDistance() > 15`. +tipp: In der Schleife stehen **fahre vor** und `schritte = schritte + 1`. Nach der Schleife steht `mbot.showText("Schritte: " + schritte)`. +lösung: vb-schritte-welt-loesung.visustruct +::: + +## Zusammenzählen + +Ein Zähler wächst immer um 1. Eine **Summe** wächst um verschiedene Werte. Der mBot2 fährt eine Spirale: erst 10 cm, dann 20, dann 30, dann 40. Wie weit ist er insgesamt gefahren? + +| Durchgang | `seite` | `gesamt` danach | +|---|---|---| +| vorher | 10 | 0 | +| 1 | 10 | 0 + 10 = 10 | +| 2 | 20 | 10 + 20 = 30 | +| 3 | 30 | 30 + 30 = 60 | +| 4 | 40 | 60 + 40 = 100 | + +Das Muster ist dasselbe wie beim Zählen. Nur steht statt der 1 jetzt der Wert, der dazukommt: `gesamt = gesamt + seite`. + +## Jetzt in Java: Spirale mit Strecke + +::: übung vb-java-spirale-strecke +titel: Spirale mit Strecke +code: java +auftrag: Schreibe in Java: Lege `int seite = 10` und `int gesamt = 0` an. Fahre viermal: `seite` cm vor, rechts drehen, `seite` zu `gesamt` dazuzählen, `seite` um 10 größer machen. Zeige danach **Strecke: 100 cm** auf dem Bildschirm. +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Strecke: 100 cm" +braucht: forSchleife +tipp: In der For-Schleife stehen vier Zeilen: `mbot.forward(seite);`, `mbot.turnRight();`, `gesamt = gesamt + seite;` und `seite = seite + 10;`. +tipp: Nach der Schleife steht `mbot.showText("Strecke: " + gesamt + " cm");`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +::: übung vb-fehler-05-zaehlen-und-summieren +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Spirale mit Strecke“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-05-zaehlen-und-summieren-start.visustruct +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Strecke: 100 cm" +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Variable dort, wo sie angelegt wird? Java unterscheidet Groß- und Kleinschreibung. +tipp: Richtig heißt es `gesamt = gesamt + seite`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +## Spiel: Was steht am Ende in der Variablen? + +::: spiel frage +titel: Spiel: Was steht am Ende in der Variablen? +intro: Ludwig hat kleine Programme geschrieben. Rechne im Kopf mit. Fünf Runden. + +runde: +frage: `int z = 0`, dann dreimal `z = z + 1`. Was ist `z`? +- 1 +- [x] 3 +- 0 +> Jeder Durchgang zählt 1 dazu: 1, 2, 3. + +runde: +frage: `int summe = 0`, dann `summe = summe + 5` und `summe = summe + 7`. Was ist `summe`? +- 7 +- [x] 12 +- 5 +> 0 + 5 = 5, dann 5 + 7 = 12. + +runde: +frage: Eine Schleife läuft viermal. In ihr stehen `int z = 0` und `z = z + 1`. Was ist `z` am Ende? +- 4 +- [x] 1 +- 0 +> Der Zähler wird in jedem Durchgang wieder auf 0 gesetzt. Er gehört vor die Schleife. + +runde: +frage: `int gesamt = 0`. Der mBot2 fährt 20, 20 und 30 cm und zählt jedes Mal dazu. Was ist `gesamt`? +- 30 +- 20 +- [x] 70 +> 20 + 20 + 30 = 70. + +runde: +frage: `int schritte = 10`, dann zweimal `schritte = schritte + 1`. Was ist `schritte`? +- 2 +- [x] 12 +- 11 +> Der Zähler fängt hier bei 10 an, nicht bei 0. +::: + +::: quiz +? Wo legst du die Zählvariable `int schritte = 0` an? +→ Mitzählen +- [x] Vor der Schleife +- [ ] In der Schleife +- [ ] Nach der Schleife +> In der Schleife würde sie bei jedem Durchgang wieder 0. +? Was macht `schritte = schritte + 1`? +→ Mitzählen +- [ ] Es vergleicht schritte mit schritte + 1. +- [x] Es nimmt den alten Wert, zählt 1 dazu und speichert das Ergebnis. +- [ ] Es setzt schritte auf 1. +? Wie zählst du die Seitenlänge `seite` zur Summe `gesamt` dazu? +→ Zusammenzählen +- [ ] `gesamt = seite` +- [ ] `seite = gesamt + seite` +- [x] `gesamt = gesamt + seite` +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann eine Zählvariable anlegen und in einer Schleife hochzählen. → Mitzählen +- Ich kann in einer Schleife eine Summe bilden. → Zusammenzählen +- Ich kann das Ergebnis nach der Schleife auf dem Bildschirm zeigen. → Jetzt in Java: Spirale mit Strecke +::: diff --git a/web/lessons/de/visubot/06-konstanten-final.md b/web/lessons/de/visubot/06-konstanten-final.md new file mode 100644 index 00000000..ae2b0111 --- /dev/null +++ b/web/lessons/de/visubot/06-konstanten-final.md @@ -0,0 +1,147 @@ +--- +titel: Feste Werte mit final +bereich: Sensoren und Entscheidungen +kurz: Eine Konstante anlegen, damit eine wichtige Zahl nur an einer Stelle steht. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- erklären, was eine Konstante ist +- eine Konstante im Struktogramm und in Java anlegen +- eine Konstante in einer Bedingung und in einem Befehl benutzen +::: + +## Eine Zahl an vielen Stellen + +Ludwig hat ein Programm für den Flur geschrieben: Der mBot2 fährt bis 20 cm vor die Wand, dreht sich um und fährt bis 20 cm vor die andere Wand. + +::: diagramm vb-l06k-ohne.visustruct +Hin und zurück. Die Zahl 20 steht an zwei Stellen. +::: + +Jetzt soll der mBot2 schon bei 30 cm anhalten. Ludwig muss jede 20 suchen und ändern. Vergisst er eine, hält der mBot2 einmal bei 30 und einmal bei 20 cm. In langen Programmen passiert so etwas schnell. + +::: angeberwissen +Profis nennen eine Zahl, die einfach so im Programm steht, eine **magische Zahl**. Magisch, weil niemand mehr weiß, was sie bedeutet. Ich mag nur magische Grashalme. +::: + +## Eine Konstante anlegen + +Besser ist eine **Konstante**. Das ist eine Variable, deren Wert nach dem Festlegen gleich bleibt. Du legst sie einmal ganz oben an und benutzt danach nur noch ihren Namen. + +| | Struktogramm | Java | +|---|---|---| +| anlegen | `const int ABSTAND = 20` | `final int ABSTAND = 20;` | +| benutzen | `mbot.getDistance() > ABSTAND` | `mbot.getDistance() > ABSTAND` | + +Im Struktogramm schreibst du `const` davor, in Java `final`. Beides heißt: Dieser Wert ändert sich nicht mehr. Namen von Konstanten schreibt man in **Großbuchstaben**, dann erkennt man sie sofort. + +::: diagramm vb-l06k-mit.visustruct +Dasselbe Programm mit der Konstanten ABSTAND. Für 30 cm änderst du nur die erste Zeile. +::: + +::: übung vb-konstante-wand +titel: Wand mit Konstante +auftrag: Lege die Konstante `ABSTAND` mit dem Wert 20 an. Der mBot2 fährt vor, solange der Abstand größer als `ABSTAND` ist. Danach spielt er einen Ton. Es gibt drei Welten. +welt: wand-kurz -> tone +welt: wand-mittel -> tone +welt: wand-lang -> tone +braucht: whileSchleife +tipp: Der erste Kasten ist eine Anweisung mit `const int ABSTAND = 20`. Darunter kommt eine While-Schleife. +tipp: Die Bedingung der Schleife ist `mbot.getDistance() > ABSTAND`. In der Schleife steht **fahre vor**, nach der Schleife **spiele Ton**. +lösung: vb-konstante-wand-loesung.visustruct +::: + +## Jetzt in Java: Quadrat mit Konstante + +Eine Konstante passt auch in einen Befehl. Mit `final int SEITE = 30;` fährt `mbot.forward(SEITE);` genau 30 cm. Soll das Quadrat größer werden, änderst du nur die eine Zeile. + +::: übung vb-java-konstante-seite +titel: Quadrat mit Konstante +code: java +auftrag: Schreibe in Java: Lege die Konstante `SEITE` mit dem Wert 30 an. Fahre dann mit einer For-Schleife ein Quadrat mit der Seitenlänge `SEITE`. +fahrt: 4 x (forward 30, turnRight) +braucht: forSchleife +tipp: Die erste Zeile ist `final int SEITE = 30;`. Danach kommt `for (int i = 0; i < 4; i++) { … }`. +tipp: In der Schleife stehen `mbot.forward(SEITE);` und `mbot.turnRight();`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +::: übung vb-fehler-06-konstanten-final +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Quadrat mit Konstante“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-06-konstanten-final-start.visustruct +fahrt: 4 x (forward 30, turnRight) +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Konstante dort, wo sie angelegt wird? Konstanten schreibt man in Großbuchstaben. +tipp: Richtig heißt es `mbot.forward(SEITE)`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +## Spiel: Konstante oder Variable? + +::: spiel frage +titel: Spiel: Konstante oder Variable? +intro: Ludwig sortiert Werte. Bleibt der Wert im ganzen Programm gleich, ist er eine Konstante. Ändert er sich, ist er eine Variable. Sechs Runden. +frage: Konstante oder Variable? +antworten: Konstante | Variable + +runde: +frage: Die Anzahl der Ecken eines Quadrats +richtig: Konstante +> Ein Quadrat hat immer vier Ecken. + +runde: +frage: Der Abstand, den der Ultraschallsensor gerade misst +richtig: Variable +> Fährt der mBot2, ändert sich der Abstand ständig. + +runde: +frage: Der Mindestabstand, bei dem der mBot2 immer anhalten soll +richtig: Konstante +> Du legst ihn einmal fest, zum Beispiel `final int ABSTAND = 20;`. + +runde: +frage: Die Zahl der Schritte, die der mBot2 schon gefahren ist +richtig: Variable +> Nach jedem Schritt wird sie um 1 größer. + +runde: +frage: Die Tonhöhe des Warntons, immer 440 Hz +richtig: Konstante +> Der Warnton klingt immer gleich. + +runde: +frage: Der Akkustand in Prozent +richtig: Variable +> Der Akku wird beim Fahren langsam leer. +::: + +::: quiz +? Was ist eine Konstante? +→ Eine Konstante anlegen +- [ ] Eine Variable, die sich in jedem Durchgang ändert +- [x] Eine Variable, deren Wert nach dem Festlegen gleich bleibt +- [ ] Ein Sensor, der immer denselben Wert misst +> Eine Konstante legst du einmal fest. Danach benutzt du nur ihren Namen. +? Wie legst du in Java die Konstante `ABSTAND` mit dem Wert 20 an? +→ Eine Konstante anlegen +- [ ] `const ABSTAND = 20;` +- [x] `final int ABSTAND = 20;` +- [ ] `int final = 20;` +> In Java steht `final` vor dem Datentyp. Im Struktogramm schreibst du `const`. +? Warum ist eine Konstante besser als die Zahl 20 an vielen Stellen? +→ Eine Konstante anlegen +- [ ] Weil das Programm dann schneller fährt +- [x] Weil du den Wert nur an einer Stelle ändern musst +- [ ] Weil der Sensor dann genauer misst +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann erklären, was eine Konstante ist. → Eine Konstante anlegen +- Ich kann eine Konstante im Struktogramm und in Java anlegen. → Eine Konstante anlegen +- Ich kann eine Konstante in einer Bedingung und in einem Befehl benutzen. → Jetzt in Java: Quadrat mit Konstante +::: diff --git a/web/lessons/de/visubot/06-nah-mittel-weit.md b/web/lessons/de/visubot/06-nah-mittel-weit.md new file mode 100644 index 00000000..6676eff4 --- /dev/null +++ b/web/lessons/de/visubot/06-nah-mittel-weit.md @@ -0,0 +1,185 @@ +--- +titel: Nah, mittel oder weit? +bereich: Sensoren und Entscheidungen +kurz: Eine Verzweigung mit drei Fällen bauen und in Java mit else if schreiben. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- eine Verzweigung mit drei Fällen bauen +- `else if` in Java lesen und schreiben +- die Bedingungen in der richtigen Reihenfolge prüfen +::: + +## Drei Fälle statt zwei + +Viele Autos haben eine **Einparkhilfe**. Ist die Wand weit weg, ist alles frei. Kommt sie näher, heißt es: langsam. Ist sie ganz nah: Stopp! + +Eine Verzweigung hat nur zwei Zweige, Ja und Nein. Für drei Fälle setzt du eine zweite Verzweigung in den Nein-Zweig der ersten: + +1. Ist der Abstand kleiner als 10? Dann **Stopp**. +2. Sonst: Ist der Abstand kleiner als 30? Dann **Langsam**. +3. Sonst: **Frei**. + +::: diagramm vb-l06n-einparkhilfe.visustruct +Die Einparkhilfe. Die zweite Frage wird nur gestellt, wenn die Antwort auf die erste Nein war. +::: + +Probiere es in der [Simulation](#zeige-simulation) aus: Öffne das Diagramm im Editor und stelle den Abstand auf 5, 20 und 50 cm. + +> 📘 **Mehr dazu ohne Roboter:** In VisuStruct gibt es die Lektion [„Verzweigung“](?visustruct&lektion=08-verzweigung). Sie öffnet sich in einem neuen Fenster. + +## Tempo nach Abstand im Struktogramm + +::: übung vb-tempo-abstand +titel: Tempo nach Abstand +auftrag: Baue ein Struktogramm mit drei Fällen: Ist der Abstand kleiner als 10, fährt der mBot2 5 cm zurück. Sonst: Ist der Abstand kleiner als 30, fährt er 5 cm vor. Sonst fährt er 20 cm vor. +messwerte: getDistance=5 -> backward 5 +messwerte: getDistance=20 -> forward 5 +messwerte: getDistance=50 -> forward 20 +braucht: verzweigung +tipp: Baue es wie die Einparkhilfe: eine Verzweigung mit `mbot.getDistance() < 10` und im Nein-Zweig eine zweite mit `mbot.getDistance() < 30`. +tipp: Die Befehle sind `mbot.backward(5)`, `mbot.forward(5)` und `mbot.forward(20)`. Der letzte steht im Nein-Zweig der zweiten Verzweigung. +lösung: vb-tempo-abstand-loesung.visustruct +::: + +> Beim Prüfen setzt VisuStruct den Abstand nacheinander auf 5, 20 und 50 cm. + +## Jetzt in Java: else if + +Schau in den Bereich [Code](#zeige-codelive). Die Verzweigung im Nein-Zweig sieht so aus: + +```java +if (mbot.getDistance() < 10) { + mbot.showText("Stopp"); +} else { + if (mbot.getDistance() < 30) { + mbot.showText("Langsam"); + } else { + mbot.showText("Frei"); + } +} +``` + +In Java darfst du das kürzer schreiben. Das `if` rutscht direkt hinter das `else`: + +```java +if (mbot.getDistance() < 10) { + mbot.showText("Stopp"); +} else if (mbot.getDistance() < 30) { + mbot.showText("Langsam"); +} else { + mbot.showText("Frei"); +} +``` + +Beides bedeutet genau dasselbe. Mit `else if` ist es aber besser zu lesen. Die geschweiften Klammern `{ }` schreibst du trotzdem immer. + +::: übung vb-java-tageszeit +titel: Tag oder Nacht? +code: java +auftrag: Schreibe in Java mit `else if`: Ist die Helligkeit kleiner als 20, zeigt der mBot2 **Nacht**. Sonst: Ist sie kleiner als 60, zeigt er **Dämmerung**. Sonst zeigt er **Tag**. +messwerte: getBrightness=10 -> none, screen "Nacht" +messwerte: getBrightness=40 -> none, screen "Dämmerung" +messwerte: getBrightness=80 -> none, screen "Tag" +braucht: verzweigung +tipp: Die Helligkeit liest du mit `mbot.getBrightness()`. Die erste Bedingung ist `mbot.getBrightness() < 20`. +tipp: `if (…) { mbot.showText("Nacht"); } else if (mbot.getBrightness() < 60) { mbot.showText("Dämmerung"); } else { mbot.showText("Tag"); }` +lösung: vb-java-tageszeit-loesung.visustruct +::: + +::: übung vb-fehler-06-nah-mittel-weit +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Tag oder Nacht?“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-06-nah-mittel-weit-start.visustruct +messwerte: getBrightness=10 -> none, screen "Nacht" +messwerte: getBrightness=40 -> none, screen "Dämmerung" +messwerte: getBrightness=80 -> none, screen "Tag" +tipp: Ein Text gehört in Anführungszeichen. Ohne sie sucht Java eine Variable mit diesem Namen. +tipp: Richtig heißt es `mbot.showText("Nacht")`. +lösung: vb-java-tageszeit-loesung.visustruct +::: + +## Auf die Reihenfolge kommt es an + +Ludwig hat die Einparkhilfe umgebaut und die Fragen getauscht: + +```java +if (mbot.getDistance() < 30) { + mbot.showText("Langsam"); +} else if (mbot.getDistance() < 10) { + mbot.showText("Stopp"); +} +``` + +Bei 5 cm zeigt sein mBot2 **Langsam** statt **Stopp**. Denn 5 ist auch kleiner als 30. Die erste Bedingung ist schon wahr, die zweite wird gar nicht mehr geprüft. **Stopp** erscheint nie. + +> Merke: Bei `<` prüfst du zuerst den kleinsten Wert, dann den nächstgrößeren. + +::: spiel frage +titel: Spiel: Was zeigt die Einparkhilfe? +intro: Ludwigs Einparkhilfe von oben: unter 10 cm **Stopp**, unter 30 cm **Langsam**, sonst **Frei**. Was zeigt sie? Sechs Runden. +frage: Was zeigt die Einparkhilfe? +antworten: Stopp | Langsam | Frei + +runde: +frage: Der Abstand ist **5 cm**. +richtig: Stopp +> 5 ist kleiner als 10. Schon die erste Frage ist wahr. + +runde: +frage: Der Abstand ist **25 cm**. +richtig: Langsam +> 25 ist nicht kleiner als 10, aber kleiner als 30. + +runde: +frage: Der Abstand ist **80 cm**. +richtig: Frei +> Beide Fragen sind falsch, also bleibt der letzte Nein-Zweig. + +runde: +frage: Der Abstand ist genau **10 cm**. +richtig: Langsam +> 10 ist nicht kleiner als 10. Die erste Frage ist falsch, die zweite wahr. + +runde: +frage: Der Abstand ist genau **30 cm**. +richtig: Frei +> 30 ist nicht kleiner als 30. Beide Fragen sind falsch. + +runde: +frage: Der Abstand ist **9 cm**. +richtig: Stopp +> 9 ist kleiner als 10. +::: + +::: quiz +? Wie viele Verzweigungen brauchst du im Struktogramm für drei Fälle? +→ Drei Fälle statt zwei +- [ ] Eine +- [x] Zwei, die zweite im Nein-Zweig der ersten +- [ ] Drei nebeneinander +> Jede Verzweigung teilt in zwei Zweige. Die zweite teilt den Nein-Zweig noch einmal. +? Was bedeutet `else if` in Java? +→ Jetzt in Java: else if +- [x] Sonst prüfe noch eine Bedingung +- [ ] Wiederhole die Bedingung +- [ ] Prüfe beide Bedingungen gleichzeitig +> `else if` ist die kurze Schreibweise für ein `if` im `else`-Zweig. +? Ludwig prüft zuerst `< 30` und danach `< 10`. Was passiert bei 5 cm? +→ Auf die Reihenfolge kommt es an +- [ ] Es erscheint Stopp. +- [x] Es erscheint Langsam. +- [ ] Es erscheint gar nichts. +> 5 ist auch kleiner als 30. Die zweite Bedingung wird nicht mehr geprüft. +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann eine Verzweigung mit drei Fällen bauen. → Drei Fälle statt zwei +- Ich kann `else if` in Java lesen und schreiben. → Jetzt in Java: else if +- Ich kann die Bedingungen in der richtigen Reihenfolge prüfen. → Auf die Reihenfolge kommt es an +::: diff --git a/web/lessons/de/visubot/08-groesster-wert.md b/web/lessons/de/visubot/08-groesster-wert.md new file mode 100644 index 00000000..eb359735 --- /dev/null +++ b/web/lessons/de/visubot/08-groesster-wert.md @@ -0,0 +1,158 @@ +--- +titel: Der größte Wert +bereich: Sensoren und Entscheidungen +kurz: Rundum messen und sich den größten Wert merken: Wo ist am meisten Platz? +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- mit einer Variablen den bisher größten Wert merken +- in einer Schleife jeden neuen Messwert mit dem bisher größten vergleichen +- mit dem mBot2 herausfinden, in welcher Richtung am meisten Platz ist +::: + +## Den Rekord merken + +Beim Weitsprung gibt es eine Tafel mit dem **Rekord**. Nach jedem Sprung schaut die Schiedsrichterin: Ist der neue Sprung weiter als der Rekord? Dann kommt er an die Tafel. Sonst bleibt der alte Rekord stehen. + +Genau so findet ein Programm den größten Wert. Die Tafel ist eine Variable `max`: + +1. **Vor** der Schleife: `int max = 0`. Noch steht nichts an der Tafel. +2. **In** der Schleife: Ist der neue Wert größer als `max`? Dann `max = wert`. +3. **Nach** der Schleife steht in `max` der größte Wert. + +Der mBot2 dreht sich viermal und misst jedes Mal den Abstand. So sieht das im Schreibtischtest aus: + +| Richtung | gemessen | größer als `max`? | `max` danach | +|---|---|---|---| +| vorher | | | 0 | +| vorn | 16 | ja | 16 | +| rechts | 36 | ja | 36 | +| hinten | 6 | nein | 36 | +| links | 26 | nein | 36 | + +> Wichtig: Die Verzweigung hat nur einen Ja-Zweig. Ist der Wert nicht größer, passiert nichts. Der alte Rekord bleibt. + +## Wo ist am meisten Platz? + +::: übung vb-meister-platz +titel: Wo ist am meisten Platz? +auftrag: Baue ein Struktogramm: Lege `int max = 0` an. Der mBot2 misst viermal den Abstand und dreht sich danach jeweils nach rechts. Ist ein Abstand größer als `max`, merkt er ihn sich in `max`. Zum Schluss zeigt er zum Beispiel **Am weitesten: 36 cm**. Es gibt zwei Welten. +welt: platz-1 -> screen "Am weitesten: 36 cm" +welt: platz-2 -> screen "Am weitesten: 46 cm" +braucht: forSchleife, verzweigung +tipp: Die For-Schleife läuft viermal. In ihr stehen drei Kästen: `int abstand = mbot.getDistance()`, eine Verzweigung und **drehe rechts**. +tipp: Die Verzweigung prüft `abstand > max`. Im Ja-Zweig steht `max = abstand`, der Nein-Zweig bleibt leer. Nach der Schleife: `mbot.showText("Am weitesten: " + max + " cm")`. +lösung: vb-meister-platz-loesung.visustruct +::: + +::: angeberwissen +Viele Saugroboter haben oben einen kleinen Turm mit einem Laser. Er dreht sich und misst ringsum die Abstände. So zeichnet der Roboter eine Karte der Wohnung. Bei mir zu Hause misst niemand. Ich fresse mir einfach den Weg frei. +::: + +## Jetzt in Java: Die Richtung merken + +Jetzt weiß der mBot2, **wie viel** Platz es höchstens gibt. Aber **wo**? Dafür merkt er sich in einer zweiten Variablen auch die Richtung. Die Zählvariable `i` sagt dir, die wievielte Messung es war: 0 ist vorn, 1 ist rechts, 2 ist hinten und 3 ist links. + +```java +if (abstand > max) { + max = abstand; + richtung = i; +} +``` + +Beide Zeilen stehen im Ja-Zweig. Nur wenn es einen neuen Rekord gibt, ändert sich auch die Richtung. + +::: übung vb-java-richtung +titel: Die Richtung merken +code: java +auftrag: Schreibe „Wo ist am meisten Platz?“ in Java. Merke dir zusätzlich in `int richtung = 0` die Nummer der Messung mit dem größten Abstand. Zeige zum Schluss zum Beispiel **Richtung: 1**. +welt: platz-1 -> screen "Richtung: 1" +welt: platz-2 -> screen "Richtung: 0" +braucht: forSchleife, verzweigung +tipp: Vor der Schleife stehen `int max = 0;` und `int richtung = 0;`. In der Schleife: `int abstand = mbot.getDistance();`, die Verzweigung und `mbot.turnRight();`. +tipp: Im Ja-Zweig stehen `max = abstand;` und `richtung = i;`. Nach der Schleife: `mbot.showText("Richtung: " + richtung);` +lösung: vb-java-richtung-loesung.visustruct +::: + +::: übung vb-fehler-08-groesster-wert +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Die Richtung merken“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-08-groesster-wert-start.visustruct +welt: platz-1 -> screen "Richtung: 1" +welt: platz-2 -> screen "Richtung: 0" +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Variable dort, wo sie angelegt wird? Java unterscheidet Groß- und Kleinschreibung. +tipp: Richtig heißt es `richtung = i`. +lösung: vb-java-richtung-loesung.visustruct +::: + +## Spiel: Neuer Rekord? + +::: spiel frage +titel: Spiel: Neuer Rekord? +intro: Der mBot2 misst nacheinander mehrere Abstände. Was steht am Ende in `max`? Fünf Runden. + +runde: +frage: Gemessen: 20, 50, 30 +- 30 +- [x] 50 +- 100 +> 50 ist der größte Wert. Die 30 danach ist kein neuer Rekord. + +runde: +frage: Gemessen: 10, 20, 30, 40 +- 10 +- [x] 40 +- 100 +> Jeder Wert ist ein neuer Rekord. Am Ende steht der letzte da. + +runde: +frage: Gemessen: 90, 10, 20, 30 +- 30 +- [x] 90 +- 10 +> Der Rekord kommt gleich am Anfang. Danach ist kein Wert größer. + +runde: +frage: Gemessen: 15, 15, 15 +- 45 +- 0 +- [x] 15 +> 15 ist nicht größer als 15. `max` bleibt 15. + +runde: +frage: Gemessen: 25, 60, 60, 5. In welcher Richtung (`i`) ist der Rekord? +- 0 +- [x] 1 +- 2 +> Bei `i = 1` kommt die 60. Die zweite 60 ist nicht **größer**, also bleibt `richtung` bei 1. +::: + +::: quiz +? Womit fängt `max` vor der Schleife an? +→ Den Rekord merken +- [x] Mit 0, weil noch nichts gemessen ist +- [ ] Mit dem größten Wert +- [ ] Mit 100 +> Jeder Abstand ist größer als 0, also wird schon der erste Messwert der Rekord. +? Was steht im Nein-Zweig der Verzweigung `abstand > max`? +→ Den Rekord merken +- [ ] `max = 0` +- [ ] `max = abstand` +- [x] Nichts, der alte Rekord bleibt. +? Wann ändert sich `richtung`? +→ Jetzt in Java: Die Richtung merken +- [ ] In jedem Durchgang +- [x] Nur wenn es einen neuen Rekord gibt +- [ ] Nur in der letzten Runde +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann mit einer Variablen den bisher größten Wert merken. → Den Rekord merken +- Ich kann in einer Schleife jeden neuen Messwert mit dem bisher größten vergleichen. → Wo ist am meisten Platz? +- Ich kann mit dem mBot2 herausfinden, in welcher Richtung am meisten Platz ist. → Jetzt in Java: Die Richtung merken +::: diff --git a/web/lessons/de/visubot/11-merker-boolean.md b/web/lessons/de/visubot/11-merker-boolean.md new file mode 100644 index 00000000..892d7505 --- /dev/null +++ b/web/lessons/de/visubot/11-merker-boolean.md @@ -0,0 +1,151 @@ +--- +titel: Ein Merker mit boolean +bereich: Sensoren und Entscheidungen +kurz: Mit einer Variablen vom Typ boolean festhalten, ob etwas passiert ist. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- eine Variable vom Typ `boolean` anlegen +- mit einem Merker festhalten, ob etwas passiert ist +- einen Merker nach der Schleife in einer Bedingung abfragen +::: + +## Wahr oder falsch + +Eine Variable vom Typ `boolean` kennt nur zwei Werte: `true` (wahr) und `false` (falsch). Du kennst das schon von den Sensoren: `mbot.isButtonA()` liefert `true` oder `false`. Auch ein Vergleich wie `mbot.getDistance() < 10` ist am Ende `true` oder `false`. + +| Anlegen | Bedeutung | +|---|---| +| `boolean dunkel = false` | Es war noch nicht dunkel. | +| `dunkel = true` | Jetzt war es dunkel. | +| `if (dunkel)` | Ist `dunkel` wahr? | + +Bei `if (dunkel)` brauchst du kein `== true`. Die Variable ist ja selbst schon wahr oder falsch. + +## Der Merker + +Der mBot2 soll drei Sekunden lang Wache halten. Er misst immer wieder die Helligkeit. Danach soll er sagen, ob es **irgendwann** dunkel war. + +Dafür nimmst du einen **Merker**: eine `boolean`-Variable, die mit `false` anfängt. Wird es dunkel, setzt du sie auf `true`. Danach setzt sie niemand mehr zurück. Nach der Schleife weißt du also: War es auch nur ein einziges Mal dunkel? + +::: übung vb-wurde-es-dunkel +titel: Wurde es dunkel? +auftrag: Baue ein Struktogramm: Lege `boolean dunkel = false` an. Prüfe in einer For-Schleife 30-mal: Ist die Helligkeit kleiner als 20, wird `dunkel` wahr. Warte in jedem Durchgang 100 ms. Zeige danach **Es war dunkel** oder **Immer hell**. +messwerte: getBrightness=80/10/80 -> none, screen "Es war dunkel" +messwerte: getBrightness=80 -> none, screen "Immer hell" +braucht: forSchleife, verzweigung +tipp: In der Schleife steht eine Verzweigung mit `mbot.getBrightness() < 20`. Im Ja-Zweig steht `dunkel = true`, der Nein-Zweig bleibt leer. Danach kommt `mbot.pause(100)`. +tipp: Nach der Schleife kommt eine zweite Verzweigung mit der Bedingung `dunkel`. Ja: `mbot.showText("Es war dunkel")`, Nein: `mbot.showText("Immer hell")`. +lösung: vb-wurde-es-dunkel-loesung.visustruct +::: + +> Beim Prüfen wird es in der Mitte der Wache kurz dunkel und dann wieder hell. Zeigt dein mBot2 trotzdem **Es war dunkel**? + +## Jetzt in Java: Wurde geklatscht? + +In Java sieht der Merker so aus: + +```java +boolean laut = false; +for (int i = 0; i < 30; i++) { + if (mbot.getLoudness() > 60) { + laut = true; + } + mbot.pause(100); +} +``` + +`true` und `false` schreibst du in Java immer klein. + +::: übung vb-java-klatsch-merker +titel: Wurde geklatscht? +code: java +auftrag: Schreibe in Java: Der mBot2 hört drei Sekunden lang zu (30-mal mit 100 ms Pause). Ist die Lautstärke einmal größer als 60, merkt er sich das in `boolean laut`. Danach zeigt er **Geklatscht!** oder **Alles still**. +messwerte: getLoudness=0/90/0 -> none, screen "Geklatscht!" +messwerte: getLoudness=0 -> none, screen "Alles still" +braucht: forSchleife, verzweigung +tipp: Nimm den Code oben und schreibe danach `if (laut) { … } else { … }`. +tipp: In die Zweige kommen `mbot.showText("Geklatscht!");` und `mbot.showText("Alles still");`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +::: übung vb-fehler-11-merker-boolean +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Wurde geklatscht?“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-11-merker-boolean-start.visustruct +messwerte: getLoudness=0/90/0 -> none, screen "Geklatscht!" +messwerte: getLoudness=0 -> none, screen "Alles still" +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie schreibt man wahr und falsch in Java? Java unterscheidet Groß- und Kleinschreibung. +tipp: Richtig heißt es `laut = true`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +## Spiel: true oder false? + +::: spiel frage +titel: Spiel: true oder false? +intro: Ludwig fragt, was in der Bedingung herauskommt. Sechs Runden. +frage: Ist es true oder false? +antworten: true | false + +runde: +frage: `mbot.getDistance() < 10`, der Abstand ist 25 cm. +richtig: false +> 25 ist nicht kleiner als 10. + +runde: +frage: `mbot.isButtonA()`, und du drückst gerade Taste A. +richtig: true +> Der Sensor meldet: gedrückt. + +runde: +frage: `boolean dunkel = false`. In der Schleife wird es nie dunkel. Was ist `dunkel` danach? +richtig: false +> Niemand hat den Merker auf `true` gesetzt. + +runde: +frage: `boolean dunkel = false`. In der Schleife wird es einmal dunkel, danach wieder hell. Was ist `dunkel` danach? +richtig: true +> Ein Merker bleibt `true`, wenn er einmal gesetzt wurde. + +runde: +frage: `mbot.getBrightness() > 50`, die Helligkeit ist 50. +richtig: false +> 50 ist nicht größer als 50. + +runde: +frage: `!mbot.isButtonA()`, und du drückst Taste A nicht. +richtig: true +> Taste A ist nicht gedrückt, also `false`. Das `!` dreht es um: `true`. +::: + +::: quiz +? Welche Werte kann eine Variable vom Typ `boolean` haben? +→ Wahr oder falsch +- [ ] Jede ganze Zahl +- [x] Nur `true` und `false` +- [ ] Nur 0 und 1 +? Womit fängt ein Merker an? +→ Der Merker +- [x] Mit `false`, weil noch nichts passiert ist +- [ ] Mit `true` +- [ ] Mit dem ersten Messwert +> Erst wenn das Ereignis passiert, wird er `true`. +? Wie fragst du in Java ab, ob der Merker `laut` wahr ist? +→ Jetzt in Java: Wurde geklatscht? +- [x] `if (laut)` +- [ ] `if (laut = true)` +- [ ] `if laut` +> `laut` ist selbst schon wahr oder falsch. Ein einzelnes `=` wäre eine Zuweisung. +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann eine Variable vom Typ `boolean` anlegen. → Wahr oder falsch +- Ich kann mit einem Merker festhalten, ob etwas passiert ist. → Der Merker +- Ich kann einen Merker nach der Schleife in einer Bedingung abfragen. → Jetzt in Java: Wurde geklatscht? +::: diff --git a/web/lessons/de/visubot/21-zustaende.md b/web/lessons/de/visubot/21-zustaende.md new file mode 100644 index 00000000..87a8c384 --- /dev/null +++ b/web/lessons/de/visubot/21-zustaende.md @@ -0,0 +1,156 @@ +--- +titel: Zustände: Was mache ich gerade? +bereich: Motoren und Methoden +kurz: Mit einer Zustandsvariablen und einer Fallauswahl eine Robo-Ampel weiterschalten. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- erklären, was ein Zustand ist +- mit einer Fallauswahl je nach Zustand handeln und in den nächsten Zustand wechseln +- Zustände in Java mit Namen und `.equals` unterscheiden +::: + +## Was ist ein Zustand? + +Eine Ampel ist immer in genau einem **Zustand**: rot, grün oder gelb. In jedem Zustand weiß sie zwei Dinge: Was zeige ich? Und was kommt danach? + +Unsere Robo-Ampel hat drei Zustände. Jeder bekommt eine Nummer: + +| Zustand | LEDs | danach | +|---|---|---| +| 0 | rot | 1 | +| 1 | grün | 2 | +| 2 | gelb | 0 | + +Den aktuellen Zustand speicherst du in einer Variablen: `int zustand = 0`. So eine Variable heißt **Zustandsvariable**. Ein Programm, das so von Zustand zu Zustand springt, heißt **Zustandsautomat**. + +> Eine echte Ampel in Deutschland hat vier Zustände: rot, rot-gelb, grün, gelb. Unsere Robo-Ampel lässt rot-gelb weg. + +::: angeberwissen +Auch ein Saugroboter ist ein Zustandsautomat: saugen, ausweichen, zur Ladestation fahren. Ich habe nur zwei Zustände: fressen und schlafen. +::: + +## Die Robo-Ampel im Struktogramm + +Die Fallauswahl passt perfekt: Für jeden Zustand gibt es einen Fall. In jedem Fall stehen zwei Kästen: Was tue ich? Und welcher Zustand kommt als Nächstes? + +::: übung vb-ampel-zustand +titel: Robo-Ampel +auftrag: Baue ein Struktogramm: Lege `int zustand = 0` an. Eine For-Schleife läuft sechsmal. In ihr steht eine Fallauswahl über `zustand`. Fall 0: LEDs rot, `zustand = 1`. Fall 1: LEDs grün, `zustand = 2`. Sonst: LEDs gelb, `zustand = 0`. Nach der Fallauswahl wartet der mBot2 eine Sekunde. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, fallauswahl +tipp: Die Fallauswahl findest du bei den Elementen. Schreib `zustand` hinein. Die Fälle heißen 0, 1 und sonst (default). +tipp: Die Farben sind `mbot.setLed(255, 0, 0)` für rot, `mbot.setLed(0, 255, 0)` für grün und `mbot.setLed(255, 200, 0)` für gelb. Unter der Fallauswahl, noch in der Schleife, steht `mbot.pause(1000)`. +lösung: vb-ampel-zustand-loesung.visustruct +::: + +> 📘 **Mehr dazu ohne Roboter:** In VisuStruct gibt es die Lektion [„Fallauswahl“](?visustruct&lektion=10-fallauswahl). Sie öffnet sich in einem neuen Fenster. + +## Jetzt in Java: Zustände mit Namen + +Nummern sind schnell vergessen. Was war noch mal Zustand 2? Lesbarer sind Namen. Dann ist der Zustand ein Text: + +```java +String zustand = "rot"; +... +if (zustand.equals("rot")) { + mbot.setLed(255, 0, 0); + zustand = "grün"; +} else if (zustand.equals("grün")) { + ... +``` + +Texte vergleichst du in Java mit `.equals("…")`, nicht mit `==`. + +::: übung vb-java-ampel-text +titel: Ampel mit Namen +code: java +auftrag: Schreibe die Robo-Ampel in Java mit `String zustand = "rot";`. Prüfe mit `if` und `else if`, in welchem Zustand die Ampel ist: rot, dann grün, dann gelb, dann wieder rot. Die Schleife läuft sechsmal, nach jedem Durchgang 1 Sekunde Pause. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, verzweigung +tipp: In der Schleife: `if (zustand.equals("rot")) { … } else if (zustand.equals("grün")) { … } else { … }` und danach `mbot.pause(1000);`. +tipp: Im Fall rot stehen `mbot.setLed(255, 0, 0);` und `zustand = "grün";`. Grün schaltet auf `"gelb"`, gelb wieder auf `"rot"`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +::: übung vb-fehler-21-zustaende +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Ampel mit Namen“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-21-zustaende-start.visustruct +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +tipp: Ein Text gehört in Anführungszeichen. Ohne sie sucht Java eine Variable mit diesem Namen. +tipp: Richtig heißt es `zustand = "grün"`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +## Zustände beim Fahren + +Mit Zuständen kann der mBot2 auch fahren. Im Zustand **fahren** fährt er vor. Sieht er eine Wand, wechselt er in den Zustand **drehen**. Dort dreht er sich einmal und wechselt zurück zu **fahren**. + +::: diagramm vb-l21z-ausweichen.visustruct +Fahren und Ausweichen mit zwei Zuständen. Öffne das Diagramm im Editor und probiere es in einer Welt aus. +::: + +## Spiel: Welcher Zustand kommt jetzt? + +::: spiel frage +titel: Spiel: Welcher Zustand kommt jetzt? +intro: Die Robo-Ampel schaltet: 0 rot → 1 grün → 2 gelb → 0 rot. Welcher Zustand kommt als Nächstes? Fünf Runden. +frage: Welcher Zustand kommt danach? +antworten: 0 | 1 | 2 + +runde: +frage: Die Ampel ist gerade in Zustand **0** (rot). +richtig: 1 +> Nach rot kommt grün. + +runde: +frage: Die Ampel ist gerade in Zustand **2** (gelb). +richtig: 0 +> Nach gelb geht es wieder von vorn los. + +runde: +frage: Die Ampel ist gerade in Zustand **1** (grün). +richtig: 2 +> Nach grün kommt gelb. + +runde: +frage: Die Ampel startet in Zustand 0 und schaltet **zweimal** weiter. +richtig: 2 +> 0 → 1 → 2. + +runde: +frage: Die Ampel startet in Zustand 0 und schaltet **dreimal** weiter. +richtig: 0 +> 0 → 1 → 2 → 0. Nach drei Schritten ist sie wieder am Anfang. +::: + +::: quiz +? Was speichert eine Zustandsvariable? +→ Was ist ein Zustand? +- [ ] Wie oft die Schleife gelaufen ist +- [x] Was das Programm gerade macht, zum Beispiel rot oder grün +- [ ] Den größten Messwert +? Was steht in jedem Fall der Fallauswahl? +→ Die Robo-Ampel im Struktogramm +- [x] Was zu tun ist und welcher Zustand als Nächstes kommt +- [ ] Nur eine Pause +- [ ] Eine neue Schleife +? Wie prüfst du in Java, ob `zustand` den Text `"rot"` enthält? +→ Jetzt in Java: Zustände mit Namen +- [ ] `zustand == rot` +- [x] `zustand.equals("rot")` +- [ ] `zustand = "rot"` +> Texte vergleichst du mit `.equals`. Ein einzelnes `=` würde `"rot"` zuweisen. +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann erklären, was ein Zustand ist. → Was ist ein Zustand? +- Ich kann mit einer Fallauswahl je nach Zustand handeln und in den nächsten Zustand wechseln. → Die Robo-Ampel im Struktogramm +- Ich kann Zustände in Java mit Namen und `.equals` unterscheiden. → Jetzt in Java: Zustände mit Namen +::: diff --git a/web/lessons/diagramme/en/vb-ampel-zustand-loesung.visustruct b/web/lessons/diagramme/en/vb-ampel-zustand-loesung.visustruct new file mode 100644 index 00000000..3512436d --- /dev/null +++ b/web/lessons/diagramme/en/vb-ampel-zustand-loesung.visustruct @@ -0,0 +1,43 @@ + + + + 105;110;116;32;115;116;97;116;101;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 115;116;97;116;101; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;49; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 115;116;97;116;101;32;61;32;50; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;48; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + diff --git a/web/lessons/diagramme/en/vb-fehler-05-zaehlen-und-summieren-start.visustruct b/web/lessons/diagramme/en/vb-fehler-05-zaehlen-und-summieren-start.visustruct new file mode 100644 index 00000000..5469aca6 --- /dev/null +++ b/web/lessons/diagramme/en/vb-fehler-05-zaehlen-und-summieren-start.visustruct @@ -0,0 +1,31 @@ + + + + 105;110;116;32;115;105;100;101;32;61;32;49;48; + + + 105;110;116;32;116;111;116;97;108;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;105;100;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 116;111;116;97;108;32;61;32;84;111;116;97;108;32;43;32;115;105;100;101; + + + 115;105;100;101;32;61;32;115;105;100;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;116;111;116;97;108;32;43;32;34;32;99;109;34;41; + + diff --git a/web/lessons/diagramme/en/vb-fehler-06-konstanten-final-start.visustruct b/web/lessons/diagramme/en/vb-fehler-06-konstanten-final-start.visustruct new file mode 100644 index 00000000..e8778244 --- /dev/null +++ b/web/lessons/diagramme/en/vb-fehler-06-konstanten-final-start.visustruct @@ -0,0 +1,19 @@ + + + + 99;111;110;115;116;32;105;110;116;32;83;73;68;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;105;100;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + diff --git a/web/lessons/diagramme/en/vb-fehler-06-nah-mittel-weit-start.visustruct b/web/lessons/diagramme/en/vb-fehler-06-nah-mittel-weit-start.visustruct new file mode 100644 index 00000000..da7d550f --- /dev/null +++ b/web/lessons/diagramme/en/vb-fehler-06-nah-mittel-weit-start.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;78;105;103;104;116;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;117;115;107;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;97;121;34;41; + + + + + + diff --git a/web/lessons/diagramme/en/vb-fehler-08-groesster-wert-start.visustruct b/web/lessons/diagramme/en/vb-fehler-08-groesster-wert-start.visustruct new file mode 100644 index 00000000..d795bd53 --- /dev/null +++ b/web/lessons/diagramme/en/vb-fehler-08-groesster-wert-start.visustruct @@ -0,0 +1,41 @@ + + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;100;105;114;101;99;116;105;111;110;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 100;105;115;116;97;110;99;101;32;62;32;109;97;120; + + + 109;97;120;32;61;32;100;105;115;116;97;110;99;101; + + + 100;105;114;101;99;116;105;111;110;32;61;32;73; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;114;101;99;116;105;111;110;58;32;34;32;43;32;100;105;114;101;99;116;105;111;110;41; + + diff --git a/web/lessons/diagramme/en/vb-fehler-11-merker-boolean-start.visustruct b/web/lessons/diagramme/en/vb-fehler-11-merker-boolean-start.visustruct new file mode 100644 index 00000000..f1b27d79 --- /dev/null +++ b/web/lessons/diagramme/en/vb-fehler-11-merker-boolean-start.visustruct @@ -0,0 +1,42 @@ + + + + 98;111;111;108;101;97;110;32;108;111;117;100;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;111;117;100;32;61;32;84;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;111;117;100; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;67;108;97;112;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;32;113;117;105;101;116;34;41; + + + + diff --git a/web/lessons/diagramme/en/vb-fehler-21-zustaende-start.visustruct b/web/lessons/diagramme/en/vb-fehler-21-zustaende-start.visustruct new file mode 100644 index 00000000..77445908 --- /dev/null +++ b/web/lessons/diagramme/en/vb-fehler-21-zustaende-start.visustruct @@ -0,0 +1,48 @@ + + + + 83;116;114;105;110;103;32;115;116;97;116;101;32;61;32;34;114;101;100;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;114;101;100;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;103;114;101;101;110; + + + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;103;114;101;101;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;121;101;108;108;111;119;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;114;101;100;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + diff --git a/web/lessons/diagramme/en/vb-java-ampel-text-loesung.visustruct b/web/lessons/diagramme/en/vb-java-ampel-text-loesung.visustruct new file mode 100644 index 00000000..6eb4839c --- /dev/null +++ b/web/lessons/diagramme/en/vb-java-ampel-text-loesung.visustruct @@ -0,0 +1,48 @@ + + + + 83;116;114;105;110;103;32;115;116;97;116;101;32;61;32;34;114;101;100;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;114;101;100;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;103;114;101;101;110;34; + + + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;103;114;101;101;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;121;101;108;108;111;119;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;114;101;100;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + diff --git a/web/lessons/diagramme/en/vb-java-klatsch-merker-loesung.visustruct b/web/lessons/diagramme/en/vb-java-klatsch-merker-loesung.visustruct new file mode 100644 index 00000000..b609f3f5 --- /dev/null +++ b/web/lessons/diagramme/en/vb-java-klatsch-merker-loesung.visustruct @@ -0,0 +1,42 @@ + + + + 98;111;111;108;101;97;110;32;108;111;117;100;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;111;117;100;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;111;117;100; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;67;108;97;112;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;32;113;117;105;101;116;34;41; + + + + diff --git a/web/lessons/diagramme/en/vb-java-konstante-seite-loesung.visustruct b/web/lessons/diagramme/en/vb-java-konstante-seite-loesung.visustruct new file mode 100644 index 00000000..bccd6cdc --- /dev/null +++ b/web/lessons/diagramme/en/vb-java-konstante-seite-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 99;111;110;115;116;32;105;110;116;32;83;73;68;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;83;73;68;69;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + diff --git a/web/lessons/diagramme/en/vb-java-richtung-loesung.visustruct b/web/lessons/diagramme/en/vb-java-richtung-loesung.visustruct new file mode 100644 index 00000000..567aab66 --- /dev/null +++ b/web/lessons/diagramme/en/vb-java-richtung-loesung.visustruct @@ -0,0 +1,41 @@ + + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;100;105;114;101;99;116;105;111;110;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 100;105;115;116;97;110;99;101;32;62;32;109;97;120; + + + 109;97;120;32;61;32;100;105;115;116;97;110;99;101; + + + 100;105;114;101;99;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;114;101;99;116;105;111;110;58;32;34;32;43;32;100;105;114;101;99;116;105;111;110;41; + + diff --git a/web/lessons/diagramme/en/vb-java-spirale-strecke-loesung.visustruct b/web/lessons/diagramme/en/vb-java-spirale-strecke-loesung.visustruct new file mode 100644 index 00000000..680ade9b --- /dev/null +++ b/web/lessons/diagramme/en/vb-java-spirale-strecke-loesung.visustruct @@ -0,0 +1,31 @@ + + + + 105;110;116;32;115;105;100;101;32;61;32;49;48; + + + 105;110;116;32;116;111;116;97;108;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;105;100;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 116;111;116;97;108;32;61;32;116;111;116;97;108;32;43;32;115;105;100;101; + + + 115;105;100;101;32;61;32;115;105;100;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;116;111;116;97;108;32;43;32;34;32;99;109;34;41; + + diff --git a/web/lessons/diagramme/en/vb-java-tageszeit-loesung.visustruct b/web/lessons/diagramme/en/vb-java-tageszeit-loesung.visustruct new file mode 100644 index 00000000..0cbbcf06 --- /dev/null +++ b/web/lessons/diagramme/en/vb-java-tageszeit-loesung.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;78;105;103;104;116;34;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;117;115;107;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;97;121;34;41; + + + + + + diff --git a/web/lessons/diagramme/en/vb-konstante-wand-loesung.visustruct b/web/lessons/diagramme/en/vb-konstante-wand-loesung.visustruct new file mode 100644 index 00000000..a3fd1d85 --- /dev/null +++ b/web/lessons/diagramme/en/vb-konstante-wand-loesung.visustruct @@ -0,0 +1,17 @@ + + + + 99;111;110;115;116;32;105;110;116;32;68;73;83;84;65;78;67;69;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;68;73;83;84;65;78;67;69; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; + + diff --git a/web/lessons/diagramme/en/vb-l06k-mit.visustruct b/web/lessons/diagramme/en/vb-l06k-mit.visustruct new file mode 100644 index 00000000..36bfc964 --- /dev/null +++ b/web/lessons/diagramme/en/vb-l06k-mit.visustruct @@ -0,0 +1,25 @@ + + + + 99;111;110;115;116;32;105;110;116;32;68;73;83;84;65;78;67;69;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;68;73;83;84;65;78;67;69; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;68;73;83;84;65;78;67;69; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + diff --git a/web/lessons/diagramme/en/vb-l06k-ohne.visustruct b/web/lessons/diagramme/en/vb-l06k-ohne.visustruct new file mode 100644 index 00000000..5bd24605 --- /dev/null +++ b/web/lessons/diagramme/en/vb-l06k-ohne.visustruct @@ -0,0 +1,22 @@ + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + diff --git a/web/lessons/diagramme/en/vb-l06n-einparkhilfe.visustruct b/web/lessons/diagramme/en/vb-l06n-einparkhilfe.visustruct new file mode 100644 index 00000000..5a30edf7 --- /dev/null +++ b/web/lessons/diagramme/en/vb-l06n-einparkhilfe.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;111;112;34;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;108;111;119;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;70;114;101;101;34;41; + + + + + + diff --git a/web/lessons/diagramme/en/vb-l21z-ausweichen.visustruct b/web/lessons/diagramme/en/vb-l21z-ausweichen.visustruct new file mode 100644 index 00000000..6e91129f --- /dev/null +++ b/web/lessons/diagramme/en/vb-l21z-ausweichen.visustruct @@ -0,0 +1,39 @@ + + + + 83;116;114;105;110;103;32;115;116;97;116;101;32;61;32;34;100;114;105;118;101;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;50;48; + 105;43;43; + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;100;114;105;118;101;34;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; + + + 115;116;97;116;101;32;61;32;34;116;117;114;110;34; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 115;116;97;116;101;32;61;32;34;100;114;105;118;101;34; + + + + + + diff --git a/web/lessons/diagramme/en/vb-meister-platz-loesung.visustruct b/web/lessons/diagramme/en/vb-meister-platz-loesung.visustruct new file mode 100644 index 00000000..353b2534 --- /dev/null +++ b/web/lessons/diagramme/en/vb-meister-platz-loesung.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 100;105;115;116;97;110;99;101;32;62;32;109;97;120; + + + 109;97;120;32;61;32;100;105;115;116;97;110;99;101; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;70;97;114;116;104;101;115;116;58;32;34;32;43;32;109;97;120;32;43;32;34;32;99;109;34;41; + + diff --git a/web/lessons/diagramme/en/vb-schritte-welt-loesung.visustruct b/web/lessons/diagramme/en/vb-schritte-welt-loesung.visustruct new file mode 100644 index 00000000..63fa86cd --- /dev/null +++ b/web/lessons/diagramme/en/vb-schritte-welt-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;115;116;101;112;115;32;61;32;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + 115;116;101;112;115;32;61;32;115;116;101;112;115;32;43;32;49; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115;41; + + diff --git a/web/lessons/diagramme/en/vb-tempo-abstand-loesung.visustruct b/web/lessons/diagramme/en/vb-tempo-abstand-loesung.visustruct new file mode 100644 index 00000000..5e76eef7 --- /dev/null +++ b/web/lessons/diagramme/en/vb-tempo-abstand-loesung.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;98;97;99;107;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;50;48;41; + + + + + + diff --git a/web/lessons/diagramme/en/vb-wurde-es-dunkel-loesung.visustruct b/web/lessons/diagramme/en/vb-wurde-es-dunkel-loesung.visustruct new file mode 100644 index 00000000..68ae8a5c --- /dev/null +++ b/web/lessons/diagramme/en/vb-wurde-es-dunkel-loesung.visustruct @@ -0,0 +1,42 @@ + + + + 98;111;111;108;101;97;110;32;100;97;114;107;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 100;97;114;107;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 100;97;114;107; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;116;32;119;97;115;32;100;97;114;107;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;119;97;121;115;32;98;114;105;103;104;116;34;41; + + + + diff --git a/web/lessons/diagramme/vb-ampel-zustand-loesung.visustruct b/web/lessons/diagramme/vb-ampel-zustand-loesung.visustruct new file mode 100644 index 00000000..e8c16ca2 --- /dev/null +++ b/web/lessons/diagramme/vb-ampel-zustand-loesung.visustruct @@ -0,0 +1,43 @@ + + + + 105;110;116;32;122;117;115;116;97;110;100;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 122;117;115;116;97;110;100; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;49; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;50; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;48; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + diff --git a/web/lessons/diagramme/vb-fehler-05-zaehlen-und-summieren-start.visustruct b/web/lessons/diagramme/vb-fehler-05-zaehlen-und-summieren-start.visustruct new file mode 100644 index 00000000..ada1a5f9 --- /dev/null +++ b/web/lessons/diagramme/vb-fehler-05-zaehlen-und-summieren-start.visustruct @@ -0,0 +1,31 @@ + + + + 105;110;116;32;115;101;105;116;101;32;61;32;49;48; + + + 105;110;116;32;103;101;115;97;109;116;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;101;105;116;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 103;101;115;97;109;116;32;61;32;71;101;115;97;109;116;32;43;32;115;101;105;116;101; + + + 115;101;105;116;101;32;61;32;115;101;105;116;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;103;101;115;97;109;116;32;43;32;34;32;99;109;34;41; + + diff --git a/web/lessons/diagramme/vb-fehler-06-konstanten-final-start.visustruct b/web/lessons/diagramme/vb-fehler-06-konstanten-final-start.visustruct new file mode 100644 index 00000000..5a1b924b --- /dev/null +++ b/web/lessons/diagramme/vb-fehler-06-konstanten-final-start.visustruct @@ -0,0 +1,19 @@ + + + + 99;111;110;115;116;32;105;110;116;32;83;69;73;84;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;101;105;116;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + diff --git a/web/lessons/diagramme/vb-fehler-06-nah-mittel-weit-start.visustruct b/web/lessons/diagramme/vb-fehler-06-nah-mittel-weit-start.visustruct new file mode 100644 index 00000000..5a614024 --- /dev/null +++ b/web/lessons/diagramme/vb-fehler-06-nah-mittel-weit-start.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;78;97;99;104;116;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;228;109;109;101;114;117;110;103;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;84;97;103;34;41; + + + + + + diff --git a/web/lessons/diagramme/vb-fehler-08-groesster-wert-start.visustruct b/web/lessons/diagramme/vb-fehler-08-groesster-wert-start.visustruct new file mode 100644 index 00000000..b8b7ab73 --- /dev/null +++ b/web/lessons/diagramme/vb-fehler-08-groesster-wert-start.visustruct @@ -0,0 +1,41 @@ + + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;114;105;99;104;116;117;110;103;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 97;98;115;116;97;110;100;32;62;32;109;97;120; + + + 109;97;120;32;61;32;97;98;115;116;97;110;100; + + + 114;105;99;104;116;117;110;103;32;61;32;73; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;82;105;99;104;116;117;110;103;58;32;34;32;43;32;114;105;99;104;116;117;110;103;41; + + diff --git a/web/lessons/diagramme/vb-fehler-11-merker-boolean-start.visustruct b/web/lessons/diagramme/vb-fehler-11-merker-boolean-start.visustruct new file mode 100644 index 00000000..54781a09 --- /dev/null +++ b/web/lessons/diagramme/vb-fehler-11-merker-boolean-start.visustruct @@ -0,0 +1,42 @@ + + + + 98;111;111;108;101;97;110;32;108;97;117;116;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;97;117;116;32;61;32;84;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;97;117;116; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;107;108;97;116;115;99;104;116;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;101;115;32;115;116;105;108;108;34;41; + + + + diff --git a/web/lessons/diagramme/vb-fehler-21-zustaende-start.visustruct b/web/lessons/diagramme/vb-fehler-21-zustaende-start.visustruct new file mode 100644 index 00000000..086ea035 --- /dev/null +++ b/web/lessons/diagramme/vb-fehler-21-zustaende-start.visustruct @@ -0,0 +1,48 @@ + + + + 83;116;114;105;110;103;32;122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;114;111;116;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;103;114;252;110; + + + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;103;114;252;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;103;101;108;98;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + diff --git a/web/lessons/diagramme/vb-java-ampel-text-loesung.visustruct b/web/lessons/diagramme/vb-java-ampel-text-loesung.visustruct new file mode 100644 index 00000000..97995a57 --- /dev/null +++ b/web/lessons/diagramme/vb-java-ampel-text-loesung.visustruct @@ -0,0 +1,48 @@ + + + + 83;116;114;105;110;103;32;122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;114;111;116;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;103;114;252;110;34; + + + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;103;114;252;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;103;101;108;98;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + diff --git a/web/lessons/diagramme/vb-java-klatsch-merker-loesung.visustruct b/web/lessons/diagramme/vb-java-klatsch-merker-loesung.visustruct new file mode 100644 index 00000000..c378e8fa --- /dev/null +++ b/web/lessons/diagramme/vb-java-klatsch-merker-loesung.visustruct @@ -0,0 +1,42 @@ + + + + 98;111;111;108;101;97;110;32;108;97;117;116;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;97;117;116;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;97;117;116; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;107;108;97;116;115;99;104;116;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;101;115;32;115;116;105;108;108;34;41; + + + + diff --git a/web/lessons/diagramme/vb-java-konstante-seite-loesung.visustruct b/web/lessons/diagramme/vb-java-konstante-seite-loesung.visustruct new file mode 100644 index 00000000..4709b9a9 --- /dev/null +++ b/web/lessons/diagramme/vb-java-konstante-seite-loesung.visustruct @@ -0,0 +1,19 @@ + + + + 99;111;110;115;116;32;105;110;116;32;83;69;73;84;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;83;69;73;84;69;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + diff --git a/web/lessons/diagramme/vb-java-richtung-loesung.visustruct b/web/lessons/diagramme/vb-java-richtung-loesung.visustruct new file mode 100644 index 00000000..9eb32a98 --- /dev/null +++ b/web/lessons/diagramme/vb-java-richtung-loesung.visustruct @@ -0,0 +1,41 @@ + + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;114;105;99;104;116;117;110;103;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 97;98;115;116;97;110;100;32;62;32;109;97;120; + + + 109;97;120;32;61;32;97;98;115;116;97;110;100; + + + 114;105;99;104;116;117;110;103;32;61;32;105; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;82;105;99;104;116;117;110;103;58;32;34;32;43;32;114;105;99;104;116;117;110;103;41; + + diff --git a/web/lessons/diagramme/vb-java-spirale-strecke-loesung.visustruct b/web/lessons/diagramme/vb-java-spirale-strecke-loesung.visustruct new file mode 100644 index 00000000..9f6a7df9 --- /dev/null +++ b/web/lessons/diagramme/vb-java-spirale-strecke-loesung.visustruct @@ -0,0 +1,31 @@ + + + + 105;110;116;32;115;101;105;116;101;32;61;32;49;48; + + + 105;110;116;32;103;101;115;97;109;116;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;101;105;116;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 103;101;115;97;109;116;32;61;32;103;101;115;97;109;116;32;43;32;115;101;105;116;101; + + + 115;101;105;116;101;32;61;32;115;101;105;116;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;103;101;115;97;109;116;32;43;32;34;32;99;109;34;41; + + diff --git a/web/lessons/diagramme/vb-java-tageszeit-loesung.visustruct b/web/lessons/diagramme/vb-java-tageszeit-loesung.visustruct new file mode 100644 index 00000000..766d96d2 --- /dev/null +++ b/web/lessons/diagramme/vb-java-tageszeit-loesung.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;78;97;99;104;116;34;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;228;109;109;101;114;117;110;103;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;84;97;103;34;41; + + + + + + diff --git a/web/lessons/diagramme/vb-konstante-wand-loesung.visustruct b/web/lessons/diagramme/vb-konstante-wand-loesung.visustruct new file mode 100644 index 00000000..cab9e6a1 --- /dev/null +++ b/web/lessons/diagramme/vb-konstante-wand-loesung.visustruct @@ -0,0 +1,17 @@ + + + + 99;111;110;115;116;32;105;110;116;32;65;66;83;84;65;78;68;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;65;66;83;84;65;78;68; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; + + diff --git a/web/lessons/diagramme/vb-l06k-mit.visustruct b/web/lessons/diagramme/vb-l06k-mit.visustruct new file mode 100644 index 00000000..46fc7980 --- /dev/null +++ b/web/lessons/diagramme/vb-l06k-mit.visustruct @@ -0,0 +1,25 @@ + + + + 99;111;110;115;116;32;105;110;116;32;65;66;83;84;65;78;68;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;65;66;83;84;65;78;68; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;65;66;83;84;65;78;68; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + diff --git a/web/lessons/diagramme/vb-l06k-ohne.visustruct b/web/lessons/diagramme/vb-l06k-ohne.visustruct new file mode 100644 index 00000000..35c22f4c --- /dev/null +++ b/web/lessons/diagramme/vb-l06k-ohne.visustruct @@ -0,0 +1,22 @@ + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + diff --git a/web/lessons/diagramme/vb-l06n-einparkhilfe.visustruct b/web/lessons/diagramme/vb-l06n-einparkhilfe.visustruct new file mode 100644 index 00000000..f41c348f --- /dev/null +++ b/web/lessons/diagramme/vb-l06n-einparkhilfe.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;111;112;112;34;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;97;110;103;115;97;109;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;70;114;101;105;34;41; + + + + + + diff --git a/web/lessons/diagramme/vb-l21z-ausweichen.visustruct b/web/lessons/diagramme/vb-l21z-ausweichen.visustruct new file mode 100644 index 00000000..eee0f567 --- /dev/null +++ b/web/lessons/diagramme/vb-l21z-ausweichen.visustruct @@ -0,0 +1,39 @@ + + + + 83;116;114;105;110;103;32;122;117;115;116;97;110;100;32;61;32;34;102;97;104;114;101;110;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;50;48; + 105;43;43; + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;102;97;104;114;101;110;34;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; + + + 122;117;115;116;97;110;100;32;61;32;34;100;114;101;104;101;110;34; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 122;117;115;116;97;110;100;32;61;32;34;102;97;104;114;101;110;34; + + + + + + diff --git a/web/lessons/diagramme/vb-meister-platz-loesung.visustruct b/web/lessons/diagramme/vb-meister-platz-loesung.visustruct new file mode 100644 index 00000000..59d5aac8 --- /dev/null +++ b/web/lessons/diagramme/vb-meister-platz-loesung.visustruct @@ -0,0 +1,35 @@ + + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 97;98;115;116;97;110;100;32;62;32;109;97;120; + + + 109;97;120;32;61;32;97;98;115;116;97;110;100; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;109;32;119;101;105;116;101;115;116;101;110;58;32;34;32;43;32;109;97;120;32;43;32;34;32;99;109;34;41; + + diff --git a/web/lessons/diagramme/vb-schritte-welt-loesung.visustruct b/web/lessons/diagramme/vb-schritte-welt-loesung.visustruct new file mode 100644 index 00000000..a30a0ede --- /dev/null +++ b/web/lessons/diagramme/vb-schritte-welt-loesung.visustruct @@ -0,0 +1,20 @@ + + + + 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + 115;99;104;114;105;116;116;101;32;61;32;115;99;104;114;105;116;116;101;32;43;32;49; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101;41; + + diff --git a/web/lessons/diagramme/vb-tempo-abstand-loesung.visustruct b/web/lessons/diagramme/vb-tempo-abstand-loesung.visustruct new file mode 100644 index 00000000..63518a55 --- /dev/null +++ b/web/lessons/diagramme/vb-tempo-abstand-loesung.visustruct @@ -0,0 +1,26 @@ + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;98;97;99;107;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;50;48;41; + + + + + + diff --git a/web/lessons/diagramme/vb-wurde-es-dunkel-loesung.visustruct b/web/lessons/diagramme/vb-wurde-es-dunkel-loesung.visustruct new file mode 100644 index 00000000..910f2711 --- /dev/null +++ b/web/lessons/diagramme/vb-wurde-es-dunkel-loesung.visustruct @@ -0,0 +1,42 @@ + + + + 98;111;111;108;101;97;110;32;100;117;110;107;101;108;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 100;117;110;107;101;108;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 100;117;110;107;101;108; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;69;115;32;119;97;114;32;100;117;110;107;101;108;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;109;109;101;114;32;104;101;108;108;34;41; + + + + diff --git a/web/lessons/en/begriffe.md b/web/lessons/en/begriffe.md index 5fd10fcb..5f3cfa84 100644 --- a/web/lessons/en/begriffe.md +++ b/web/lessons/en/begriffe.md @@ -120,6 +120,14 @@ A variable that counts along in a loop, usually i. also: endless loop, endless loops, infinite loop, infinite loops A loop whose condition never becomes false. It never stops by itself. +### Flag +also: flag, flags +A boolean variable that starts with false and is set to true as soon as something has happened. + +### State machine +also: state machine, state machines, state variable, state variables +A program that is always in exactly one state and changes to the next state by fixed rules, e.g. a traffic light. + ### Array also: array, arrays, Arrays A row of slots with one shared name and the same data type. diff --git a/web/lessons/en/visubot/05-zaehlen-und-summieren.md b/web/lessons/en/visubot/05-zaehlen-und-summieren.md new file mode 100644 index 00000000..4c4a869c --- /dev/null +++ b/web/lessons/en/visubot/05-zaehlen-und-summieren.md @@ -0,0 +1,150 @@ +--- +titel: Counting and adding up +bereich: Sensors and decisions +kurz: Count along with a variable and add values together. +--- + +## Skills I will gain now + +::: kompetenzen +- create a counter variable and count it up in a loop +- build a sum in a loop +- show the result on the screen after the loop +::: + +## Counting along + +How many steps does the mBot2 drive to the wall? You don't know in advance, the world is different every time. So the mBot2 should **count along**. You need three boxes for that: + +1. **Before** the loop: `int steps = 0`. At the start nothing has been counted yet. +2. **Inside** the loop: `steps = steps + 1`. One more after every step. +3. **After** the loop: show the result, for example with `mbot.showText("Steps: " + steps)`. + +Read `steps = steps + 1` from right to left: take the old value of `steps`, add 1 and store the result in `steps` again. A variable like this is called a **counter variable**, or counter for short. + +> Careful: if `int steps = 0` is **inside** the loop, the counter starts again at 0 in every pass. Then the result is always 1. + +::: angeberwissen +Your phone counts your steps exactly like this: with every step it calculates `steps = steps + 1`. I prefer counting my blades of grass. I'm at 4 million. +::: + +::: übung vb-schritte-welt +titel: Steps to the wall +auftrag: Build a structure chart: the mBot2 drives forward as long as the distance is greater than 15. It counts its steps along the way. Then it shows, for example, **Steps: 3** on the screen. There are three worlds. +welt: wand-kurz -> screen "Steps: 3" +welt: wand-mittel -> screen "Steps: 7" +welt: wand-lang -> screen "Steps: 12" +braucht: whileSchleife +tipp: The first box is `int steps = 0`. Then comes the while loop with `mbot.getDistance() > 15`. +tipp: Inside the loop are **drive forward** and `steps = steps + 1`. After the loop is `mbot.showText("Steps: " + steps)`. +lösung: vb-schritte-welt-loesung.visustruct +::: + +## Adding up + +A counter always grows by 1. A **sum** grows by different values. The mBot2 drives a spiral: first 10 cm, then 20, then 30, then 40. How far has it driven in total? + +| Pass | `side` | `total` afterwards | +|---|---|---| +| before | 10 | 0 | +| 1 | 10 | 0 + 10 = 10 | +| 2 | 20 | 10 + 20 = 30 | +| 3 | 30 | 30 + 30 = 60 | +| 4 | 40 | 60 + 40 = 100 | + +The pattern is the same as for counting. Only instead of 1 you now add the value that comes in: `total = total + side`. + +## Now in Java: spiral with distance + +::: übung vb-java-spirale-strecke +titel: Spiral with distance +code: java +auftrag: Write in Java: create `int side = 10` and `int total = 0`. Four times: drive `side` cm forward, turn right, add `side` to `total`, make `side` 10 bigger. Then show **Distance: 100 cm** on the screen. +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Distance: 100 cm" +braucht: forSchleife +tipp: The for loop has four lines: `mbot.forward(side);`, `mbot.turnRight();`, `total = total + side;` and `side = side + 10;`. +tipp: After the loop comes `mbot.showText("Distance: " + total + " cm");`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +::: übung vb-fehler-05-zaehlen-und-summieren +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Spiral with distance", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-05-zaehlen-und-summieren-start.visustruct +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Distance: 100 cm" +tipp: The error message names an unknown variable. What is the variable called where it is created? Java is case-sensitive. +tipp: It should be `total = total + side`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +## Game: what is in the variable at the end? + +::: spiel frage +titel: Game: what is in the variable at the end? +intro: Ludwig has written small programs. Work them out in your head. Five rounds. + +runde: +frage: `int z = 0`, then three times `z = z + 1`. What is `z`? +- 1 +- [x] 3 +- 0 +> Each pass adds 1: 1, 2, 3. + +runde: +frage: `int sum = 0`, then `sum = sum + 5` and `sum = sum + 7`. What is `sum`? +- 7 +- [x] 12 +- 5 +> 0 + 5 = 5, then 5 + 7 = 12. + +runde: +frage: A loop runs four times. Inside it are `int z = 0` and `z = z + 1`. What is `z` at the end? +- 4 +- [x] 1 +- 0 +> The counter is set back to 0 in every pass. It belongs before the loop. + +runde: +frage: `int total = 0`. The mBot2 drives 20, 20 and 30 cm and adds each one. What is `total`? +- 30 +- 20 +- [x] 70 +> 20 + 20 + 30 = 70. + +runde: +frage: `int steps = 10`, then twice `steps = steps + 1`. What is `steps`? +- 2 +- [x] 12 +- 11 +> Here the counter starts at 10, not at 0. +::: + +::: quiz +? Where do you create the counter variable `int steps = 0`? +→ Counting along +- [x] Before the loop +- [ ] Inside the loop +- [ ] After the loop +> Inside the loop it would become 0 again in every pass. +? What does `steps = steps + 1` do? +→ Counting along +- [ ] It compares steps with steps + 1. +- [x] It takes the old value, adds 1 and stores the result. +- [ ] It sets steps to 1. +? How do you add the side length `side` to the sum `total`? +→ Adding up +- [ ] `total = side` +- [ ] `side = total + side` +- [x] `total = total + side` +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can create a counter variable and count it up in a loop. → Counting along +- I can build a sum in a loop. → Adding up +- I can show the result on the screen after the loop. → Now in Java: spiral with distance +::: diff --git a/web/lessons/en/visubot/06-konstanten-final.md b/web/lessons/en/visubot/06-konstanten-final.md new file mode 100644 index 00000000..3b99236d --- /dev/null +++ b/web/lessons/en/visubot/06-konstanten-final.md @@ -0,0 +1,147 @@ +--- +titel: Fixed values with final +bereich: Sensors and decisions +kurz: Create a constant so that an important number appears in only one place. +--- + +## Skills I will gain now + +::: kompetenzen +- explain what a constant is +- create a constant in the structure chart and in Java +- use a constant in a condition and in a command +::: + +## One number in many places + +Ludwig has written a program for the hallway: the mBot2 drives up to 20 cm from the wall, turns around and drives up to 20 cm from the other wall. + +::: diagramm vb-l06k-ohne.visustruct +There and back. The number 20 appears in two places. +::: + +Now the mBot2 should stop at 30 cm instead. Ludwig has to find and change every 20. If he forgets one, the mBot2 stops once at 30 and once at 20 cm. In long programs this happens quickly. + +::: angeberwissen +Professionals call a number that just sits in the program a **magic number**. Magic, because nobody remembers what it means. The only magic I like is magic grass. +::: + +## Creating a constant + +A **constant** is better. It is a variable whose value stays the same once it is set. You create it once at the very top and after that you only use its name. + +| | Structure chart | Java | +|---|---|---| +| create | `const int DISTANCE = 20` | `final int DISTANCE = 20;` | +| use | `mbot.getDistance() > DISTANCE` | `mbot.getDistance() > DISTANCE` | + +In the structure chart you write `const` in front, in Java `final`. Both mean: this value does not change any more. Names of constants are written in **capital letters**, so you can spot them right away. + +::: diagramm vb-l06k-mit.visustruct +The same program with the constant DISTANCE. For 30 cm you only change the first line. +::: + +::: übung vb-konstante-wand +titel: Wall with a constant +auftrag: Create the constant `DISTANCE` with the value 20. The mBot2 drives forward as long as the distance is greater than `DISTANCE`. Then it plays a tone. There are three worlds. +welt: wand-kurz -> tone +welt: wand-mittel -> tone +welt: wand-lang -> tone +braucht: whileSchleife +tipp: The first box is a statement with `const int DISTANCE = 20`. Below it comes a while loop. +tipp: The loop condition is `mbot.getDistance() > DISTANCE`. Inside the loop is **drive forward**, after the loop **play tone**. +lösung: vb-konstante-wand-loesung.visustruct +::: + +## Now in Java: square with a constant + +A constant also fits into a command. With `final int SIDE = 30;`, `mbot.forward(SIDE);` drives exactly 30 cm. If the square should get bigger, you only change that one line. + +::: übung vb-java-konstante-seite +titel: Square with a constant +code: java +auftrag: Write in Java: create the constant `SIDE` with the value 30. Then use a for loop to drive a square with side length `SIDE`. +fahrt: 4 x (forward 30, turnRight) +braucht: forSchleife +tipp: The first line is `final int SIDE = 30;`. Then comes `for (int i = 0; i < 4; i++) { … }`. +tipp: Inside the loop are `mbot.forward(SIDE);` and `mbot.turnRight();`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +::: übung vb-fehler-06-konstanten-final +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Square with a constant", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-06-konstanten-final-start.visustruct +fahrt: 4 x (forward 30, turnRight) +tipp: The error message names an unknown variable. What is the constant called where it is created? Constants are written in capital letters. +tipp: It should be `mbot.forward(SIDE)`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +## Game: constant or variable? + +::: spiel frage +titel: Game: constant or variable? +intro: Ludwig is sorting values. If the value stays the same in the whole program, it is a constant. If it changes, it is a variable. Six rounds. +frage: Constant or variable? +antworten: Constant | Variable + +runde: +frage: The number of corners of a square +richtig: Constant +> A square always has four corners. + +runde: +frage: The distance the ultrasonic sensor is measuring right now +richtig: Variable +> When the mBot2 drives, the distance changes all the time. + +runde: +frage: The minimum distance at which the mBot2 should always stop +richtig: Constant +> You set it once, for example `final int DISTANCE = 20;`. + +runde: +frage: The number of steps the mBot2 has already driven +richtig: Variable +> It grows by 1 after every step. + +runde: +frage: The pitch of the warning tone, always 440 Hz +richtig: Constant +> The warning tone always sounds the same. + +runde: +frage: The battery level in percent +richtig: Variable +> The battery slowly runs down while driving. +::: + +::: quiz +? What is a constant? +→ Creating a constant +- [ ] A variable that changes in every pass +- [x] A variable whose value stays the same once it is set +- [ ] A sensor that always measures the same value +> You set a constant once. After that you only use its name. +? How do you create the constant `DISTANCE` with the value 20 in Java? +→ Creating a constant +- [ ] `const DISTANCE = 20;` +- [x] `final int DISTANCE = 20;` +- [ ] `int final = 20;` +> In Java, `final` comes before the data type. In the structure chart you write `const`. +? Why is a constant better than the number 20 in many places? +→ Creating a constant +- [ ] Because the program drives faster +- [x] Because you only have to change the value in one place +- [ ] Because the sensor measures more precisely +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can explain what a constant is. → Creating a constant +- I can create a constant in the structure chart and in Java. → Creating a constant +- I can use a constant in a condition and in a command. → Now in Java: square with a constant +::: diff --git a/web/lessons/en/visubot/06-nah-mittel-weit.md b/web/lessons/en/visubot/06-nah-mittel-weit.md new file mode 100644 index 00000000..c9364eea --- /dev/null +++ b/web/lessons/en/visubot/06-nah-mittel-weit.md @@ -0,0 +1,185 @@ +--- +titel: Near, medium or far? +bereich: Sensors and decisions +kurz: Build a branch with three cases and write it in Java with else if. +--- + +## Skills I will gain now + +::: kompetenzen +- build a branch with three cases +- read and write `else if` in Java +- check the conditions in the right order +::: + +## Three cases instead of two + +Many cars have a **parking aid**. If the wall is far away, everything is free. When it gets closer, it says: slow. When it is very close: stop! + +A branch has only two branches, yes and no. For three cases you put a second branch into the no branch of the first one: + +1. Is the distance less than 10? Then **Stop**. +2. Otherwise: is the distance less than 30? Then **Slow**. +3. Otherwise: **Free**. + +::: diagramm vb-l06n-einparkhilfe.visustruct +The parking aid. The second question is only asked if the answer to the first one was no. +::: + +Try it in the [simulation](#zeige-simulation): open the diagram in the editor and set the distance to 5, 20 and 50 cm. + +> 📘 **More without the robot:** VisuStruct has the lesson ["Branch"](?visustruct&lektion=08-verzweigung). It opens in a new window. + +## Speed by distance in the structure chart + +::: übung vb-tempo-abstand +titel: Speed by distance +auftrag: Build a structure chart with three cases: if the distance is less than 10, the mBot2 drives 5 cm backward. Otherwise: if the distance is less than 30, it drives 5 cm forward. Otherwise it drives 20 cm forward. +messwerte: getDistance=5 -> backward 5 +messwerte: getDistance=20 -> forward 5 +messwerte: getDistance=50 -> forward 20 +braucht: verzweigung +tipp: Build it like the parking aid: a branch with `mbot.getDistance() < 10` and in its no branch a second one with `mbot.getDistance() < 30`. +tipp: The commands are `mbot.backward(5)`, `mbot.forward(5)` and `mbot.forward(20)`. The last one goes into the no branch of the second branch. +lösung: vb-tempo-abstand-loesung.visustruct +::: + +> When checking, VisuStruct sets the distance to 5, 20 and 50 cm one after the other. + +## Now in Java: else if + +Look at the [Code](#zeige-codelive) area. The branch inside the no branch looks like this: + +```java +if (mbot.getDistance() < 10) { + mbot.showText("Stop"); +} else { + if (mbot.getDistance() < 30) { + mbot.showText("Slow"); + } else { + mbot.showText("Free"); + } +} +``` + +In Java you may write this more briefly. The `if` moves right behind the `else`: + +```java +if (mbot.getDistance() < 10) { + mbot.showText("Stop"); +} else if (mbot.getDistance() < 30) { + mbot.showText("Slow"); +} else { + mbot.showText("Free"); +} +``` + +Both mean exactly the same. With `else if` it is easier to read, though. You still always write the curly brackets `{ }`. + +::: übung vb-java-tageszeit +titel: Day or night? +code: java +auftrag: Write in Java with `else if`: if the brightness is less than 20, the mBot2 shows **Night**. Otherwise: if it is less than 60, it shows **Dusk**. Otherwise it shows **Day**. +messwerte: getBrightness=10 -> none, screen "Night" +messwerte: getBrightness=40 -> none, screen "Dusk" +messwerte: getBrightness=80 -> none, screen "Day" +braucht: verzweigung +tipp: You read the brightness with `mbot.getBrightness()`. The first condition is `mbot.getBrightness() < 20`. +tipp: `if (…) { mbot.showText("Night"); } else if (mbot.getBrightness() < 60) { mbot.showText("Dusk"); } else { mbot.showText("Day"); }` +lösung: vb-java-tageszeit-loesung.visustruct +::: + +::: übung vb-fehler-06-nah-mittel-weit +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Day or night?", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-06-nah-mittel-weit-start.visustruct +messwerte: getBrightness=10 -> none, screen "Night" +messwerte: getBrightness=40 -> none, screen "Dusk" +messwerte: getBrightness=80 -> none, screen "Day" +tipp: A text belongs in quotation marks. Without them Java looks for a variable with that name. +tipp: It should be `mbot.showText("Night")`. +lösung: vb-java-tageszeit-loesung.visustruct +::: + +## The order matters + +Ludwig rebuilt the parking aid and swapped the questions: + +```java +if (mbot.getDistance() < 30) { + mbot.showText("Slow"); +} else if (mbot.getDistance() < 10) { + mbot.showText("Stop"); +} +``` + +At 5 cm his mBot2 shows **Slow** instead of **Stop**. That is because 5 is also less than 30. The first condition is already true, so the second one is never checked. **Stop** never appears. + +> Remember: with `<`, check the smallest value first, then the next bigger one. + +::: spiel frage +titel: Game: what does the parking aid show? +intro: Ludwig's parking aid from above: under 10 cm **Stop**, under 30 cm **Slow**, otherwise **Free**. What does it show? Six rounds. +frage: What does the parking aid show? +antworten: Stop | Slow | Free + +runde: +frage: The distance is **5 cm**. +richtig: Stop +> 5 is less than 10. The very first question is true. + +runde: +frage: The distance is **25 cm**. +richtig: Slow +> 25 is not less than 10, but it is less than 30. + +runde: +frage: The distance is **80 cm**. +richtig: Free +> Both questions are false, so the last no branch is left. + +runde: +frage: The distance is exactly **10 cm**. +richtig: Slow +> 10 is not less than 10. The first question is false, the second true. + +runde: +frage: The distance is exactly **30 cm**. +richtig: Free +> 30 is not less than 30. Both questions are false. + +runde: +frage: The distance is **9 cm**. +richtig: Stop +> 9 is less than 10. +::: + +::: quiz +? How many branches do you need in the structure chart for three cases? +→ Three cases instead of two +- [ ] One +- [x] Two, the second in the no branch of the first +- [ ] Three side by side +> Each branch splits into two. The second one splits the no branch again. +? What does `else if` mean in Java? +→ Now in Java: else if +- [x] Otherwise, check another condition +- [ ] Repeat the condition +- [ ] Check both conditions at the same time +> `else if` is the short way of writing an `if` inside the `else` branch. +? Ludwig checks `< 30` first and then `< 10`. What happens at 5 cm? +→ The order matters +- [ ] Stop appears. +- [x] Slow appears. +- [ ] Nothing appears. +> 5 is also less than 30. The second condition is no longer checked. +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can build a branch with three cases. → Three cases instead of two +- I can read and write `else if` in Java. → Now in Java: else if +- I can check the conditions in the right order. → The order matters +::: diff --git a/web/lessons/en/visubot/08-groesster-wert.md b/web/lessons/en/visubot/08-groesster-wert.md new file mode 100644 index 00000000..e2692af2 --- /dev/null +++ b/web/lessons/en/visubot/08-groesster-wert.md @@ -0,0 +1,158 @@ +--- +titel: The biggest value +bereich: Sensors and decisions +kurz: Measure all around and remember the biggest value: where is the most space? +--- + +## Skills I will gain now + +::: kompetenzen +- remember the biggest value so far in a variable +- compare every new reading with the biggest so far in a loop +- find out with the mBot2 in which direction there is the most space +::: + +## Remembering the record + +In the long jump there is a board showing the **record**. After every jump the referee checks: is the new jump longer than the record? Then it goes on the board. Otherwise the old record stays. + +A program finds the biggest value in exactly the same way. The board is a variable `max`: + +1. **Before** the loop: `int max = 0`. Nothing is on the board yet. +2. **Inside** the loop: is the new value bigger than `max`? Then `max = value`. +3. **After** the loop, `max` holds the biggest value. + +The mBot2 turns four times and measures the distance each time. This is how it looks in a desk check: + +| Direction | measured | bigger than `max`? | `max` afterwards | +|---|---|---|---| +| before | | | 0 | +| ahead | 16 | yes | 16 | +| right | 36 | yes | 36 | +| behind | 6 | no | 36 | +| left | 26 | no | 36 | + +> Important: the branch only has a yes branch. If the value is not bigger, nothing happens. The old record stays. + +## Where is the most space? + +::: übung vb-meister-platz +titel: Where is the most space? +auftrag: Build a structure chart: create `int max = 0`. The mBot2 measures the distance four times and turns right after each one. If a distance is bigger than `max`, it remembers it in `max`. At the end it shows, for example, **Farthest: 36 cm**. There are two worlds. +welt: platz-1 -> screen "Farthest: 36 cm" +welt: platz-2 -> screen "Farthest: 46 cm" +braucht: forSchleife, verzweigung +tipp: The for loop runs four times. It contains three boxes: `int distance = mbot.getDistance()`, a branch and **turn right**. +tipp: The branch checks `distance > max`. The yes branch has `max = distance`, the no branch stays empty. After the loop: `mbot.showText("Farthest: " + max + " cm")`. +lösung: vb-meister-platz-loesung.visustruct +::: + +::: angeberwissen +Many robot vacuums have a small tower with a laser on top. It spins and measures the distances all around. That way the robot draws a map of the home. Nobody measures anything at my place. I just eat my way through. +::: + +## Now in Java: remembering the direction + +Now the mBot2 knows **how much** space there is at most. But **where**? For that it also remembers the direction in a second variable. The counter variable `i` tells you which measurement it was: 0 is ahead, 1 is right, 2 is behind and 3 is left. + +```java +if (distance > max) { + max = distance; + direction = i; +} +``` + +Both lines are in the yes branch. The direction only changes when there is a new record. + +::: übung vb-java-richtung +titel: Remembering the direction +code: java +auftrag: Write "Where is the most space?" in Java. Also remember in `int direction = 0` the number of the measurement with the biggest distance. At the end show, for example, **Direction: 1**. +welt: platz-1 -> screen "Direction: 1" +welt: platz-2 -> screen "Direction: 0" +braucht: forSchleife, verzweigung +tipp: Before the loop are `int max = 0;` and `int direction = 0;`. Inside the loop: `int distance = mbot.getDistance();`, the branch and `mbot.turnRight();`. +tipp: The yes branch has `max = distance;` and `direction = i;`. After the loop: `mbot.showText("Direction: " + direction);` +lösung: vb-java-richtung-loesung.visustruct +::: + +::: übung vb-fehler-08-groesster-wert +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Remembering the direction", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-08-groesster-wert-start.visustruct +welt: platz-1 -> screen "Direction: 1" +welt: platz-2 -> screen "Direction: 0" +tipp: The error message names an unknown variable. What is the variable called where it is created? Java is case-sensitive. +tipp: It should be `direction = i`. +lösung: vb-java-richtung-loesung.visustruct +::: + +## Game: new record? + +::: spiel frage +titel: Game: new record? +intro: The mBot2 measures several distances one after the other. What is in `max` at the end? Five rounds. + +runde: +frage: Measured: 20, 50, 30 +- 30 +- [x] 50 +- 100 +> 50 is the biggest value. The 30 after it is not a new record. + +runde: +frage: Measured: 10, 20, 30, 40 +- 10 +- [x] 40 +- 100 +> Every value is a new record. At the end the last one is there. + +runde: +frage: Measured: 90, 10, 20, 30 +- 30 +- [x] 90 +- 10 +> The record comes right at the start. After that no value is bigger. + +runde: +frage: Measured: 15, 15, 15 +- 45 +- 0 +- [x] 15 +> 15 is not bigger than 15. `max` stays 15. + +runde: +frage: Measured: 25, 60, 60, 5. In which direction (`i`) is the record? +- 0 +- [x] 1 +- 2 +> At `i = 1` the 60 comes. The second 60 is not **bigger**, so `direction` stays at 1. +::: + +::: quiz +? What does `max` start with before the loop? +→ Remembering the record +- [x] With 0, because nothing has been measured yet +- [ ] With the biggest value +- [ ] With 100 +> Every distance is bigger than 0, so the very first reading becomes the record. +? What is in the no branch of the branch `distance > max`? +→ Remembering the record +- [ ] `max = 0` +- [ ] `max = distance` +- [x] Nothing, the old record stays. +? When does `direction` change? +→ Now in Java: remembering the direction +- [ ] In every pass +- [x] Only when there is a new record +- [ ] Only in the last round +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can remember the biggest value so far in a variable. → Remembering the record +- I can compare every new reading with the biggest so far in a loop. → Where is the most space? +- I can find out with the mBot2 in which direction there is the most space. → Now in Java: remembering the direction +::: diff --git a/web/lessons/en/visubot/11-merker-boolean.md b/web/lessons/en/visubot/11-merker-boolean.md new file mode 100644 index 00000000..17cb69af --- /dev/null +++ b/web/lessons/en/visubot/11-merker-boolean.md @@ -0,0 +1,151 @@ +--- +titel: A flag with boolean +bereich: Sensors and decisions +kurz: Use a variable of type boolean to remember whether something happened. +--- + +## Skills I will gain now + +::: kompetenzen +- create a variable of type `boolean` +- use a flag to remember whether something happened +- check a flag in a condition after the loop +::: + +## True or false + +A variable of type `boolean` knows only two values: `true` and `false`. You already know this from the sensors: `mbot.isButtonA()` gives you `true` or `false`. A comparison like `mbot.getDistance() < 10` is also `true` or `false` in the end. + +| Code | Meaning | +|---|---| +| `boolean dark = false` | It has not been dark yet. | +| `dark = true` | Now it has been dark. | +| `if (dark)` | Is `dark` true? | + +With `if (dark)` you don't need `== true`. The variable itself is already true or false. + +## The flag + +The mBot2 should keep watch for three seconds. It measures the brightness again and again. Afterwards it should say whether it was dark **at any point**. + +For this you use a **flag**: a `boolean` variable that starts with `false`. When it gets dark, you set it to `true`. After that nobody sets it back. So after the loop you know: was it dark even just once? + +::: übung vb-wurde-es-dunkel +titel: Did it get dark? +auftrag: Build a structure chart: create `boolean dark = false`. In a for loop, check 30 times: if the brightness is less than 20, `dark` becomes true. Wait 100 ms in every pass. Then show **It was dark** or **Always bright**. +messwerte: getBrightness=80/10/80 -> none, screen "It was dark" +messwerte: getBrightness=80 -> none, screen "Always bright" +braucht: forSchleife, verzweigung +tipp: Inside the loop is a branch with `mbot.getBrightness() < 20`. The yes branch has `dark = true`, the no branch stays empty. Then comes `mbot.pause(100)`. +tipp: After the loop comes a second branch with the condition `dark`. Yes: `mbot.showText("It was dark")`, no: `mbot.showText("Always bright")`. +lösung: vb-wurde-es-dunkel-loesung.visustruct +::: + +> When checking, it gets dark for a moment in the middle of the watch and then bright again. Does your mBot2 still show **It was dark**? + +## Now in Java: was there a clap? + +In Java the flag looks like this: + +```java +boolean loud = false; +for (int i = 0; i < 30; i++) { + if (mbot.getLoudness() > 60) { + loud = true; + } + mbot.pause(100); +} +``` + +In Java you always write `true` and `false` in lower case. + +::: übung vb-java-klatsch-merker +titel: Was there a clap? +code: java +auftrag: Write in Java: the mBot2 listens for three seconds (30 times with a 100 ms pause). If the loudness is ever greater than 60, it remembers this in `boolean loud`. Then it shows **Clap!** or **All quiet**. +messwerte: getLoudness=0/90/0 -> none, screen "Clap!" +messwerte: getLoudness=0 -> none, screen "All quiet" +braucht: forSchleife, verzweigung +tipp: Take the code above and then write `if (loud) { … } else { … }`. +tipp: The branches get `mbot.showText("Clap!");` and `mbot.showText("All quiet");`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +::: übung vb-fehler-11-merker-boolean +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Was there a clap?", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-11-merker-boolean-start.visustruct +messwerte: getLoudness=0/90/0 -> none, screen "Clap!" +messwerte: getLoudness=0 -> none, screen "All quiet" +tipp: The error message names an unknown variable. How do you write true and false in Java? Java is case-sensitive. +tipp: It should be `loud = true`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +## Game: true or false? + +::: spiel frage +titel: Game: true or false? +intro: Ludwig asks what the condition comes out as. Six rounds. +frage: Is it true or false? +antworten: true | false + +runde: +frage: `mbot.getDistance() < 10`, the distance is 25 cm. +richtig: false +> 25 is not less than 10. + +runde: +frage: `mbot.isButtonA()`, and you are pressing button A right now. +richtig: true +> The sensor reports: pressed. + +runde: +frage: `boolean dark = false`. It never gets dark in the loop. What is `dark` afterwards? +richtig: false +> Nobody set the flag to `true`. + +runde: +frage: `boolean dark = false`. It gets dark once in the loop, then bright again. What is `dark` afterwards? +richtig: true +> A flag stays `true` once it has been set. + +runde: +frage: `mbot.getBrightness() > 50`, the brightness is 50. +richtig: false +> 50 is not greater than 50. + +runde: +frage: `!mbot.isButtonA()`, and you are not pressing button A. +richtig: true +> Button A is not pressed, so `false`. The `!` turns it around: `true`. +::: + +::: quiz +? Which values can a variable of type `boolean` have? +→ True or false +- [ ] Any whole number +- [x] Only `true` and `false` +- [ ] Only 0 and 1 +? What does a flag start with? +→ The flag +- [x] With `false`, because nothing has happened yet +- [ ] With `true` +- [ ] With the first reading +> Only when the event happens does it become `true`. +? How do you check in Java whether the flag `loud` is true? +→ Now in Java: was there a clap? +- [x] `if (loud)` +- [ ] `if (loud = true)` +- [ ] `if loud` +> `loud` itself is already true or false. A single `=` would be an assignment. +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can create a variable of type `boolean`. → True or false +- I can use a flag to remember whether something happened. → The flag +- I can check a flag in a condition after the loop. → Now in Java: was there a clap? +::: diff --git a/web/lessons/en/visubot/21-zustaende.md b/web/lessons/en/visubot/21-zustaende.md new file mode 100644 index 00000000..a0d09060 --- /dev/null +++ b/web/lessons/en/visubot/21-zustaende.md @@ -0,0 +1,156 @@ +--- +titel: States: what am I doing right now? +bereich: Motors and methods +kurz: Switch a robo traffic light on with a state variable and a switch. +--- + +## Skills I will gain now + +::: kompetenzen +- explain what a state is +- act depending on the state with a switch and change to the next state +- tell states apart in Java with names and `.equals` +::: + +## What is a state? + +A traffic light is always in exactly one **state**: red, green or yellow. In each state it knows two things: what do I show? And what comes next? + +Our robo traffic light has three states. Each gets a number: + +| State | LEDs | next | +|---|---|---| +| 0 | red | 1 | +| 1 | green | 2 | +| 2 | yellow | 0 | + +You store the current state in a variable: `int state = 0`. A variable like this is called a **state variable**. A program that jumps from state to state like this is called a **state machine**. + +> A real traffic light in Germany has four states: red, red-yellow, green, yellow. Our robo traffic light leaves out red-yellow. + +::: angeberwissen +A robot vacuum is a state machine too: vacuuming, avoiding, driving back to the charging station. I only have two states: eating and sleeping. +::: + +## The robo traffic light in the structure chart + +The switch fits perfectly: there is one case for each state. Each case has two boxes: what do I do? And which state comes next? + +::: übung vb-ampel-zustand +titel: Robo traffic light +auftrag: Build a structure chart: create `int state = 0`. A for loop runs six times. Inside it is a switch on `state`. Case 0: LEDs red, `state = 1`. Case 1: LEDs green, `state = 2`. Otherwise: LEDs yellow, `state = 0`. After the switch the mBot2 waits one second. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, fallauswahl +tipp: You will find the switch among the Elements. Write `state` into it. The cases are called 0, 1 and default. +tipp: The colours are `mbot.setLed(255, 0, 0)` for red, `mbot.setLed(0, 255, 0)` for green and `mbot.setLed(255, 200, 0)` for yellow. Below the switch, still inside the loop, is `mbot.pause(1000)`. +lösung: vb-ampel-zustand-loesung.visustruct +::: + +> 📘 **More without the robot:** VisuStruct has the lesson ["Switch"](?visustruct&lektion=10-fallauswahl). It opens in a new window. + +## Now in Java: states with names + +Numbers are easy to forget. What was state 2 again? Names are easier to read. Then the state is a text: + +```java +String state = "red"; +... +if (state.equals("red")) { + mbot.setLed(255, 0, 0); + state = "green"; +} else if (state.equals("green")) { + ... +``` + +In Java you compare texts with `.equals("…")`, not with `==`. + +::: übung vb-java-ampel-text +titel: Traffic light with names +code: java +auftrag: Write the robo traffic light in Java with `String state = "red";`. Use `if` and `else if` to check which state the light is in: red, then green, then yellow, then red again. The loop runs six times, with a 1 second pause after each pass. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, verzweigung +tipp: Inside the loop: `if (state.equals("red")) { … } else if (state.equals("green")) { … } else { … }` and then `mbot.pause(1000);`. +tipp: In the red case are `mbot.setLed(255, 0, 0);` and `state = "green";`. Green switches to `"yellow"`, yellow back to `"red"`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +::: übung vb-fehler-21-zustaende +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Traffic light with names", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-21-zustaende-start.visustruct +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +tipp: A text belongs in quotation marks. Without them Java looks for a variable with that name. +tipp: It should be `state = "green"`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +## States while driving + +The mBot2 can also drive with states. In the state **drive** it drives forward. When it sees a wall, it changes to the state **turn**. There it turns once and changes back to **drive**. + +::: diagramm vb-l21z-ausweichen.visustruct +Driving and avoiding with two states. Open the diagram in the editor and try it out in a world. +::: + +## Game: which state comes now? + +::: spiel frage +titel: Game: which state comes now? +intro: The robo traffic light switches: 0 red → 1 green → 2 yellow → 0 red. Which state comes next? Five rounds. +frage: Which state comes next? +antworten: 0 | 1 | 2 + +runde: +frage: The light is in state **0** (red) right now. +richtig: 1 +> After red comes green. + +runde: +frage: The light is in state **2** (yellow) right now. +richtig: 0 +> After yellow it starts all over again. + +runde: +frage: The light is in state **1** (green) right now. +richtig: 2 +> After green comes yellow. + +runde: +frage: The light starts in state 0 and switches on **twice**. +richtig: 2 +> 0 → 1 → 2. + +runde: +frage: The light starts in state 0 and switches on **three times**. +richtig: 0 +> 0 → 1 → 2 → 0. After three steps it is back at the start. +::: + +::: quiz +? What does a state variable store? +→ What is a state? +- [ ] How often the loop has run +- [x] What the program is doing right now, for example red or green +- [ ] The biggest reading +? What is in each case of the switch? +→ The robo traffic light in the structure chart +- [x] What to do and which state comes next +- [ ] Only a pause +- [ ] A new loop +? How do you check in Java whether `state` contains the text `"red"`? +→ Now in Java: states with names +- [ ] `state == red` +- [x] `state.equals("red")` +- [ ] `state = "red"` +> You compare texts with `.equals`. A single `=` would assign `"red"`. +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can explain what a state is. → What is a state? +- I can act depending on the state with a switch and change to the next state. → The robo traffic light in the structure chart +- I can tell states apart in Java with names and `.equals`. → Now in Java: states with names +::: diff --git a/web/lessons/welten/platz-1.txt b/web/lessons/welten/platz-1.txt new file mode 100644 index 00000000..bc337091 --- /dev/null +++ b/web/lessons/welten/platz-1.txt @@ -0,0 +1,8 @@ +// Wo ist am meisten Platz? Rechts ist es am weitesten. +........... +.....#..... +........... +........... +.#...^....# +........... +.....#..... diff --git a/web/lessons/welten/platz-2.txt b/web/lessons/welten/platz-2.txt new file mode 100644 index 00000000..588885aa --- /dev/null +++ b/web/lessons/welten/platz-2.txt @@ -0,0 +1,11 @@ +// Wo ist am meisten Platz? Vorn ist es am weitesten. +.....#..... +........... +........... +........... +........... +........... +....#^.#... +........... +........... +.....#..... diff --git a/web/package-lock.json b/web/package-lock.json index 86fa3984..57bd4bb4 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "visustruct-web", - "version": "0.14.32", + "version": "0.14.33", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "visustruct-web", - "version": "0.14.31", + "version": "0.14.33", "dependencies": { "@codemirror/autocomplete": "^6.20.4", "@codemirror/commands": "^6.11.1", diff --git a/web/package.json b/web/package.json index 4a487065..250a187e 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "visustruct-web", "private": true, - "version": "0.14.32", + "version": "0.14.33", "type": "module", "scripts": { "dev": "vite", diff --git a/web/test/visubotLessons.test.ts b/web/test/visubotLessons.test.ts index 464c6227..fa6e30ff 100644 --- a/web/test/visubotLessons.test.ts +++ b/web/test/visubotLessons.test.ts @@ -30,7 +30,7 @@ describe.each(['de', 'en'] as const)('VisuBot-Lektionen (%s)', (lang) => { afterAll(() => useVisuBotContent('off')) it('zeigt nur die Roboter-Lektionen und -Aufgaben, lückenlos nummeriert, in Teilen', () => { - expect(lessons.length).toBeGreaterThanOrEqual(27) + expect(lessons.length).toBeGreaterThanOrEqual(33) expect(lessons.every((l) => l.robot)).toBe(true) lessons.forEach((l, i) => { expect(l.number, l.id).toBe(i + 1) @@ -46,6 +46,13 @@ describe.each(['de', 'en'] as const)('VisuBot-Lektionen (%s)', (lang) => { expect(at('03-zeile-fuer-zeile-testen')).toBe(at('03-variablen-und-ausgabe') + 1) expect(at('05-erst-fahren-dann-pruefen')).toBe(at('05-bis-zur-wand') + 1) expect(at('10-unterbrechen-mit-break')).toBe(at('10-tasten-joystick') + 1) + // Grundlagen kleinschrittig: Zählen, Konstanten, else if, Maximum, Merker, Zustände + expect(at('05-zaehlen-und-summieren')).toBe(at('05-erst-fahren-dann-pruefen') + 1) + expect(at('06-konstanten-final')).toBe(at('06-abstand') + 1) + expect(at('06-nah-mittel-weit')).toBe(at('06-konstanten-final') + 1) + expect(at('08-groesster-wert')).toBe(at('08-farben') + 1) + expect(at('11-merker-boolean')).toBe(at('11-licht') + 1) + expect(at('21-zustaende')).toBe(at('21-stoppuhr-akku') + 1) expect(tasks.length).toBeGreaterThanOrEqual(16) expect(tasks.every((t) => t.robot)).toBe(true) for (const t of tasks) if (t.after !== undefined) expect(lessons.some((l) => l.number === t.after), t.id).toBe(true) @@ -65,10 +72,10 @@ describe.each(['de', 'en'] as const)('VisuBot-Lektionen (%s)', (lang) => { const tour = lessons.find((l) => l.id === '01-der-mbot2')! const word = { de: 'Lektion', en: 'Lesson' }[lang] expect(JSON.stringify(tour.steps).toLowerCase()).toContain(`${word} ${quadrat.number}`.toLowerCase()) - // eingeschobene Lektionen verschieben die Nummern: Motoren (Datei 20) ist Lektion 25 + // eingeschobene Lektionen verschieben die Nummern: Motoren (Datei 20) ist Lektion 30 const motoren = lessons.find((l) => l.id === '20-motoren')! const sensoren = lessons.find((l) => l.id === '04-sensoren')! - expect(motoren.number).toBe(25) + expect(motoren.number).toBe(30) expect(JSON.stringify(sensoren.steps).toLowerCase()).toContain(`${word} ${motoren.number}`.toLowerCase()) }) @@ -156,7 +163,7 @@ describe.each(['de', 'en'] as const)('VisuStruct ohne Roboter, VisuBot nur mit R it('VisuBot zeigt nur Roboter-Lektionen und -Aufgaben, Nachschlagen mit den mBot2-Kategorien', () => { useVisuBotContent('on') - expect(lessons.filter((l) => l.robot).length).toBeGreaterThanOrEqual(27) + expect(lessons.filter((l) => l.robot).length).toBeGreaterThanOrEqual(33) expect(lessons.filter((l) => !l.robot)).toEqual([]) expect(tasks.map((t) => t.id)).toEqual(expect.arrayContaining(robotTasks)) expect(tasks.filter((t) => !t.robot)).toEqual([]) diff --git a/website/app/assets/flowApp-CSj8R5qO.js b/website/app/assets/flowApp-CG6s5eaK.js similarity index 99% rename from website/app/assets/flowApp-CSj8R5qO.js rename to website/app/assets/flowApp-CG6s5eaK.js index a3deac4e..fbcad166 100644 --- a/website/app/assets/flowApp-CSj8R5qO.js +++ b/website/app/assets/flowApp-CG6s5eaK.js @@ -1,4 +1,4 @@ -var dt=Object.defineProperty;var lt=(i,t,e)=>t in i?dt(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var y=(i,t,e)=>lt(i,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,o as ut,f as ft,q as G,u as pt,v as gt,x as wt,y as vt,z as mt,l as xt,n as yt}from"./index-Bqz7Z8YJ.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,bt=170;function _t(i,t,e){const n=[];for(const s of i.split(` +var dt=Object.defineProperty;var lt=(i,t,e)=>t in i?dt(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var y=(i,t,e)=>lt(i,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,o as ut,f as ft,q as G,u as pt,v as gt,x as wt,y as vt,z as mt,l as xt,n as yt}from"./index-CnxP9nEG.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,bt=170;function _t(i,t,e){const n=[];for(const s of i.split(` `)){let o="";for(const r of s.split(/\s+/).filter(Boolean)){const a=o?`${o} ${r}`:r;o&&e(a)>t?(n.push(o),o=r):o=a}n.push(o)}return n.length?n:[""]}const U=i=>Math.round(i/m)*m;function C(i,t){const e=_t(i.text,bt,t),n=Math.max(0,...e.map(t)),s=e.length*H;let o,r;if(i.shape==="verzweigung")o=Math.max(140,n*1.7+30),r=Math.max(80,s*1.8+24);else{const a=i.shape==="ein"?44:i.shape==="unterprogramm"?40:i.shape==="anweisung"?24:36;o=Math.max(i.shape==="start"||i.shape==="ende"?100:120,n+a),r=Math.max(40,s+18)}return{x:i.x,y:i.y,w:Math.ceil(o/m)*m,h:Math.ceil(r/m)*m,lines:e}}function V(i){return i==="ende"?[]:i==="verzweigung"?["ja","nein"]:["out"]}const P=i=>i!=="start";function j(i,t,e){var s;if(e==="out")return"bottom";const n=((s=i.yesRight)==null?void 0:s.includes(t.id))??!1;return e==="ja"===n?"right":"bottom"}function F(i,t){return t==="bottom"?[i.x,i.y+i.h/2]:[i.x+i.w/2,i.y]}const $t=i=>[i.x,i.y-i.h/2];function Lt(i,t,e,n=0){const[s,o]=F(i,t),[r,a]=$t(e),d=m,u=Math.max(i.x+i.w/2,e.x+e.w/2)+d*(1.5+n);if(t==="bottom"){if(a>=o+d){if(s===r)return[[s,o],[r,a]];const l=o+d;return[[s,o],[s,l],[r,l],[r,a]]}return[[s,o],[s,o+d],[u,o+d],[u,a-d],[r,a-d],[r,a]]}const p=e.x-e.w/2;if(p>=s+d&&Math.abs(e.y-o)=o+d){if(r>=s+d)return[[s,o],[r,o],[r,a]];const l=s+d;return[[s,o],[l,o],[l,a-d],[r,a-d],[r,a]]}const f=Math.max(s+d,u);return[[s,o],[f,o],[f,a-d],[r,a-d],[r,a]]}function nt(i=""){return{title:i,nodes:[],edges:[]}}function it(i,t){const e=new Set([...i.nodes.map(s=>s.id),...i.edges.map(s=>s.id)]);let n=1;for(;e.has(`${t}${n}`);)n++;return`${t}${n}`}function q(i,t,e,n,s){const o=it(i,"n");return{doc:{...i,nodes:[...i.nodes,{id:o,shape:t,x:U(e),y:U(n),text:s}]},id:o}}function J(i,t,e,n){return{...i,nodes:i.nodes.map(s=>s.id===t?{...s,x:Math.max(m*4,U(e)),y:Math.max(m*2,U(n))}:s)}}function Et(i,t,e){return{...i,nodes:i.nodes.map(n=>n.id===t?{...n,text:e}:n)}}function _(i,t,e,n){const s=i.nodes.find(a=>a.id===t),o=i.nodes.find(a=>a.id===n);if(!s||!o||t===n||!V(s.shape).includes(e)||!P(o.shape))return i;const r=i.edges.filter(a=>!(a.from===t&&a.port===e));return{...i,edges:[...r,{id:it(i,"e"),from:t,port:e,to:n}]}}function kt(i,t){return V(t.shape).find(e=>!i.edges.some(n=>n.from===t.id&&n.port===e))}function St(i,t){var e;return{...i,nodes:i.nodes.filter(n=>n.id!==t),edges:i.edges.filter(n=>n.from!==t&&n.to!==t),yesRight:(e=i.yesRight)==null?void 0:e.filter(n=>n!==t)}}function Mt(i,t){return{...i,edges:i.edges.filter(e=>e.id!==t)}}function ot(i,t){const e=new Set(i.yesRight??[]);return e.has(t)?e.delete(t):e.add(t),{...i,yesRight:[...e]}}function b(i){return JSON.stringify({format:"visuflow",version:1,...i},null,2)}function W(i){let t;try{t=JSON.parse(i)}catch{return}if(!t||typeof t!="object")return;const e=t;if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return;const n=[];for(const o of e.nodes)!o||typeof o.id!="string"||!et.includes(o.shape)||!Number.isFinite(o.x)||!Number.isFinite(o.y)||n.some(r=>r.id===o.id)||n.push({id:o.id,shape:o.shape,x:o.x,y:o.y,text:typeof o.text=="string"?o.text:""});let s={title:typeof e.title=="string"?e.title:"",nodes:n,edges:[]};for(const o of e.edges)!o||typeof o.from!="string"||typeof o.to!="string"||typeof o.port!="string"||(s=_(s,o.from,o.port,o.to));return Array.isArray(e.yesRight)&&(s.yesRight=e.yesRight.filter(o=>typeof o=="string"&&n.some(r=>r.id===o))),s}const z="http://www.w3.org/2000/svg",X="visuflow.doc",At=100,Y=14,rt=`${Y}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,B="#1c1c1e",w=i=>i.replace(/[&<>"]/g,t=>({"&":"&","<":"<",">":">",'"':"""})[t]);function It(i){try{return localStorage.getItem(i)}catch{return null}}function Z(i,t){try{localStorage.setItem(i,t)}catch{}}function Ct(){return xt("visustruct",yt())}function D(i,t,e){const n=URL.createObjectURL(new Blob([t],{type:e})),s=document.createElement("a");s.href=n,s.download=i,s.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function v(i,t={}){const e=document.createElementNS(z,i);for(const[n,s]of Object.entries(t))e.setAttribute(n,String(s));return e}let N;function R(i){return N===void 0&&(N=document.createElement("canvas").getContext("2d")),N?(N.font=rt,N.measureText(i).width):i.length*Y*.55}const Rt=i=>h(`web_visuflow_shape_${i}`),T=i=>h(`web_visuflow_text_${i}`);function at(i,t){const e=t.x-t.w/2,n=t.x+t.w/2,s=t.y-t.h/2,o=t.y+t.h/2;return i==="verzweigung"?v("path",{d:`M${t.x} ${s} L${n} ${t.y} L${t.x} ${o} L${e} ${t.y} Z`}):i==="ein"?v("path",{d:`M${e+14} ${s} L${n} ${s} L${n-14} ${o} L${e} ${o} Z`}):i==="unterprogramm"?v("path",{d:`M${e} ${s} H${n} V${o} H${e} Z M${e+10} ${s} V${o} M${n-10} ${s} V${o}`}):v("rect",{x:e,y:s,width:t.w,height:t.h,rx:i==="anweisung"?2:t.h/2})}function Bt(i){const t=v("text",{"text-anchor":"middle","font-size":Y,fill:B});return i.lines.forEach((e,n)=>{const s=v("tspan",{x:i.x,y:i.y+5+(n-(i.lines.length-1)/2)*H});s.textContent=e,t.append(s)}),t}function Q(i){const t=v("svg",{viewBox:"0 0 64 36",width:64,height:36,"aria-hidden":"true"}),e=at(i,{x:32,y:18,w:i==="verzweigung"?54:56,h:i==="verzweigung"?32:26});return e.setAttribute("fill",st[i]),e.setAttribute("stroke",B),e.setAttribute("stroke-width","1.5"),t.append(e),t.outerHTML}function tt(){let i=nt(h("web_visuflow_example_title"));const t=[],e=(p,f,l,c)=>{const g=q(i,p,f,l,c);i=g.doc,t.push(g.id)};e("start",240,60,T("start")),e("anweisung",240,160,h("web_visuflow_example_water")),e("anweisung",240,260,h("web_visuflow_example_bag")),e("verzweigung",240,380,h("web_visuflow_example_hot")),e("anweisung",480,380,h("web_visuflow_example_wait")),e("anweisung",240,500,h("web_visuflow_example_drink")),e("ende",240,600,T("ende"));const[n,s,o,r,a,d,u]=t;return i=_(i,n,"out",s),i=_(i,s,"out",o),i=_(i,o,"out",r),i=ot(i,r),i=_(i,r,"ja",a),i=_(i,a,"out",r),i=_(i,r,"nein",d),i=_(i,d,"out",u),i}function Tt(){return q(nt(),"start",240,60,T("start")).doc}class Dt{constructor(t){y(this,"shell");y(this,"svg");y(this,"scroller");y(this,"status");y(this,"titleInput");y(this,"doc");y(this,"selection");y(this,"history",[]);y(this,"future",[]);y(this,"editor");y(this,"dragLine");document.documentElement.classList.add("visuflow-theme"),history.replaceState(history.state,"",`${location.pathname}?visuflow${location.hash}`),this.doc=W(It(X)??"")??tt(),this.shell=document.createElement("div"),this.shell.className="shell visuflow",t.replaceWith(this.shell),this.build(),this.render(),window.addEventListener("keydown",e=>this.onKey(e))}build(){const t=(l,c,g,x=c)=>``,e=et.map(l=>``).join("");this.shell.innerHTML=`
VisuFlow ${w(h("web_visuflow_subtitle"))} @@ -28,7 +28,7 @@ var dt=Object.defineProperty;var lt=(i,t,e)=>t in i?dt(i,t,{enumerable:!0,config ${ht()}
- ${w(h("web_about_version_fmt").replace("%@","0.14.32"))} + ${w(h("web_about_version_fmt").replace("%@","0.14.33"))}
diff --git a/website/app/assets/index-Bqz7Z8YJ.js b/website/app/assets/index-CnxP9nEG.js similarity index 92% rename from website/app/assets/index-Bqz7Z8YJ.js rename to website/app/assets/index-CnxP9nEG.js index 4398e3ea..a3cf37ed 100644 --- a/website/app/assets/index-Bqz7Z8YJ.js +++ b/website/app/assets/index-CnxP9nEG.js @@ -1,4 +1,4 @@ -var Z2=Object.defineProperty;var L2=(i,e,t)=>e in i?Z2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>L2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const W2="modulepreload",E2=function(i,e){return new URL(i,e).href},cu={},K=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=E2(m,n),m in cu)return;cu[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":W2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var T=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(T||{});function N2(i){return i===3||i===4||i===5||i===6}function F2(i){return i===1||i===2}function Ce(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function J2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case T.forSchleife:return e.length<=1?e:[G2(e)];case T.verzweigung:return aa("if",e);case T.whileSchleife:return aa("while",e);case T.doUntilSchleife:return aa("while",R2(e));case T.fallauswahl:return aa("switch",e);default:return e}}function R2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function du(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function aa(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function G2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const ah={[T.anweisung]:"Anweisung",[T.verzweigung]:"Bedingung",[T.fallauswahl]:"Fallauswahl",[T.forSchleife]:"for 0 < i < anzahl",[T.whileSchleife]:"while …",[T.doUntilSchleife]:"while …",[T.endlosschleife]:"endless",[T.aussprung]:"break",[T.aufruf]:"Aufruf()",[T.leerElement]:"ø"};function H2(i){Object.assign(ah,i)}function ql(i){return J2(i)??[ah[i.type]]}const V2="visucode.de";function sh(i=location.hostname){const e=/^(visustruct|visubot|visuobject)\.visucode\.de$/.exec(i.toLowerCase());return e?e[1]:void 0}function Q2(i){return i==="pt-PT"?"pt":i==="de"?"de":"en"}function q2(i,e,t,n=location){const a=Q2(e),s=t?`#${t}`:"";return sh(n.hostname)===i&&/\/app\/(index\.html)?$/.test(n.pathname)?`../${a}/index.html${s}`:`https://${i}.${V2}/${a}/${s}`}class We extends Error{}const xn=i=>structuredClone(i);function nn(){return Ce(T.anweisung,{textLines:["ø"]})}function U2(){return{caption:"",elements:[nn()]}}function Ul(i){if(i.type===T.leerElement)return!0;if(i.type===T.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function kn(i,e){const t=vt(i,e);return t!==void 0&&Ul(t)}function qi(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return qi(rh(i[t],a),s)}function rh(i,e){if(N2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if(F2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Mt(i,e){const{list:t,index:n}=qi(i.elements,e);return t[n]}function vt(i,e){try{return Mt(i,e)}catch{return}}function Mn(i,e,t){const n=xn(i),{list:a,index:s}=qi(n.elements,e);return a[s]=xn(t),n}function q1(i,e,t){const n=xn(Mt(i,e));return n.textLines=t.length===0?[""]:t,Mn(i,e,n)}function kr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!kn(i,e):vt(i,e)!==void 0}function ji(i,e){const t=xn(i),{list:n,index:a}=qi(t.elements,e);if(e.length===1&&n.length===1){if(Ul(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=nn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(nn()),t}function di(i,e,t,n){const a=xn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=qi(a.elements,r);s=rh(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,xn(n)),a}function oh(i,e,t){if(t.length===0)throw new We("Invalid element path.");return di(i,t.slice(0,-1),t[t.length-1],e)}function wo(i,e,t){if(t.length===0)throw new We("Invalid element path.");return di(i,t.slice(0,-1),t[t.length-1]+1,e)}function Yl(i,e){return i.lengthe[n]===t)}function $l(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Xl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function Y2(i,e,t){if(Xl(e,t))return i;if(Yl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ji(i,e);return oh(a,n,$l(t,e))}function $2(i,e,t){if(Xl(e,t))return i;if(Yl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ji(i,e);return wo(a,n,$l(t,e))}function X2(i,e,t){if(!kn(i,t))throw new We("Invalid element path.");if(Xl(e,t))return i;if(Yl(e,t))throw new We("Invalid element path.");const n=Mt(i,e),a=ji(i,e);return Mn(a,$l(t,e),n)}function K2(i,e){const t=xn(Mt(i,e)),n=t.cases;if(t.type!==T.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[nn()]}),{doc:Mn(i,e,t),path:[...e,s,0]}}function e3(i,e,t){const n=xn(Mt(i,e)),a=n.cases;if(n.type!==T.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Mn(i,e,n),path:[...e,s,0]}}function t3(i,e,t,n){const a=xn(Mt(i,e)),s=a.cases;if(a.type!==T.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,Mn(i,e,a)}function n3(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=vt(e,a))==null?void 0:t.type)===T.fallauswahl)return a}}function i3(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function Sr(i,e){if(e.elements.length!==0)return!i||!vt(e,i)?[0]:i}const lh=i=>i!==void 0&&/\s/.test(i);function ls(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function a3(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function hu(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function s3(i,e){const t=a3(e);switch(i){case"statement":return t;case"input":return hu("input:",t);case"output":return hu("output:",t)}}const Ha=i=>lh(i[0])?i.slice(1):i;function r3(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?Ha(e.slice(6)):t.startsWith("output:")?Ha(e.slice(7)):t.startsWith("print:")?Ha(e.slice(6)):i}function gu(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||lh(n[0])||n[0]==="("))return e;const a=Ha(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function pu(i,e){if(i==="input:"||i==="output:")return r3(e);const t=gu(i,e);if(i==="while"&&t===e){const n=gu("until",e);if(n!==e)return n}return t}function o3(i,e){return e===""?`${i} `:`${i} ${e}`}function uh(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function fu(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function l3(i){let e=uh(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const er='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function u3(i,e){return`${e==="bold"?700:500} ${i}px ${er}`}const mh=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function m3(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",er),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let Tr;function ch(){return Tr===void 0&&(Tr=m3()??null),Tr??void 0}function dh(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function xu(i,e){const t=`${i}|${e}`;let n=bu.get(t);if(!n){const a=ch();if(n={ascent:i*.95,descent:i*.24},a){dh(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}bu.set(t,n)}return n}const bu=new Map;function c3(){const i=ch();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(dh(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return mh;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=u3(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const hh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function d3(i){return{...hh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const sa=i=>i===T.forSchleife||i===T.whileSchleife||i===T.doUntilSchleife||i===T.endlosschleife,ri=i=>i===T.fallauswahl||i===T.verzweigung;function ra(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function it(i){return{...i,frame:{...i.frame}}}class gh{constructor(e=hh,t=mh){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=it(e);if(n.caseColumnFrames.length===0)return n;const a=n.caseColumnFrames.reduce((l,u)=>l+u.width,0);if(!(a>0))return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=it(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=it(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=it(e);return n.frame.width>0?ri(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,sa(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=it(e);return ri(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):sa(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=it(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===T.anweisung||s===T.leerElement||s===T.aufruf||s===T.aussprung||sa(s);let a;switch(t.element.type){case T.forSchleife:case T.whileSchleife:case T.endlosschleife:{const s=t.element.type===T.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case T.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=it(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===T.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case T.fallauswahl:a=40;break;case T.verzweigung:a=20;break;case T.forSchleife:case T.whileSchleife:case T.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===T.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return ri(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===T.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===T.leerElement?76:e.type===T.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(ri(e.type))return this.layoutMultiway(e,t,n,a);if(sa(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ra(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,v)=>b+v.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===T.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),z=Math.max(this.minWidth(e),r(w)+x),I=s(w)+v+b,k=Math.max(0,z-x),S=ra(a,e,{x:t,y:n,width:z,height:I},v);return S.topBandHeight=b,S.loopBodyLeadingInset=x,S.children=w.map(j=>{const M=it(j);return M.frame.x=t+x,M.frame.width=k,this.stretchDescendantsWidths(M,k)}),S}const l=20,u=this.headerHeight(e),m=e.type===T.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ra(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=it(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const v=t+c,w=this.layoutList(x.elements,v,n+s,[...a,b]),z=Math.max(0,...w.map(S=>S.frame.width));let I;e.type===T.verzweigung&&o===2?I=Math.max(z,(b===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const k=w.reduce((S,j)=>S+j.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:I,height:k}),m.push(w.map(S=>{const j=it(S);return j.frame.x=v,j.frame.width=I,this.stretchDescendantsWidths(j,I)})),c+=I}),e.type===T.verzweigung&&o===2&&u.length===2&&!r.some(x=>zo(x.elements))){const x=Math.max(u[0].width,u[1].width),b=t,v=t+x,w=v-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:v,width:x},c=x*2,m[0]=m[0].map(z=>{const I=it(z);return I.frame.x=b,I.frame.width=x,this.stretchDescendantsWidths(I,x)}),m[1]=m[1].map(z=>{const I=Io(z,w);return I.frame.width=x,this.stretchDescendantsWidths(I,x)})}if(m.length>0){const x=h3(m,n+s);m=x.columns.map(b=>b.map(v=>this.stretchLoopBodiesVertically(v)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const v=[],w=[];u.forEach((z,I)=>{const k=z.width*x;w.push(m[I].map(S=>{const j=it(S);return j.frame.x=b,j.frame.width=k,this.stretchDescendantsWidths(j,k)})),v.push({x:b,y:z.y,width:k,height:z.height}),b+=k}),u=v,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ra(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===T.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function zo(i){return i.some(e=>ri(e.type)||zo(e.loopBody??[])||(e.cases??[]).some(t=>zo(t.elements)))}function ph(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i),n=a=>{const s=it(a);return s.frame.y+=e,ph(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function Io(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>Io(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>Io(n,e)),t}function h3(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=it(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),v=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=ph(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const g3=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function vu(i){const e=nn;switch(i){case"anweisung":return Ce(T.anweisung);case"verzweigung":return Ce(T.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return Ce(T.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return Ce(T.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return Ce(T.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return Ce(T.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return Ce(T.endlosschleife,{loopBody:[e()]});case"aussprung":return Ce(T.aussprung);case"aufruf":return Ce(T.aufruf)}}function us(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function ko(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class yu extends Error{}function Kl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new yu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new yu("Invalid XML: root element is not .");const n={caption:zu(t,"caption")??"",elements:To(t)},a=zu(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=hi(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=hi(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function c1(i){const e=(n,a)=>a===void 0?"":` ${n}="${fh(a)}"`;let t=` +var Z2=Object.defineProperty;var L2=(i,e,t)=>e in i?Z2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>L2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const W2="modulepreload",E2=function(i,e){return new URL(i,e).href},cu={},K=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=E2(m,n),m in cu)return;cu[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":W2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var T=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(T||{});function N2(i){return i===3||i===4||i===5||i===6}function F2(i){return i===1||i===2}function Ce(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function J2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case T.forSchleife:return e.length<=1?e:[G2(e)];case T.verzweigung:return aa("if",e);case T.whileSchleife:return aa("while",e);case T.doUntilSchleife:return aa("while",R2(e));case T.fallauswahl:return aa("switch",e);default:return e}}function R2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function du(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function aa(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function G2(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const ah={[T.anweisung]:"Anweisung",[T.verzweigung]:"Bedingung",[T.fallauswahl]:"Fallauswahl",[T.forSchleife]:"for 0 < i < anzahl",[T.whileSchleife]:"while …",[T.doUntilSchleife]:"while …",[T.endlosschleife]:"endless",[T.aussprung]:"break",[T.aufruf]:"Aufruf()",[T.leerElement]:"ø"};function H2(i){Object.assign(ah,i)}function Ul(i){return J2(i)??[ah[i.type]]}const V2="visucode.de";function sh(i=location.hostname){const e=/^(visustruct|visubot|visuobject)\.visucode\.de$/.exec(i.toLowerCase());return e?e[1]:void 0}function q2(i){return i==="pt-PT"?"pt":i==="de"?"de":"en"}function U2(i,e,t,n=location){const a=q2(e),s=t?`#${t}`:"";return sh(n.hostname)===i&&/\/app\/(index\.html)?$/.test(n.pathname)?`../${a}/index.html${s}`:`https://${i}.${V2}/${a}/${s}`}class We extends Error{}const xn=i=>structuredClone(i);function nn(){return Ce(T.anweisung,{textLines:["ø"]})}function Q2(){return{caption:"",elements:[nn()]}}function Ql(i){if(i.type===T.leerElement)return!0;if(i.type===T.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function kn(i,e){const t=vt(i,e);return t!==void 0&&Ql(t)}function Ui(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return Ui(rh(i[t],a),s)}function rh(i,e){if(N2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if(F2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Dt(i,e){const{list:t,index:n}=Ui(i.elements,e);return t[n]}function vt(i,e){try{return Dt(i,e)}catch{return}}function Dn(i,e,t){const n=xn(i),{list:a,index:s}=Ui(n.elements,e);return a[s]=xn(t),n}function U1(i,e,t){const n=xn(Dt(i,e));return n.textLines=t.length===0?[""]:t,Dn(i,e,n)}function kr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!kn(i,e):vt(i,e)!==void 0}function ji(i,e){const t=xn(i),{list:n,index:a}=Ui(t.elements,e);if(e.length===1&&n.length===1){if(Ql(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=nn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(nn()),t}function di(i,e,t,n){const a=xn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=Ui(a.elements,r);s=rh(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,xn(n)),a}function oh(i,e,t){if(t.length===0)throw new We("Invalid element path.");return di(i,t.slice(0,-1),t[t.length-1],e)}function wo(i,e,t){if(t.length===0)throw new We("Invalid element path.");return di(i,t.slice(0,-1),t[t.length-1]+1,e)}function Yl(i,e){return i.lengthe[n]===t)}function $l(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const Xl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function Y2(i,e,t){if(Xl(e,t))return i;if(Yl(e,t))throw new We("Invalid element path.");const n=Dt(i,e),a=ji(i,e);return oh(a,n,$l(t,e))}function $2(i,e,t){if(Xl(e,t))return i;if(Yl(e,t))throw new We("Invalid element path.");const n=Dt(i,e),a=ji(i,e);return wo(a,n,$l(t,e))}function X2(i,e,t){if(!kn(i,t))throw new We("Invalid element path.");if(Xl(e,t))return i;if(Yl(e,t))throw new We("Invalid element path.");const n=Dt(i,e),a=ji(i,e);return Dn(a,$l(t,e),n)}function K2(i,e){const t=xn(Dt(i,e)),n=t.cases;if(t.type!==T.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[nn()]}),{doc:Dn(i,e,t),path:[...e,s,0]}}function e3(i,e,t){const n=xn(Dt(i,e)),a=n.cases;if(n.type!==T.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Dn(i,e,n),path:[...e,s,0]}}function t3(i,e,t,n){const a=xn(Dt(i,e)),s=a.cases;if(a.type!==T.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,Dn(i,e,a)}function n3(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=vt(e,a))==null?void 0:t.type)===T.fallauswahl)return a}}function i3(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function Sr(i,e){if(e.elements.length!==0)return!i||!vt(e,i)?[0]:i}const lh=i=>i!==void 0&&/\s/.test(i);function ls(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function a3(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function hu(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function s3(i,e){const t=a3(e);switch(i){case"statement":return t;case"input":return hu("input:",t);case"output":return hu("output:",t)}}const Ha=i=>lh(i[0])?i.slice(1):i;function r3(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?Ha(e.slice(6)):t.startsWith("output:")?Ha(e.slice(7)):t.startsWith("print:")?Ha(e.slice(6)):i}function gu(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||lh(n[0])||n[0]==="("))return e;const a=Ha(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function pu(i,e){if(i==="input:"||i==="output:")return r3(e);const t=gu(i,e);if(i==="while"&&t===e){const n=gu("until",e);if(n!==e)return n}return t}function o3(i,e){return e===""?`${i} `:`${i} ${e}`}function uh(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function fu(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function l3(i){let e=uh(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const er='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function u3(i,e){return`${e==="bold"?700:500} ${i}px ${er}`}const mh=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function m3(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",er),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let Tr;function ch(){return Tr===void 0&&(Tr=m3()??null),Tr??void 0}function dh(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function xu(i,e){const t=`${i}|${e}`;let n=bu.get(t);if(!n){const a=ch();if(n={ascent:i*.95,descent:i*.24},a){dh(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}bu.set(t,n)}return n}const bu=new Map;function c3(){const i=ch();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(dh(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return mh;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=u3(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const hh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function d3(i){return{...hh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const sa=i=>i===T.forSchleife||i===T.whileSchleife||i===T.doUntilSchleife||i===T.endlosschleife,ri=i=>i===T.fallauswahl||i===T.verzweigung;function ra(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function it(i){return{...i,frame:{...i.frame}}}class gh{constructor(e=hh,t=mh){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=it(e);if(n.caseColumnFrames.length===0)return n;const a=n.caseColumnFrames.reduce((l,u)=>l+u.width,0);if(!(a>0))return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=it(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=it(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=it(e);return n.frame.width>0?ri(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,sa(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=it(e);return ri(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):sa(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=it(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===T.anweisung||s===T.leerElement||s===T.aufruf||s===T.aussprung||sa(s);let a;switch(t.element.type){case T.forSchleife:case T.whileSchleife:case T.endlosschleife:{const s=t.element.type===T.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case T.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=it(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===T.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case T.fallauswahl:a=40;break;case T.verzweigung:a=20;break;case T.forSchleife:case T.whileSchleife:case T.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===T.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return ri(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===T.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===T.leerElement?76:e.type===T.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(ri(e.type))return this.layoutMultiway(e,t,n,a);if(sa(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ra(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,v)=>b+v.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===T.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),z=Math.max(this.minWidth(e),r(w)+x),I=s(w)+v+b,k=Math.max(0,z-x),S=ra(a,e,{x:t,y:n,width:z,height:I},v);return S.topBandHeight=b,S.loopBodyLeadingInset=x,S.children=w.map(j=>{const D=it(j);return D.frame.x=t+x,D.frame.width=k,this.stretchDescendantsWidths(D,k)}),S}const l=20,u=this.headerHeight(e),m=e.type===T.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ra(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=it(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((x,b)=>{const v=t+c,w=this.layoutList(x.elements,v,n+s,[...a,b]),z=Math.max(0,...w.map(S=>S.frame.width));let I;e.type===T.verzweigung&&o===2?I=Math.max(z,(b===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const k=w.reduce((S,j)=>S+j.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:I,height:k}),m.push(w.map(S=>{const j=it(S);return j.frame.x=v,j.frame.width=I,this.stretchDescendantsWidths(j,I)})),c+=I}),e.type===T.verzweigung&&o===2&&u.length===2&&!r.some(x=>zo(x.elements))){const x=Math.max(u[0].width,u[1].width),b=t,v=t+x,w=v-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:v,width:x},c=x*2,m[0]=m[0].map(z=>{const I=it(z);return I.frame.x=b,I.frame.width=x,this.stretchDescendantsWidths(I,x)}),m[1]=m[1].map(z=>{const I=Io(z,w);return I.frame.width=x,this.stretchDescendantsWidths(I,x)})}if(m.length>0){const x=h3(m,n+s);m=x.columns.map(b=>b.map(v=>this.stretchLoopBodiesVertically(v)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const v=[],w=[];u.forEach((z,I)=>{const k=z.width*x;w.push(m[I].map(S=>{const j=it(S);return j.frame.x=b,j.frame.width=k,this.stretchDescendantsWidths(j,k)})),v.push({x:b,y:z.y,width:k,height:z.height}),b+=k}),u=v,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ra(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===T.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function zo(i){return i.some(e=>ri(e.type)||zo(e.loopBody??[])||(e.cases??[]).some(t=>zo(t.elements)))}function ph(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i),n=a=>{const s=it(a);return s.frame.y+=e,ph(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function Io(i,e){if(Math.abs(e)<=1e-4)return i;const t=it(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>Io(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>Io(n,e)),t}function h3(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=it(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),v=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=ph(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const g3=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function vu(i){const e=nn;switch(i){case"anweisung":return Ce(T.anweisung);case"verzweigung":return Ce(T.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return Ce(T.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return Ce(T.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return Ce(T.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return Ce(T.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return Ce(T.endlosschleife,{loopBody:[e()]});case"aussprung":return Ce(T.aussprung);case"aufruf":return Ce(T.aufruf)}}function us(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function ko(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class yu extends Error{}function Kl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new yu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new yu("Invalid XML: root element is not .");const n={caption:zu(t,"caption")??"",elements:To(t)},a=zu(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=hi(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=hi(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function c1(i){const e=(n,a)=>a===void 0?"":` ${n}="${fh(a)}"`;let t=` `;t+=" `;for(const n of i.elements)t+=So(n," ");return t+=` `,t}function So(i,e){let t=`${e} @@ -8,18 +8,18 @@ var Z2=Object.defineProperty;var L2=(i,e,t)=>e in i?Z2(i,e,{enumerable:!0,config `}if(i.cases)for(const n of i.cases){t+=`${e} `;for(const a of n.elements)t+=So(a,e+" ");t+=`${e} `}return t+=`${e} -`,t}function fh(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function p3(i){return i.replace(/&/g,"&").replace(//g,">")}function wu(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Va(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function To(i){const e=[];for(const t of Va(i,"strelem")){const n=f3(t);n&&e.push(n)}return e}function f3(i){const e=hi(i,"typ");if(e===void 0||T[e]===void 0)return;const t={type:e,zoomX:hi(i,"zx")??0,zoomY:hi(i,"zy")??0,textLines:Va(i,"text").map(o=>ko((o.textContent??"").trim()))},n=Iu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=Iu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Va(i,"schleifeninhalt")[0];if(s){const o=To(s);o.length>0&&(t.loopBody=o)}const r=Va(i,"fall").map(o=>({name:ko(o.getAttribute("fallname")??""),elements:To(o)}));return r.length>0&&(t.cases=r),t}function zu(i,e){const t=i.getAttribute(e);return t===null?void 0:ko(t)}function hi(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function Iu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const x3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function xh(i){switch(i){case T.forSchleife:case T.whileSchleife:case T.doUntilSchleife:case T.endlosschleife:return"loop";case T.verzweigung:case T.fallauswahl:return"if";default:return}}function Te(i,e={}){const t=document.createElementNS(x3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class bh{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Te("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":er,"font-size":this.fontSize,class:"diagram"});s.append(Te("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Te("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Te("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Te("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Te("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=du(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Te("text",{x:n,y:a+xu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=du(t);if(r){const o=Te("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Te("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=xu(this.fontSize,s?"bold":"medium"),l=Te("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===T.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var j;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===T.verzweigung||l.type===T.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&_o(e.idPath,n),g=ql(l),f=Te("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,v=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=xh(l.type)??(l.type===T.leerElement?r:"method"),I=Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const k=Ee.callSideBarInset;if(l.type===T.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===T.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const M=e.dividerX,O=this.roofMetrics(e,o,d,M),P=Math.max(g.length,1)*this.lineHeight,C=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[O.apex.x,O.apex.y],[u,o.y]]),l.type===T.fallauswahl&&this.line(f,[[o.x,O.roofBottom],[u,O.roofBottom]]);let Z;C+P<=O.maxTextBottom?Z=C:Z=Math.max(o.y+2,O.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((J,Y)=>{const ae=this.textWidth(J);let ee;if(l.type===T.verzweigung){const fe=o.x+Ee.cellTextInsetX,re=u-ae-Ee.cellTextInsetX;ee=Math.min(Math.max(M-ae/2,fe),re)}else ee=o.x+o.width/2-ae/2;this.drawKeywordLine(f,J,ee,Z+Y*this.lineHeight)})}else if(l.type!==T.doUntilSchleife)if(l.type===T.anweisung||l.type===T.aufruf||l.type===T.aussprung){const M=Ee.cellTextInsetX;let O=o.x+M,P=u-M;l.type===T.aufruf?(O=o.x+k+Ee.callTextInsetFromSideBar,P=u-k-Ee.callTextInsetFromSideBar):l.type===T.aussprung&&(O=o.x+k+M);const C=Math.max(0,P-O);let Z=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const J of g)this.drawKeywordLine(f,J,O+(C-this.textWidth(J))/2,Z),Z+=this.lineHeight}else{const M=Math.max(1,g.length)*this.lineHeight;let O=s===T.doUntilSchleife?o.y+o.height/2-M/2:o.y+Ee.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Ee.cellTextInsetX,O),O+=this.lineHeight}e.children.forEach((M,O)=>{const P=l.type===T.doUntilSchleife&&O===0?{top:!0,left:!0}:{};this.drawNode(M,t,n,P,l.type,z)});const S=Te("g");if(t.append(S),l.type===T.doUntilSchleife){const M=((j=e.children[0])==null?void 0:j.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(S,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const O=m-e.headerBandHeight;this.line(S,[[M,O],[u,O]]),this.line(S,[[M,o.y],[M,O]]);let P=O+this.metrics.doUntilFooterTopInset;for(const C of g)this.drawKeywordLine(S,C,o.x+Ee.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const M=this.roofMetrics(e,o,d,e.dividerX),O=M.apex;e.caseColumnFrames.forEach((C,Z)=>{if(Z>=e.caseColumnFrames.length-1)return;const J=C.x+C.width,Y=b3(J,o,O),ae=Number.isFinite(Y)?Math.min(Math.max(Y,o.y),m):o.y;this.line(S,[[J,m],[J,ae]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const C=l.type===T.fallauswahl?M.roofBottom-6:o.y+d-8,Z=Ee.branchLabelInsetX;if(l.type===T.verzweigung&&P.length===2){this.drawLabel(S,"true",o.x+Z,C,!0,"bottom");const J=e.caseColumnFrames[1],Y=this.measure("false",this.fontSize,"bold");this.drawLabel(S,"false",J.x+J.width-Z-Y,C,!0,"bottom")}else P.forEach((J,Y)=>{const ae=e.caseColumnFrames[Y],ee=["default","true","false"].includes(J.name.toLowerCase()),fe=this.measure(J.name,this.fontSize,ee?"bold":"medium");this.drawLabel(S,J.name,ae.x+ae.width/2-fe/2,C,ee,"bottom")})}}h&&S.append(Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function b3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function _o(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function v3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function ms(i){var e,t;return{...i,textLines:ql(i),loopBody:(e=i.loopBody)==null?void 0:e.map(ms),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(ms)}))}}const y3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],vh=["de","en","pt-PT"],yh=y3.filter(i=>vh.includes(i.code)),ku=i=>vh.includes(i),w3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>K(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>K(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>K(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>K(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>K(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>K(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>K(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),wh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>K(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),z3=Object.assign({"../i18n/ar.strings":()=>K(()=>import("./ar-B37uSeni.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>K(()=>import("./da-BOu8fAad.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>K(()=>import("./de-B--hZiad.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>K(()=>import("./el-gg2XQg4B.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>K(()=>import("./en-CyL8rJ-B.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>K(()=>import("./es-pM1vcD9J.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>K(()=>import("./fr-4jpJiELE.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>K(()=>import("./he-D0hfYxbO.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>K(()=>import("./it-DvTA5OAG.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>K(()=>import("./ja-B9gt74zl.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>K(()=>import("./ko-CsUr1hf8.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>K(()=>import("./nb-CevhvW4M.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>K(()=>import("./nl-BsXYXKpN.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>K(()=>import("./pl-DzI5OyWY.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>K(()=>import("./pt-PT-Cr31YzEm.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>K(()=>import("./ru-DicU-xti.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>K(()=>import("./sv-CCQFxpqQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>K(()=>import("./tr-BrQzU5M5.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>K(()=>import("./uk-CgoU8BhR.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>K(()=>import("./zh-Hans-C89x22CL.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>K(()=>import("./zh-Hant-wLNOkM_A.js"),[],import.meta.url).then(i=>i.default)});function Qa(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function zh(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` -`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function jo(i){const e=i==="java"?Qa(wh,"/Java.strings"):Qa(w3,`/${i}.lproj/Localizable.strings`),t=Qa(z3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of zh(await a()))n.set(s,r);return n}let Ih="en",kh=new Map,Kn=new Map;const cs="appLanguageCode",e0="visustruct.keywords";let Co=new Map,t0=!1;const I3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function k3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(cs)==="java";return i&&(localStorage.setItem(cs,"en"),localStorage.setItem(e0,"1")),i}catch{return!1}}function S3(){try{return localStorage.getItem(e0)==="1"}catch{return!1}}async function Sh(i,e=!0){if(i&&Co.size===0){Kn.size===0&&(Kn=await jo("en"));const t=Qa(wh,"/Java.strings");if(t)for(const[n,a]of zh(await t()))I3(n)&&a!==Kn.get(n)&&Co.set(n,a)}if(t0=i,e)try{localStorage.setItem(e0,i?"1":"0")}catch{}}function T3(){return t0}function _3(){if(k3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&ku(i))return i;try{const e=localStorage.getItem(cs);if(e&&ku(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=yh.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function Th(i,e=!0){if(Kn.size===0&&(Kn=await jo("en")),kh=i==="en"?Kn:await jo(i),Ih=i,e)try{localStorage.setItem(cs,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function r1(){return Ih}function p(i,...e){const t=(t0?Co.get(i):void 0)??kh.get(i)??Kn.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const ds=243,j3=244,_h=40,_r=4,C3=1;function n0(i){const e=i.length,t=ds+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([ds,t,e&255,e>>8,...i,n,j3])}function A3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return n0([_h,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function P3(i){if(i[0]!==_h||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:M3(t[1].trim())}:void 0}function O3(i){const e=[];for(;;){const t=i.indexOf(ds);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(ds+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.length/g,">")}function p3(i){return i.replace(/&/g,"&").replace(//g,">")}function wu(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Va(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function To(i){const e=[];for(const t of Va(i,"strelem")){const n=f3(t);n&&e.push(n)}return e}function f3(i){const e=hi(i,"typ");if(e===void 0||T[e]===void 0)return;const t={type:e,zoomX:hi(i,"zx")??0,zoomY:hi(i,"zy")??0,textLines:Va(i,"text").map(o=>ko((o.textContent??"").trim()))},n=Iu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=Iu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Va(i,"schleifeninhalt")[0];if(s){const o=To(s);o.length>0&&(t.loopBody=o)}const r=Va(i,"fall").map(o=>({name:ko(o.getAttribute("fallname")??""),elements:To(o)}));return r.length>0&&(t.cases=r),t}function zu(i,e){const t=i.getAttribute(e);return t===null?void 0:ko(t)}function hi(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function Iu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const x3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function xh(i){switch(i){case T.forSchleife:case T.whileSchleife:case T.doUntilSchleife:case T.endlosschleife:return"loop";case T.verzweigung:case T.fallauswahl:return"if";default:return}}function Te(i,e={}){const t=document.createElementNS(x3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class bh{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Te("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":er,"font-size":this.fontSize,class:"diagram"});s.append(Te("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Te("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Te("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Te("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Te("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=du(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Te("text",{x:n,y:a+xu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=du(t);if(r){const o=Te("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Te("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=xu(this.fontSize,s?"bold":"medium"),l=Te("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===T.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var j;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===T.verzweigung||l.type===T.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&_o(e.idPath,n),g=Ul(l),f=Te("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,v=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=xh(l.type)??(l.type===T.leerElement?r:"method"),I=Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const k=Ee.callSideBarInset;if(l.type===T.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===T.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const D=e.dividerX,O=this.roofMetrics(e,o,d,D),P=Math.max(g.length,1)*this.lineHeight,C=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[O.apex.x,O.apex.y],[u,o.y]]),l.type===T.fallauswahl&&this.line(f,[[o.x,O.roofBottom],[u,O.roofBottom]]);let Z;C+P<=O.maxTextBottom?Z=C:Z=Math.max(o.y+2,O.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((J,Y)=>{const ae=this.textWidth(J);let ee;if(l.type===T.verzweigung){const fe=o.x+Ee.cellTextInsetX,re=u-ae-Ee.cellTextInsetX;ee=Math.min(Math.max(D-ae/2,fe),re)}else ee=o.x+o.width/2-ae/2;this.drawKeywordLine(f,J,ee,Z+Y*this.lineHeight)})}else if(l.type!==T.doUntilSchleife)if(l.type===T.anweisung||l.type===T.aufruf||l.type===T.aussprung){const D=Ee.cellTextInsetX;let O=o.x+D,P=u-D;l.type===T.aufruf?(O=o.x+k+Ee.callTextInsetFromSideBar,P=u-k-Ee.callTextInsetFromSideBar):l.type===T.aussprung&&(O=o.x+k+D);const C=Math.max(0,P-O);let Z=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const J of g)this.drawKeywordLine(f,J,O+(C-this.textWidth(J))/2,Z),Z+=this.lineHeight}else{const D=Math.max(1,g.length)*this.lineHeight;let O=s===T.doUntilSchleife?o.y+o.height/2-D/2:o.y+Ee.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Ee.cellTextInsetX,O),O+=this.lineHeight}e.children.forEach((D,O)=>{const P=l.type===T.doUntilSchleife&&O===0?{top:!0,left:!0}:{};this.drawNode(D,t,n,P,l.type,z)});const S=Te("g");if(t.append(S),l.type===T.doUntilSchleife){const D=((j=e.children[0])==null?void 0:j.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(S,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const O=m-e.headerBandHeight;this.line(S,[[D,O],[u,O]]),this.line(S,[[D,o.y],[D,O]]);let P=O+this.metrics.doUntilFooterTopInset;for(const C of g)this.drawKeywordLine(S,C,o.x+Ee.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const D=this.roofMetrics(e,o,d,e.dividerX),O=D.apex;e.caseColumnFrames.forEach((C,Z)=>{if(Z>=e.caseColumnFrames.length-1)return;const J=C.x+C.width,Y=b3(J,o,O),ae=Number.isFinite(Y)?Math.min(Math.max(Y,o.y),m):o.y;this.line(S,[[J,m],[J,ae]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const C=l.type===T.fallauswahl?D.roofBottom-6:o.y+d-8,Z=Ee.branchLabelInsetX;if(l.type===T.verzweigung&&P.length===2){this.drawLabel(S,"true",o.x+Z,C,!0,"bottom");const J=e.caseColumnFrames[1],Y=this.measure("false",this.fontSize,"bold");this.drawLabel(S,"false",J.x+J.width-Z-Y,C,!0,"bottom")}else P.forEach((J,Y)=>{const ae=e.caseColumnFrames[Y],ee=["default","true","false"].includes(J.name.toLowerCase()),fe=this.measure(J.name,this.fontSize,ee?"bold":"medium");this.drawLabel(S,J.name,ae.x+ae.width/2-fe/2,C,ee,"bottom")})}}h&&S.append(Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function b3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function _o(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function v3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function ms(i){var e,t;return{...i,textLines:Ul(i),loopBody:(e=i.loopBody)==null?void 0:e.map(ms),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(ms)}))}}const y3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],vh=["de","en","pt-PT"],yh=y3.filter(i=>vh.includes(i.code)),ku=i=>vh.includes(i),w3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>K(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>K(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>K(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>K(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>K(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>K(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>K(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>K(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>K(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>K(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),wh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>K(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),z3=Object.assign({"../i18n/ar.strings":()=>K(()=>import("./ar-B37uSeni.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>K(()=>import("./da-BOu8fAad.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>K(()=>import("./de-B--hZiad.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>K(()=>import("./el-gg2XQg4B.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>K(()=>import("./en-CyL8rJ-B.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>K(()=>import("./es-pM1vcD9J.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>K(()=>import("./fr-4jpJiELE.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>K(()=>import("./he-D0hfYxbO.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>K(()=>import("./it-DvTA5OAG.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>K(()=>import("./ja-B9gt74zl.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>K(()=>import("./ko-CsUr1hf8.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>K(()=>import("./nb-CevhvW4M.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>K(()=>import("./nl-BsXYXKpN.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>K(()=>import("./pl-DzI5OyWY.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>K(()=>import("./pt-PT-Cr31YzEm.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>K(()=>import("./ru-DicU-xti.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>K(()=>import("./sv-CCQFxpqQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>K(()=>import("./tr-BrQzU5M5.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>K(()=>import("./uk-CgoU8BhR.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>K(()=>import("./zh-Hans-C89x22CL.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>K(()=>import("./zh-Hant-wLNOkM_A.js"),[],import.meta.url).then(i=>i.default)});function qa(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function zh(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` +`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function jo(i){const e=i==="java"?qa(wh,"/Java.strings"):qa(w3,`/${i}.lproj/Localizable.strings`),t=qa(z3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of zh(await a()))n.set(s,r);return n}let Ih="en",kh=new Map,Kn=new Map;const cs="appLanguageCode",e0="visustruct.keywords";let Co=new Map,t0=!1;const I3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function k3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(cs)==="java";return i&&(localStorage.setItem(cs,"en"),localStorage.setItem(e0,"1")),i}catch{return!1}}function S3(){try{return localStorage.getItem(e0)==="1"}catch{return!1}}async function Sh(i,e=!0){if(i&&Co.size===0){Kn.size===0&&(Kn=await jo("en"));const t=qa(wh,"/Java.strings");if(t)for(const[n,a]of zh(await t()))I3(n)&&a!==Kn.get(n)&&Co.set(n,a)}if(t0=i,e)try{localStorage.setItem(e0,i?"1":"0")}catch{}}function T3(){return t0}function _3(){if(k3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&ku(i))return i;try{const e=localStorage.getItem(cs);if(e&&ku(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=yh.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function Th(i,e=!0){if(Kn.size===0&&(Kn=await jo("en")),kh=i==="en"?Kn:await jo(i),Ih=i,e)try{localStorage.setItem(cs,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function r1(){return Ih}function p(i,...e){const t=(t0?Co.get(i):void 0)??kh.get(i)??Kn.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const ds=243,j3=244,_h=40,_r=4,C3=1;function n0(i){const e=i.length,t=ds+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([ds,t,e&255,e>>8,...i,n,j3])}function A3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return n0([_h,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function P3(i){if(i[0]!==_h||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:D3(t[1].trim())}:void 0}function O3(i){const e=[];for(;;){const t=i.indexOf(ds);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(ds+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.lengthArray.from({length:e},(t,n)=>i>>>8*n&255);function L3(i){let e=0;for(let t=0;t>>0;return gi(e,4)}const jr=(i,e)=>n0([1,0,jh,i,...gi(e.length,2),...e]);function W3(i,e=D3){const t=new TextEncoder().encode(i),n=(4-t.length%U1+U1)%U1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[jr(1,[0,...gi(a.length,4),...L3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,N3=i=>i.length===7||i.some((e,t)=>e===jh&&i[t+1]===240),Ch=()=>typeof navigator>"u"?void 0:navigator.serial,Cr=()=>Ch()!==void 0,F3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,tr=(i,e=24)=>F3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Ah=tr("VisuBot",32);class J3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=Ch();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Ah))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",tr("Bis bald!")])await this.send(r,_r,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,_r,3e4).then(()=>{})}ask(e){return this.send(e,C3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=W3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(n0(B3),E3),r();for(const l of Z3)await this.send(l,_r,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,N3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(A3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of O3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=P3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const xe=new J3,Ph=5,R3=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Ao=6.5,d1=Math.PI*Ao,H3={cm:{cm:1,one:"cm",many:"cm"},umdrehungen:{cm:d1,one:"Umdrehung",many:"Umdrehungen"},umdrehung:{cm:d1,one:"Umdrehung",many:"Umdrehungen"},rotations:{cm:d1,one:"rotation",many:"rotations"},rotation:{cm:d1,one:"rotation",many:"rotations"},rotações:{cm:d1,one:"rotação",many:"rotações"},rotação:{cm:d1,one:"rotação",many:"rotações"}},V3=["cm","Umdrehungen","rotations"];function Q3(i,e,t){const n=H3[t.trim().toLowerCase()];if(!n)return;const a=e*n.cm,s=Po(i,[a]);if(n.cm===1)return s;const r=e===1?n.one:n.many;return{...s,label:`${ze(e)} ${r} ${i==="forward"?"vorwärts":"rückwärts"} (${ze(a)} cm)`}}const Ci={forward:{args:1,defaults:[Su],python:([i])=>`mbot2.straight(${ze(i)})`,label:([i])=>`${ze(i)} cm vorwärts`},backward:{args:1,defaults:[Su],python:([i])=>`mbot2.straight(${ze(-i)})`,label:([i])=>`${ze(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(-i)})`,label:([i])=>`${ze(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(i)})`,label:([i])=>`${ze(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ze(i)}, ${ze(-e)})`,label:([i,e])=>`Räder links ${ze(i)} %, rechts ${ze(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ze(i)}, ${ze(e)}, ${ze(t)})`,label:([i,e,t])=>`LEDs (${ze(i)}, ${ze(e)}, ${ze(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(hs),valid:([i])=>R3(i),python:([i],e)=>`cyberpi.led.on(${hs[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ze(i)}, ${ze(e/1e3)})`,label:([i,e])=>`Ton ${ze(i)} Hz, ${ze(e)} ms`},pause:{args:1,label:([i])=>`${ze(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:G3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>tr(e),label:(i,e)=>`Bildschirm: ${e}`}},Tu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let i0="en";function q3(i){i0=i==="de"?"de":"en"}const U3=()=>i0;function Oh(i){const e=i.trim().toLowerCase(),t=Tu[e]??Object.values(Tu).find(n=>n.de===e);return t?t[i0]:e}const h1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),At={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:h1("a"),isButtonB:h1("b"),isJoystickUp:h1("up"),isJoystickDown:h1("down"),isJoystickLeft:h1("left"),isJoystickRight:h1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function Y3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in At&&e.add(t[1]);return[...e]}function $3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:ex(n)}}function gs(i,e){const t=Ci[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function Po(i,e,t=""){var a;const n=Ci[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function Mh(i){return i.map(e=>[e.method,...e.args.map(ze),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function X3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in At))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?Oh(a):a):String(a)}):i}function ex(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function Dh(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=oi(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const Bh=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],tx=i=>Bh.includes(i),nx=100;function Zh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return i.similar?`Unknown variable: ${i.text}. Java is case-sensitive: did you mean ${i.similar}?`:`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Re extends Error{constructor(e){super(Zh(e)),this.notice=e}}const et=i=>new Re({kind:"unsupportedStatement",text:i}),R=i=>new Re({kind:"invalidExpression",text:i}),b1=(i,e)=>{const t=e&&[...e.keys()].find(n=>n!==i&&n.toLowerCase()===i.toLowerCase());return new Re(t?{kind:"unknownVariable",text:i,similar:t}:{kind:"unknownVariable",text:i})},ix=()=>new Re({kind:"divisionByZero"}),fs=new Map;function ax(i,e){fs.set(i,e)}const Lh=()=>[...fs];function _u(i){return i instanceof Re?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function sx(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function ju(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):sx(i)}function _e(i){switch(i.kind){case"int":return String(i.value);case"double":return ju(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(ju).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+rx(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function rx(i){return i.value.map(e=>"["+e.map(t=>_e(Oo(i.elementType,t))).join(", ")+"]")}function Oo(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function Cu(i){return i==="string"?"":i==="boolean"?!1:0}const xs=new WeakMap;let ox=0;function Au(i){const e=s=>({int:"I",double:"D",boolean:"Z",string:"Ljava.lang.String;"})[s],t=i.kind==="grid"?"[["+e(i.elementType):i.kind==="intArray"?"[I":i.kind==="doubleArray"?"[D":i.kind==="booleanArray"?"[Z":i.kind==="stringArray"?"[Ljava.lang.String;":void 0;if(!t||!("value"in i))return _e(i);const n=i.value;let a=xs.get(n);return a||(a=(Math.imul(++ox,2654435761)>>>0&2147483647).toString(16),xs.set(n,a)),t+"@"+a}function Pu(i,e){const t=xs.get(i);t&&xs.set(e,t)}function qa(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function lx(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const St=i=>({kind:"int",value:i}),Tt=i=>({kind:"double",value:i}),a0=i=>i!==void 0&&/\s/u.test(i),bs=i=>new RegExp("\\p{L}","u").test(i),li=i=>new RegExp("\\p{N}","u").test(i);function pi(i){const e=Array.from(i);return e.length===0||!(bs(e[0])||e[0]==="_")?!1:e.every(t=>bs(t)||li(t)||t==="_")}function tn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function Ou(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function lt(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` -`)}function Mu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function s0(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function vs(i,e){const t=Array.from(i),n=Array.from(e),a=s0(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function ux(i){const e=Array.from(i),t=s0(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function nr(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(nr(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function oa(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||a0(n[0])||n[0]==="("))continue;let a=n.trim();const s=Wh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function v1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!pi(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function cx(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(nr(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:vs(s,",")}}function Du(i){return pi(i)||v1(i)!==void 0}function Ar(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw R(i);return e.push(t),e}function dx(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Bu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw R(i)}else if(!li(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw R(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(bs(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function e1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Lu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function Do(i){const e=i.map(t=>e1(t).trim());return e.length===1&&e[0].includes(";")?Lu(e[0].split(";").map(t=>t.trim())):Lu(e)}const dt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function Yt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case T.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case T.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case T.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case T.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:Do(s.textLines)});break;case T.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case T.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case T.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case T.aussprung:a({path:o,text:l,kind:"jump"});break;case T.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function gx(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Re({kind:"wholeNumberExpected"});return St(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Re({kind:"numberExpected"});return Tt(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Re({kind:"booleanExpected"})}}}function Wu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function px(i,e){for(let t=0;tt===e.path[n])}function kt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:tn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:tn(e[1]),name:e[2],params:t}}function Eh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(e)return{targetType:e[1]?tn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:vs(e[4],",")}}function ys(i){var t,n;const e=e1(i);return((t=kt(e))==null?void 0:t.name)??((n=Eh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Ai{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",Wu());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=Yt(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${_e(n)}`}catch(n){this.state.inputErrorNotice=_u(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw et(e.text);const n=oa(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=Yt(t[s].elements,[...e.path,s],dt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw et(e.text);const n=oa(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=px(this.evaluateSwitchSelector(n),t)??t.length-1;const s=Yt(t[a].elements,[...e.path,a],dt(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=Do(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=Do(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...s,{...dt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=oa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=oa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(ys(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=Eh(t),s=kt(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Re({kind:"callArguments",text:(s==null?void 0:s.name)??ys(t)});if(this.callDepth>=nx)throw new Re({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?b1(g,this.state.variables):R(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw R(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=Yt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():_e(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=e1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw R(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${_e(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Re({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?Tt(a.value):r==="string"?{kind:"string",value:_e(a)}:a;if(Ou(o)!==r)throw R(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${_e(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v),I=(r==null?void 0:r[1])==="print",k=I&&z.endsWith(` + pass`],gi=(i,e)=>Array.from({length:e},(t,n)=>i>>>8*n&255);function L3(i){let e=0;for(let t=0;t>>0;return gi(e,4)}const jr=(i,e)=>n0([1,0,jh,i,...gi(e.length,2),...e]);function W3(i,e=B3){const t=new TextEncoder().encode(i),n=(4-t.length%Q1+Q1)%Q1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[jr(1,[0,...gi(a.length,4),...L3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,N3=i=>i.length===7||i.some((e,t)=>e===jh&&i[t+1]===240),Ch=()=>typeof navigator>"u"?void 0:navigator.serial,Cr=()=>Ch()!==void 0,F3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,tr=(i,e=24)=>F3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Ah=tr("VisuBot",32);class J3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=Ch();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Ah))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",tr("Bis bald!")])await this.send(r,_r,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,_r,3e4).then(()=>{})}ask(e){return this.send(e,C3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=W3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(n0(M3),E3),r();for(const l of Z3)await this.send(l,_r,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,N3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(A3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of O3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=P3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const xe=new J3,Ph=5,R3=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Ao=6.5,d1=Math.PI*Ao,H3={cm:{cm:1,one:"cm",many:"cm"},umdrehungen:{cm:d1,one:"Umdrehung",many:"Umdrehungen"},umdrehung:{cm:d1,one:"Umdrehung",many:"Umdrehungen"},rotations:{cm:d1,one:"rotation",many:"rotations"},rotation:{cm:d1,one:"rotation",many:"rotations"},rotações:{cm:d1,one:"rotação",many:"rotações"},rotação:{cm:d1,one:"rotação",many:"rotações"}},V3=["cm","Umdrehungen","rotations"];function q3(i,e,t){const n=H3[t.trim().toLowerCase()];if(!n)return;const a=e*n.cm,s=Po(i,[a]);if(n.cm===1)return s;const r=e===1?n.one:n.many;return{...s,label:`${ze(e)} ${r} ${i==="forward"?"vorwärts":"rückwärts"} (${ze(a)} cm)`}}const Ci={forward:{args:1,defaults:[Su],python:([i])=>`mbot2.straight(${ze(i)})`,label:([i])=>`${ze(i)} cm vorwärts`},backward:{args:1,defaults:[Su],python:([i])=>`mbot2.straight(${ze(-i)})`,label:([i])=>`${ze(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(-i)})`,label:([i])=>`${ze(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(i)})`,label:([i])=>`${ze(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ze(i)}, ${ze(-e)})`,label:([i,e])=>`Räder links ${ze(i)} %, rechts ${ze(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ze(i)}, ${ze(e)}, ${ze(t)})`,label:([i,e,t])=>`LEDs (${ze(i)}, ${ze(e)}, ${ze(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(hs),valid:([i])=>R3(i),python:([i],e)=>`cyberpi.led.on(${hs[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ze(i)}, ${ze(e/1e3)})`,label:([i,e])=>`Ton ${ze(i)} Hz, ${ze(e)} ms`},pause:{args:1,label:([i])=>`${ze(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:G3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>tr(e),label:(i,e)=>`Bildschirm: ${e}`}},Tu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let i0="en";function U3(i){i0=i==="de"?"de":"en"}const Q3=()=>i0;function Oh(i){const e=i.trim().toLowerCase(),t=Tu[e]??Object.values(Tu).find(n=>n.de===e);return t?t[i0]:e}const h1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),At={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:h1("a"),isButtonB:h1("b"),isJoystickUp:h1("up"),isJoystickDown:h1("down"),isJoystickLeft:h1("left"),isJoystickRight:h1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function Y3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in At&&e.add(t[1]);return[...e]}function $3(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:ex(n)}}function gs(i,e){const t=Ci[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function Po(i,e,t=""){var a;const n=Ci[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function Dh(i){return i.map(e=>[e.method,...e.args.map(ze),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function X3(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in At))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?Oh(a):a):String(a)}):i}function ex(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function Bh(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=oi(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const Mh=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],tx=i=>Mh.includes(i),nx=100;function Zh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return i.similar?`Unknown variable: ${i.text}. Java is case-sensitive: did you mean ${i.similar}?`:`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Re extends Error{constructor(e){super(Zh(e)),this.notice=e}}const et=i=>new Re({kind:"unsupportedStatement",text:i}),R=i=>new Re({kind:"invalidExpression",text:i}),b1=(i,e)=>{const t=e&&[...e.keys()].find(n=>n!==i&&n.toLowerCase()===i.toLowerCase());return new Re(t?{kind:"unknownVariable",text:i,similar:t}:{kind:"unknownVariable",text:i})},ix=()=>new Re({kind:"divisionByZero"}),fs=new Map;function ax(i,e){fs.set(i,e)}const Lh=()=>[...fs];function _u(i){return i instanceof Re?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function sx(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function ju(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):sx(i)}function _e(i){switch(i.kind){case"int":return String(i.value);case"double":return ju(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(ju).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+rx(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function rx(i){return i.value.map(e=>"["+e.map(t=>_e(Oo(i.elementType,t))).join(", ")+"]")}function Oo(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function Cu(i){return i==="string"?"":i==="boolean"?!1:0}const xs=new WeakMap;let ox=0;function Au(i){const e=s=>({int:"I",double:"D",boolean:"Z",string:"Ljava.lang.String;"})[s],t=i.kind==="grid"?"[["+e(i.elementType):i.kind==="intArray"?"[I":i.kind==="doubleArray"?"[D":i.kind==="booleanArray"?"[Z":i.kind==="stringArray"?"[Ljava.lang.String;":void 0;if(!t||!("value"in i))return _e(i);const n=i.value;let a=xs.get(n);return a||(a=(Math.imul(++ox,2654435761)>>>0&2147483647).toString(16),xs.set(n,a)),t+"@"+a}function Pu(i,e){const t=xs.get(i);t&&xs.set(e,t)}function Ua(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function lx(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const St=i=>({kind:"int",value:i}),Tt=i=>({kind:"double",value:i}),a0=i=>i!==void 0&&/\s/u.test(i),bs=i=>new RegExp("\\p{L}","u").test(i),li=i=>new RegExp("\\p{N}","u").test(i);function pi(i){const e=Array.from(i);return e.length===0||!(bs(e[0])||e[0]==="_")?!1:e.every(t=>bs(t)||li(t)||t==="_")}function tn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function Ou(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function lt(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` +`)}function Du(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function s0(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function vs(i,e){const t=Array.from(i),n=Array.from(e),a=s0(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function ux(i){const e=Array.from(i),t=s0(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function nr(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(nr(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function oa(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||a0(n[0])||n[0]==="("))continue;let a=n.trim();const s=Wh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function v1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!pi(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function cx(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(nr(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:vs(s,",")}}function Bu(i){return pi(i)||v1(i)!==void 0}function Ar(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw R(i);return e.push(t),e}function dx(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Mu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw R(i)}else if(!li(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw R(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(bs(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function e1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Lu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function Bo(i){const e=i.map(t=>e1(t).trim());return e.length===1&&e[0].includes(";")?Lu(e[0].split(";").map(t=>t.trim())):Lu(e)}const dt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function Yt(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case T.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case T.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case T.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case T.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:Bo(s.textLines)});break;case T.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case T.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case T.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case T.aussprung:a({path:o,text:l,kind:"jump"});break;case T.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function gx(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Re({kind:"wholeNumberExpected"});return St(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Re({kind:"numberExpected"});return Tt(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Re({kind:"booleanExpected"})}}}function Wu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function px(i,e){for(let t=0;tt===e.path[n])}function kt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:tn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:tn(e[1]),name:e[2],params:t}}function Eh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(e1(i));if(e)return{targetType:e[1]?tn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:vs(e[4],",")}}function ys(i){var t,n;const e=e1(i);return((t=kt(e))==null?void 0:t.name)??((n=Eh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Ai{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",Wu());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=Yt(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${_e(n)}`}catch(n){this.state.inputErrorNotice=_u(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw et(e.text);const n=oa(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=Yt(t[s].elements,[...e.path,s],dt(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw et(e.text);const n=oa(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=px(this.evaluateSwitchSelector(n),t)??t.length-1;const s=Yt(t[a].elements,[...e.path,a],dt(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=Bo(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=Bo(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...s,{...dt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...dt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=oa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=oa(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...a,{...dt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=Yt(e.loopBody??[],[...e.path,0],dt(e));this.splice([...t,{...dt(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(ys(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=Eh(t),s=kt(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Re({kind:"callArguments",text:(s==null?void 0:s.name)??ys(t)});if(this.callDepth>=nx)throw new Re({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?b1(g,this.state.variables):R(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw R(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=Yt(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():_e(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=e1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw R(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${_e(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Re({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?Tt(a.value):r==="string"?{kind:"string",value:_e(a)}:a;if(Ou(o)!==r)throw R(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${_e(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v),I=(r==null?void 0:r[1])==="print",k=I&&z.endsWith(` `),[S,...j]=(k?z.slice(0,-1):z).split(` -`);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLines.push(...j),t.outputLineOpen=I&&!k,this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=$3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(e1(n).trim()),u=l?tn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,Oo(u,Cu(u)));t.lastTrace=v.map(w=>`${w} = ${_e(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw et(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${_e(b)}`}executeMBotCommand(e,t,n){var r;if((r=Ci[e])!=null&&r.text){const o=Ci[e];if(t.length!==o.args+1)throw R(n);const l=gs(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw R(n);const u=Po(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw R(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}if((e==="forward"||e==="backward")&&t.length===2){const o=this.evaluateOutputExpression(t[1]),l=Q3(e,this.evaluateDouble(t[0]),o);if(!l)throw R(`${n} (${V3.map(u=>`"${u}"`).join(", ")})`);this.state.robotActions.push(l),this.state.lastTrace=`${n} -> ${l.label}`;return}const a=gs(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw R(n);const s=Po(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=e1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw R(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw et(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Re({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` -`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw R(t)}fileContent(e){const t=this.state.files.get(e)??fs.get(e);if(t===void 0)throw new Re({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw R(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,St(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,Tt(l)),this.state.lastTrace=`${s} = ${_e(r)} ${o} 1 -> ${_e(Tt(l))}`;return}throw et(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!pi(r)||!l)throw et(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,St(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,Tt(c)),this.state.lastTrace=`${r} = ${_e(l)} ${u} ${_e(Tt(m))} -> ${_e(Tt(c))}`;return}throw et(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(v1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&tn(t[0]))n=t[1],a=tn(t[0]);else if(t.length===3&&t[0]==="const"&&tn(t[1]))n=t[2],a=tn(t[1]);else throw et(e);if(!Du(n))throw et(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw et(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=tn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!Du(r))throw et(e);const m=lt(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=tn(s),o=n[1];if(!r||!pi(o))throw et(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>lt(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw et(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw R(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return lt(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=dx(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw R(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw et(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw R(o[1]);if(u<0)throw R(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(Cu(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw R(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw R(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=v1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=cx(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Re({kind:"nullValue",text:t.target.trim()});const s=lt(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw R(e);const g=lt(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw R(h)},l=d=>{if(r[d]===void 0)throw R(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw R(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw R(e);return d};switch(t.method){case"length":return u(0),St(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw R(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw R(e);return t.args[0]},a=s=>{const r=lt(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw R(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Re({kind:"wholeNumberExpected"});return St(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Re({kind:"numberExpected"});return Tt(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Arrays.toString":case"Arrays.deepToString":{const s=this.state.variables.get(n().trim());if(!s||!qa(s))throw R(e);return s.kind==="grid"&&t.method==="toString"?{kind:"string",value:"["+s.value.map(o=>Au({kind:`${s.elementType}Array`,value:o})).join(", ")+"]"}:{kind:"string",value:_e(s)}}case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw R(e);const r=lt(s[1]),o=fs.get(r);if(o===void 0)throw new Re({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=v1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=nr(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?Mo(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw b1(e,this.state.variables);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw R(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw R(a);return Oo(n.elementType,r[t[1]])}if(t.length!==1)throw R(a);const s=t[0];if(!qa(n))throw R(e);if(s>=n.value.length)throw R(a);switch(n.kind){case"intArray":return St(n.value[s]);case"doubleArray":return Tt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw R(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return Ou(n);const a=v1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw b1(a.arrayName,this.state.variables);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw R(a.arrayName)}throw et(e)}assignValue(e,t){const n=t.trim(),a=v1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw b1(a.arrayName,this.state.variables);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw R(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||qa(e))throw R(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,Pu(r.value,m),this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw R(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw R(n);if(o>=l.value.length)throw R(n);l.value[o]=e.value,Pu(r.value,l.value),this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Zu(t)&&Ar(t).every(s=>lt(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of Ar(this.withSensors(e))){const r=s.trim(),o=lt(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Zu(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?St(n.value+l.value):Tt(n.value+l.value):n=l;continue}a=(a??(n?_e(n):""))+Au(l),n=void 0}return a??(n?_e(n):"")}renderOutputExpression(e){return Ar(e).map(t=>{const n=t.trim();if(lt(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return _e(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return St(this.evaluateInt(e));case"double":return Tt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=lt(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:_e(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?St(t):Tt(t)}parser(e){const t=this.withSensors(e);return new hx(Bu(Mu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return K3(e,t=>this.robotSensors[t]??At[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=vs(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=vs(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=Wh(t);if(r!==void 0)return this.evaluateBool(r);const o=mx(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=ux(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw R(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw R(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw R(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=lt(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw R(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Bu(Mu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw b1(t.name,this.state.variables);return _e(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Nh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ws(i,e,t={},n=[]){const a=r0(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; +`);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLines.push(...j),t.outputLineOpen=I&&!k,this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=$3(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(e1(n).trim()),u=l?tn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,Oo(u,Cu(u)));t.lastTrace=v.map(w=>`${w} = ${_e(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw et(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${_e(b)}`}executeMBotCommand(e,t,n){var r;if((r=Ci[e])!=null&&r.text){const o=Ci[e];if(t.length!==o.args+1)throw R(n);const l=gs(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw R(n);const u=Po(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw R(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}if((e==="forward"||e==="backward")&&t.length===2){const o=this.evaluateOutputExpression(t[1]),l=q3(e,this.evaluateDouble(t[0]),o);if(!l)throw R(`${n} (${V3.map(u=>`"${u}"`).join(", ")})`);this.state.robotActions.push(l),this.state.lastTrace=`${n} -> ${l.label}`;return}const a=gs(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw R(n);const s=Po(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=e1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw R(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw et(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Re({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` +`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw R(t)}fileContent(e){const t=this.state.files.get(e)??fs.get(e);if(t===void 0)throw new Re({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw R(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,St(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,Tt(l)),this.state.lastTrace=`${s} = ${_e(r)} ${o} 1 -> ${_e(Tt(l))}`;return}throw et(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!pi(r)||!l)throw et(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,St(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,Tt(c)),this.state.lastTrace=`${r} = ${_e(l)} ${u} ${_e(Tt(m))} -> ${_e(Tt(c))}`;return}throw et(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(v1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&tn(t[0]))n=t[1],a=tn(t[0]);else if(t.length===3&&t[0]==="const"&&tn(t[1]))n=t[2],a=tn(t[1]);else throw et(e);if(!Bu(n))throw et(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw et(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=tn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!Bu(r))throw et(e);const m=lt(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=tn(s),o=n[1];if(!r||!pi(o))throw et(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>lt(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw et(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw R(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return lt(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=dx(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw R(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw et(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw R(o[1]);if(u<0)throw R(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(Cu(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw R(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw R(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=v1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=cx(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Re({kind:"nullValue",text:t.target.trim()});const s=lt(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw R(e);const g=lt(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw R(h)},l=d=>{if(r[d]===void 0)throw R(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw R(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw R(e);return d};switch(t.method){case"length":return u(0),St(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw R(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw R(e);return t.args[0]},a=s=>{const r=lt(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw R(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Re({kind:"wholeNumberExpected"});return St(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Re({kind:"numberExpected"});return Tt(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Arrays.toString":case"Arrays.deepToString":{const s=this.state.variables.get(n().trim());if(!s||!Ua(s))throw R(e);return s.kind==="grid"&&t.method==="toString"?{kind:"string",value:"["+s.value.map(o=>Au({kind:`${s.elementType}Array`,value:o})).join(", ")+"]"}:{kind:"string",value:_e(s)}}case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw R(e);const r=lt(s[1]),o=fs.get(r);if(o===void 0)throw new Re({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=v1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=nr(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?Do(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw b1(e,this.state.variables);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw R(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw R(a);return Oo(n.elementType,r[t[1]])}if(t.length!==1)throw R(a);const s=t[0];if(!Ua(n))throw R(e);if(s>=n.value.length)throw R(a);switch(n.kind){case"intArray":return St(n.value[s]);case"doubleArray":return Tt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw R(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return Ou(n);const a=v1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw b1(a.arrayName,this.state.variables);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw R(a.arrayName)}throw et(e)}assignValue(e,t){const n=t.trim(),a=v1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw b1(a.arrayName,this.state.variables);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw R(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||Ua(e))throw R(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,Pu(r.value,m),this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw R(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw R(n);if(o>=l.value.length)throw R(n);l.value[o]=e.value,Pu(r.value,l.value),this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Zu(t)&&Ar(t).every(s=>lt(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of Ar(this.withSensors(e))){const r=s.trim(),o=lt(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Zu(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?St(n.value+l.value):Tt(n.value+l.value):n=l;continue}a=(a??(n?_e(n):""))+Au(l),n=void 0}return a??(n?_e(n):"")}renderOutputExpression(e){return Ar(e).map(t=>{const n=t.trim();if(lt(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return _e(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return St(this.evaluateInt(e));case"double":return Tt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=lt(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:_e(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?St(t):Tt(t)}parser(e){const t=this.withSensors(e);return new hx(Mu(Du(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return K3(e,t=>this.robotSensors[t]??At[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=vs(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=vs(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=Wh(t);if(r!==void 0)return this.evaluateBool(r);const o=mx(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=ux(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw R(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw R(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw R(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=lt(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=lt(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw R(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Mu(Du(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw b1(t.name,this.state.variables);return _e(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Nh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ws(i,e,t={},n=[]){const a=r0(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; `);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(tg)&&(s+=`import random @@ -28,50 +28,50 @@ except: `),i.pseudocode&&(s+=(e==="python"?"# ":"// ")+a.pseudocodeNote+` -`),e!=="java")for(const u of n){if(u===i)continue;const m=kt(u.caption);m&&(s+=Bo(u,m,e,t,0)+` -`)}const o=kt(i.caption),l={out:""};if(o)l.out=Bo(i,o,e,t,a.baseIndent);else for(const u of i.elements)rr(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=bx(e);return e==="javascript"?`"use strict"; +`),e!=="java")for(const u of n){if(u===i)continue;const m=kt(u.caption);m&&(s+=Mo(u,m,e,t,0)+` +`)}const o=kt(i.caption),l={out:""};if(o)l.out=Mo(i,o,e,t,a.baseIndent);else for(const u of i.elements)rr(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=bx(e);return e==="javascript"?`"use strict"; -`+u:u}return sg(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function r0(i,e,t){const n={...Nh,...t,jsIntVariables:new Set,arrayElementTypes:_x(i),stringVariables:Tx(i)};return e!=="java"&&(n.jsIntVariables=qx(i)),n}const Eu=i=>i==="string"?"String":i===void 0?"void":i;function Fh(i){const e=i.params.map(t=>`${Eu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Eu(i.returnType)} ${i.name}(${e}) {`}function Bo(i,e,t,n,a){const s=r0(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)rr(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=B(a+s.indentPerLevel)+(t==="python"?`pass +`+u:u}return sg(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function r0(i,e,t){const n={...Nh,...t,jsIntVariables:new Set,arrayElementTypes:_x(i),stringVariables:Tx(i)};return e!=="java"&&(n.jsIntVariables=Ux(i)),n}const Eu=i=>i==="string"?"String":i===void 0?"void":i;function Fh(i){const e=i.params.map(t=>`${Eu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Eu(i.returnType)} ${i.name}(${e}) {`}function Mo(i,e,t,n,a){const s=r0(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)rr(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=M(a+s.indentPerLevel)+(t==="python"?`pass `:` -`)),t){case"java":return`${B(a)}${Fh(e)} -${o.out}${B(a)}} -`;case"python":return`${B(a)}def ${e.name}(${r}): -${o.out}`;case"javascript":return`${B(a)}function ${e.name}(${r}) { -${o.out}${B(a)}} -`}}const B=i=>i>0?" ".repeat(i):"";function ye(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function bx(i,e){return i==="python"?"# empty element":"// empty element"}const Zo=i=>i.trim()==="ø";function Jh(i,e){return B(i)+(e==="python"?`# empty element +`)),t){case"java":return`${M(a)}${Fh(e)} +${o.out}${M(a)}} +`;case"python":return`${M(a)}def ${e.name}(${r}): +${o.out}`;case"javascript":return`${M(a)}function ${e.name}(${r}) { +${o.out}${M(a)}} +`}}const M=i=>i>0?" ".repeat(i):"";function ye(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function bx(i,e){return i==="python"?"# empty element":"// empty element"}const Zo=i=>i.trim()==="ø";function Jh(i,e){return M(i)+(e==="python"?`# empty element `:`// empty element -`)}function vx(i){switch(i.type){case T.leerElement:return!0;case T.anweisung:case T.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Zo(e));default:return!1}}function yx(i){return i.every(vx)}function o0(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?B(t)+`""" -`+n.map(a=>B(t)+a+` -`).join("")+B(t)+`""" -`:n.length===1?B(t)+"/* "+n[0]+` */ -`:B(t)+`/* -`+n.map(a=>B(t)+" * "+a+` -`).join("")+B(t)+` */ -`}const wx=i=>i==="java"||i==="javascript";function zs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Ua(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return zx(e.length===0?"true":e.join(" "))}function zx(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=Rh(t,e);if(n!==void 0)return n===""?"true":n}return e}function Rh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function Qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Ix(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const ir=i=>i.name.includes("[")&&i.name.includes("]");function l0(i){const e=i.trim();if(e==="")return;const t=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:Is(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ye(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=kx(e);if(a)return{type:Is(a[0]),name:a[1]}}function Is(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function kx(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function Sx(i,e,t,n,a){const s=Qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return B(t)+"System.out.println("+s+`); -`;case"javascript":return B(t)+"console.log("+s+`); -`;case"python":return B(t)+"print("+Dn(s,n,a)+`) +`)}function vx(i){switch(i.type){case T.leerElement:return!0;case T.anweisung:case T.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Zo(e));default:return!1}}function yx(i){return i.every(vx)}function o0(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?M(t)+`""" +`+n.map(a=>M(t)+a+` +`).join("")+M(t)+`""" +`:n.length===1?M(t)+"/* "+n[0]+` */ +`:M(t)+`/* +`+n.map(a=>M(t)+" * "+a+` +`).join("")+M(t)+` */ +`}const wx=i=>i==="java"||i==="javascript";function zs(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function Qa(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return zx(e.length===0?"true":e.join(" "))}function zx(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=Rh(t,e);if(n!==void 0)return n===""?"true":n}return e}function Rh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Ix(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const ir=i=>i.name.includes("[")&&i.name.includes("]");function l0(i){const e=i.trim();if(e==="")return;const t=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:Is(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ye(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=kx(e);if(a)return{type:Is(a[0]),name:a[1]}}function Is(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function kx(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function Sx(i,e,t,n,a){const s=qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return M(t)+"System.out.println("+s+`); +`;case"javascript":return M(t)+"console.log("+s+`); +`;case"python":return M(t)+"print("+Bn(s,n,a)+`) `}}function Pi(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(` -`,"\\n").replaceAll("\r","\\r")}function u0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=l0(n);if(a&&ir(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function Tx(i){const e=new Set;return bn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=l0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!ir(o)&&e.add(o.name);continue}const s=ye(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ye(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function _x(i){const e=new Map;return bn(i.elements,t=>{for(const n of t.textLines){const a=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],Is(a[1]))}}),e}function jx(i,e,t){const n=u0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=B(e)+'System.out.println("'+Pi(a)+`"); -`,r=o=>ir(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+B(e)+`${r("int")} = scanner.nextInt(); -`;case"double":return s+B(e)+`${r("double")} = scanner.nextDouble(); -`;case"String":return s+B(e)+`${r("String")} = scanner.next(); -`;case"boolean":return s+B(e)+`${r("boolean")} = scanner.nextBoolean(); -`;default:return}}function Cx(i,e,t){const n=u0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":B(e)+'console.log("'+Pi(n.name+": ")+`"); -`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${Pi(u)}") ?? "${l}")`},o=ir(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+B(e)+`${o} = parseInt(${r("0")}, 10); -`;case"double":return s+B(e)+`${o} = Number(${r("0")}); -`;case"String":return s+B(e)+`${o} = ${r("")}; -`;case"boolean":return s+B(e)+`${o} = ${r("")}.trim().toLowerCase() === "true"; -`;default:return}}function Ax(i,e,t){const n=u0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":B(e)+'print("'+Pi(n.name+": ")+`") -`,r=`input("${Pi(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+B(e)+`${n.name} = int(${r}) -`;case"double":return s+B(e)+`${n.name} = float(${r}) -`;case"String":return s+B(e)+`${n.name} = ${r} -`;case"boolean":return s+B(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr") -`;default:return}}const Pr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,Px=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${Pr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${Pr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${Pr}\s*\)?\s*\)$`),"PrintWriter"]];function Gh(i){const e=i.trim();for(const[t,n]of Px){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function Ox(i,e,t,n,a){if(e==="java")return;const s=Qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&Gh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?B(t)+`${r[1]} = ${o.kind}(${o.name}) -`:B(t)+`${m?"let ":""}${r[1]} = new ${o.kind}(${o.name}); -`}const l=/^([A-Za-z_]\w*)\.(println|print)\s*\(([\s\S]*)\)$/.exec(s);if(l&&l[1]!=="System"){const m=l[3].trim(),c=e==="python"&&m!==""?Dn(m,n,a):m;return B(t)+`${l[1]}.${l[2]}(${c})${e==="javascript"?";":""} -`}const u=/^Files\.writeString\s*\(\s*(?:Path\.of|Paths\.get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,\s*([\s\S]+)\)$/.exec(s);if(u){const m=u[2].trim();return e==="python"?B(t)+`open(${u[1]}, "w", encoding="utf-8").write(${Dn(m,n,a)}) -`:B(t)+`require("fs").writeFileSync(${u[1]}, ${m}); -`}}function Mx(i){const e=new Set;for(const t of i)bn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&Gh(s[1]);r&&e.add(r.kind)}});return e}const Dx={Scanner:`class Scanner: +`,"\\n").replaceAll("\r","\\r")}function u0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=l0(n);if(a&&ir(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function Tx(i){const e=new Set;return bn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=l0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!ir(o)&&e.add(o.name);continue}const s=ye(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ye(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function _x(i){const e=new Map;return bn(i.elements,t=>{for(const n of t.textLines){const a=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],Is(a[1]))}}),e}function jx(i,e,t){const n=u0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=M(e)+'System.out.println("'+Pi(a)+`"); +`,r=o=>ir(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+M(e)+`${r("int")} = scanner.nextInt(); +`;case"double":return s+M(e)+`${r("double")} = scanner.nextDouble(); +`;case"String":return s+M(e)+`${r("String")} = scanner.next(); +`;case"boolean":return s+M(e)+`${r("boolean")} = scanner.nextBoolean(); +`;default:return}}function Cx(i,e,t){const n=u0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":M(e)+'console.log("'+Pi(n.name+": ")+`"); +`,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${Pi(u)}") ?? "${l}")`},o=ir(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+M(e)+`${o} = parseInt(${r("0")}, 10); +`;case"double":return s+M(e)+`${o} = Number(${r("0")}); +`;case"String":return s+M(e)+`${o} = ${r("")}; +`;case"boolean":return s+M(e)+`${o} = ${r("")}.trim().toLowerCase() === "true"; +`;default:return}}function Ax(i,e,t){const n=u0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":M(e)+'print("'+Pi(n.name+": ")+`") +`,r=`input("${Pi(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+M(e)+`${n.name} = int(${r}) +`;case"double":return s+M(e)+`${n.name} = float(${r}) +`;case"String":return s+M(e)+`${n.name} = ${r} +`;case"boolean":return s+M(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr") +`;default:return}}const Pr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,Px=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${Pr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${Pr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${Pr}\s*\)?\s*\)$`),"PrintWriter"]];function Gh(i){const e=i.trim();for(const[t,n]of Px){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function Ox(i,e,t,n,a){if(e==="java")return;const s=qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&Gh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?M(t)+`${r[1]} = ${o.kind}(${o.name}) +`:M(t)+`${m?"let ":""}${r[1]} = new ${o.kind}(${o.name}); +`}const l=/^([A-Za-z_]\w*)\.(println|print)\s*\(([\s\S]*)\)$/.exec(s);if(l&&l[1]!=="System"){const m=l[3].trim(),c=e==="python"&&m!==""?Bn(m,n,a):m;return M(t)+`${l[1]}.${l[2]}(${c})${e==="javascript"?";":""} +`}const u=/^Files\.writeString\s*\(\s*(?:Path\.of|Paths\.get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,\s*([\s\S]+)\)$/.exec(s);if(u){const m=u[2].trim();return e==="python"?M(t)+`open(${u[1]}, "w", encoding="utf-8").write(${Bn(m,n,a)}) +`:M(t)+`require("fs").writeFileSync(${u[1]}, ${m}); +`}}function Dx(i){const e=new Set;for(const t of i)bn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&Gh(s[1]);r&&e.add(r.kind)}});return e}const Bx={Scanner:`class Scanner: def __init__(self, name): self.lines = open(name, encoding="utf-8").read().splitlines() def hasNextLine(self): @@ -96,7 +96,7 @@ ${o.out}${B(a)}} self.file.write(str(text)) def close(self): self.file.close() -`},Bx={Scanner:`class Scanner { +`},Mx={Scanner:`class Scanner { constructor(name) { this.lines = require("fs").readFileSync(name, "utf8").split(/\\r?\\n/); if (this.lines.at(-1) === "") this.lines.pop(); } hasNextLine() { return this.lines.length > 0; } nextLine() { return this.lines.shift(); } @@ -113,74 +113,74 @@ ${o.out}${B(a)}} print(text) { this.text += text; } close() { require("fs").writeFileSync(this.name, this.text); } } -`};function Lo(i,e){const t=Mx(i);if(t.size===0)return"";const n=e==="python"?Dx:Bx;return[...t].map(a=>n[a]).join(` +`};function Lo(i,e){const t=Dx(i);if(t.size===0)return"";const n=e==="python"?Bx:Mx;return[...t].map(a=>n[a]).join(` `)+` -`}function Zx(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return B(t)+"System.out.print("+o+`); -`;case"javascript":return B(t)+"process.stdout.write(String("+o+`)); -`;case"python":return B(t)+"print("+(o===""?"":Dn(o,n,a)+", ")+`end="") -`}}const r=Ix(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?B(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` -`:void 0;switch(e){case"java":return B(t)+"System.out.println("+r+`); -`;case"javascript":return B(t)+"console.log("+r+`); -`;case"python":return B(t)+"print("+Dn(r,n,a)+`) -`}}function m0(i){const e=i.map(Qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function Lx(i){const t=m0(i).split(";"),n=Hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Hh(i){const e=ye(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function Wx(i){const e=i.map(n=>Qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=Rh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Vh(i,e){let t=ye(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ye(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ye(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ye(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Wo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function Ex(i,e){const t=Wx(i);if(!t)return;const[n,a,s]=t,r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Ze(r[2],e)}`,condition:a,increment:s},u=ye(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Vh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Ze(r[2],e);let d=Ze(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Wo(d,1);else if(m<0&&h===">=")d=Wo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function Qh(i){const e=Qt(i).trim();if(e==="")return;const t=ye(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function Nx(i,e,t,n){var o;const a=Qh(i);if(!a)return;const s=Is(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return B(t)+zs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` -`;case"javascript":return r?B(t)+zs(`const ${a.name} = ${r}`)+` -`:B(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} -`;case"python":return r?B(t)+`${a.name} = ${sr(r,n)} # const ${s} -`:B(t)+`${a.name} = None # const ${s}, uninitialized -`}}function Fx(i){const e=Qt(i).trim();if(e===""||Kh(e))return;const t=ye(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function ar(i){const e=ye(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||qh(t)))return t.startsWith("(")&&Eo(t,0)===t.length-1?t.slice(1,-1).trim():t}function Eo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Jx(i,e){if(i[e]==="("){const a=Eo(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Eo(i,n);if(s<0)return-1;n=s+1}else return n}}function No(i,e){return c0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Jx(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!qh(u))continue;const m=No(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function sr(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=ar(t);return n!==void 0?`int(${sr(n,e)})`:Ze(t,e)}function c0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return c0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Uh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Dn(i,e,t){const n=Uh(i),a=s=>d0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Ze(i,e):n.map(s=>a(s)?s:`str(${Ze(s,e)})`).join(" + ")}function Yh(i,e,t=new Set){const n=Qt(i).trim(),a=ye(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ye(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Ze(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ye(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Ze(s[2],e)}`;const r=ye(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Uh(u);m=Dn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!d0(u.trim())&&!t.has(u.trim())&&(m=`str(${Ze(u,e)})`)}else l==="="&&ar(u)===void 0&&u.trim()!=="null"?m=Dn(u,e,t):m=l==="="?sr(u,e):Ze(u,e);return`${o} ${l} ${m}`}return Ze(n,e)}const Rx=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function $h(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function Xh(i){const e=ye(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function Kh(i){const e=ye(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function Gx(i){const e=ye(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const Nu=i=>i.replaceAll("{","[").replaceAll("}","]");function Fu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Hx(i,e,t){const n=Gx(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Fu(i.elementType,e)}))`:Nu(i.rhs):n?`[[${Fu(i.elementType,e)}] * ${Ze(n[1],t)} for _ in range(${Ze(n[0],t)})]`:Ze(Nu(i.rhs),t)}function eg(i,e){const t=i.trim();if(e){const a=Xh(t);return a!==void 0?`new Array(${a})`:$h(t)}const n=ar(t);return n!==void 0?`Math.floor(${eg(n,!1)})`:Rx(t)}function Vx(i,e,t){const n=i.trim();if(e){const a=Xh(n);return a!==void 0?`[None] * ${a}`:Ze($h(n),t)}return sr(n,t)}function Qx(i,e,t,n,a){if(e==="java")return;const s=Kh(i);if(s){const u=Hx(s,e,n);return e==="javascript"?B(t)+`let ${s.name} = ${u}; -`:B(t)+`${s.name} = ${u} -`}const r=Fx(i);if(!r)return;if(e==="javascript")return B(t)+zs(`let ${r.name} = ${eg(r.rhs,r.isArray)}`)+` -`;const l=!r.isArray&&ar(r.rhs)===void 0&&r.rhs.trim()!=="null"?Dn(r.rhs,n,a):Vx(r.rhs,r.isArray,n);return B(t)+`${r.name} = ${l} -`}function bn(i,e){for(const t of i){e(t),t.loopBody&&bn(t.loopBody,e);for(const n of t.cases??[])bn(n.elements,e)}}function qx(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return bn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=l0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=Qh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ye(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Fo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function ks(i){let e=!1;return bn(i.elements,t=>{t.type===T.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}const h0="import java.util.Arrays;";function g0(i){let e=!1,t=!1,n=!1,a=!1;return bn(i.elements,s=>{for(const r of s.textLines)/\bArrays\s*\./.test(r)&&(a=!0),/\bFiles\s*\./.test(r)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(r)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(r)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[],...a?[h0]:[]]}function Ux(i){return g0(i).some(e=>e!==h0)}function tg(i){let e=!1;return bn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function la(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||d0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function Y1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function Yx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=B(n)+(e==="python"?"pass":";")+` -`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Zo(o));r.length>0&&(a.out+=o0(r,e,n))}for(const r of s){if(r==="")continue;if(Zo(r)){a.out+=t.live?f0(n,t.live):Jh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?jx(r,n,l):void 0)??(e==="javascript"?Cx(r,n,l):void 0)??(e==="python"?Ax(r,n,l):void 0)??Ox(r,e,n,o,u)??Zx(r,e,n,o,u)??Nx(r,e,n,o)??Qx(r,e,n,o,u)??Sx(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Fo(m,o):m;continue}let c=r;wx(e)?c=zs(e==="javascript"?Fo(r,o):r):e==="python"&&(c=Yh(r,o,u)),c!==""&&(a.out+=B(n)+c+` -`)}}function fi(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=o0(t,n,s)),o!==void 0&&x0(t)){r.out+=B(s)+i+t1(o)+e;return}const u=Ua(t),m=a.jsIntVariables??new Set,c=n==="python"?Ze(u,m):n==="javascript"?Fo(u,m):u;r.out+=B(s)+i+c+e}function z1(i,e,t,n,a){const s=a.out.length;for(const o of i)rr(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=f0(n,t.live)),e!=="python")return;a.out.slice(s).split(` -`).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=B(n)+`pass +`}function Zx(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return M(t)+"System.out.print("+o+`); +`;case"javascript":return M(t)+"process.stdout.write(String("+o+`)); +`;case"python":return M(t)+"print("+(o===""?"":Bn(o,n,a)+", ")+`end="") +`}}const r=Ix(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?M(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` +`:void 0;switch(e){case"java":return M(t)+"System.out.println("+r+`); +`;case"javascript":return M(t)+"console.log("+r+`); +`;case"python":return M(t)+"print("+Bn(r,n,a)+`) +`}}function m0(i){const e=i.map(qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function Lx(i){const t=m0(i).split(";"),n=Hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Hh(i){const e=ye(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function Wx(i){const e=i.map(n=>qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=Rh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Vh(i,e){let t=ye(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ye(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ye(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ye(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Wo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function Ex(i,e){const t=Wx(i);if(!t)return;const[n,a,s]=t,r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Ze(r[2],e)}`,condition:a,increment:s},u=ye(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Vh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Ze(r[2],e);let d=Ze(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Wo(d,1);else if(m<0&&h===">=")d=Wo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function qh(i){const e=qt(i).trim();if(e==="")return;const t=ye(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function Nx(i,e,t,n){var o;const a=qh(i);if(!a)return;const s=Is(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return M(t)+zs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` +`;case"javascript":return r?M(t)+zs(`const ${a.name} = ${r}`)+` +`:M(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} +`;case"python":return r?M(t)+`${a.name} = ${sr(r,n)} # const ${s} +`:M(t)+`${a.name} = None # const ${s}, uninitialized +`}}function Fx(i){const e=qt(i).trim();if(e===""||Kh(e))return;const t=ye(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function ar(i){const e=ye(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||Uh(t)))return t.startsWith("(")&&Eo(t,0)===t.length-1?t.slice(1,-1).trim():t}function Eo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Jx(i,e){if(i[e]==="("){const a=Eo(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Eo(i,n);if(s<0)return-1;n=s+1}else return n}}function No(i,e){return c0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Jx(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!Uh(u))continue;const m=No(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function sr(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=ar(t);return n!==void 0?`int(${sr(n,e)})`:Ze(t,e)}function c0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return c0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Qh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Bn(i,e,t){const n=Qh(i),a=s=>d0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Ze(i,e):n.map(s=>a(s)?s:`str(${Ze(s,e)})`).join(" + ")}function Yh(i,e,t=new Set){const n=qt(i).trim(),a=ye(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ye(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Ze(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ye(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Ze(s[2],e)}`;const r=ye(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Qh(u);m=Bn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!d0(u.trim())&&!t.has(u.trim())&&(m=`str(${Ze(u,e)})`)}else l==="="&&ar(u)===void 0&&u.trim()!=="null"?m=Bn(u,e,t):m=l==="="?sr(u,e):Ze(u,e);return`${o} ${l} ${m}`}return Ze(n,e)}const Rx=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function $h(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function Xh(i){const e=ye(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function Kh(i){const e=ye(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function Gx(i){const e=ye(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const Nu=i=>i.replaceAll("{","[").replaceAll("}","]");function Fu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Hx(i,e,t){const n=Gx(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Fu(i.elementType,e)}))`:Nu(i.rhs):n?`[[${Fu(i.elementType,e)}] * ${Ze(n[1],t)} for _ in range(${Ze(n[0],t)})]`:Ze(Nu(i.rhs),t)}function eg(i,e){const t=i.trim();if(e){const a=Xh(t);return a!==void 0?`new Array(${a})`:$h(t)}const n=ar(t);return n!==void 0?`Math.floor(${eg(n,!1)})`:Rx(t)}function Vx(i,e,t){const n=i.trim();if(e){const a=Xh(n);return a!==void 0?`[None] * ${a}`:Ze($h(n),t)}return sr(n,t)}function qx(i,e,t,n,a){if(e==="java")return;const s=Kh(i);if(s){const u=Hx(s,e,n);return e==="javascript"?M(t)+`let ${s.name} = ${u}; +`:M(t)+`${s.name} = ${u} +`}const r=Fx(i);if(!r)return;if(e==="javascript")return M(t)+zs(`let ${r.name} = ${eg(r.rhs,r.isArray)}`)+` +`;const l=!r.isArray&&ar(r.rhs)===void 0&&r.rhs.trim()!=="null"?Bn(r.rhs,n,a):Vx(r.rhs,r.isArray,n);return M(t)+`${r.name} = ${l} +`}function bn(i,e){for(const t of i){e(t),t.loopBody&&bn(t.loopBody,e);for(const n of t.cases??[])bn(n.elements,e)}}function Ux(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return bn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=l0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=qh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ye(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Fo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function ks(i){let e=!1;return bn(i.elements,t=>{t.type===T.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}const h0="import java.util.Arrays;";function g0(i){let e=!1,t=!1,n=!1,a=!1;return bn(i.elements,s=>{for(const r of s.textLines)/\bArrays\s*\./.test(r)&&(a=!0),/\bFiles\s*\./.test(r)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(r)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(r)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[],...a?[h0]:[]]}function Qx(i){return g0(i).some(e=>e!==h0)}function tg(i){let e=!1;return bn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function la(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||d0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function Y1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function Yx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=M(n)+(e==="python"?"pass":";")+` +`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Zo(o));r.length>0&&(a.out+=o0(r,e,n))}for(const r of s){if(r==="")continue;if(Zo(r)){a.out+=t.live?f0(n,t.live):Jh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?jx(r,n,l):void 0)??(e==="javascript"?Cx(r,n,l):void 0)??(e==="python"?Ax(r,n,l):void 0)??Ox(r,e,n,o,u)??Zx(r,e,n,o,u)??Nx(r,e,n,o)??qx(r,e,n,o,u)??Sx(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Fo(m,o):m;continue}let c=r;wx(e)?c=zs(e==="javascript"?Fo(r,o):r):e==="python"&&(c=Yh(r,o,u)),c!==""&&(a.out+=M(n)+c+` +`)}}function fi(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=o0(t,n,s)),o!==void 0&&x0(t)){r.out+=M(s)+i+t1(o)+e;return}const u=Qa(t),m=a.jsIntVariables??new Set,c=n==="python"?Ze(u,m):n==="javascript"?Fo(u,m):u;r.out+=M(s)+i+c+e}function z1(i,e,t,n,a){const s=a.out.length;for(const o of i)rr(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=f0(n,t.live)),e!=="python")return;a.out.slice(s).split(` +`).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=M(n)+`pass `)}function $x(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===T.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Jo(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&yx(r[1].elements),m=u?void 0:$x(r[1].elements,t);if(o){fi(s?"elif ":"if ",`: -`,i.textLines,e,t,n,a),z1(r[0].elements,e,t,l,a),m?Jo(m,e,t,n,a,!0):u||(a.out+=B(n)+`else: +`,i.textLines,e,t,n,a),z1(r[0].elements,e,t,l,a),m?Jo(m,e,t,n,a,!0):u||(a.out+=M(n)+`else: `,z1(r[1].elements,e,t,l,a));return}if(fi(s?"} else if (":"if (",`) { -`,i.textLines,e,t,n,a),z1(r[0].elements,e,t,l,a),m){const c=a.out.length;Jo(m,e,t,n,a,!0),ig(t,m,a,c)}else u||(a.out+=B(n)+`} else { -`,z1(r[1].elements,e,t,l,a)),a.out+=B(n)+`} -`}function rr(i,e,t,n,a){const s=a.out.length;Xx(i,e,t,n,a),ig(t,i,a,s)}function Xx(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>z1(c,e,t,d,a),l=(c,d)=>fi(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=o0(i.textLines,e,c))};switch(i.type){case T.leerElement:a.out+=t.live?f0(n,t.live):Jh(n,e);return;case T.anweisung:case T.aufruf:Yx(i.textLines,e,t,n,a);return;case T.aussprung:{const c=Ua(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=B(n)+(c===""?`break +`,i.textLines,e,t,n,a),z1(r[0].elements,e,t,l,a),m){const c=a.out.length;Jo(m,e,t,n,a,!0),ig(t,m,a,c)}else u||(a.out+=M(n)+`} else { +`,z1(r[1].elements,e,t,l,a)),a.out+=M(n)+`} +`}function rr(i,e,t,n,a){const s=a.out.length;Xx(i,e,t,n,a),ig(t,i,a,s)}function Xx(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>z1(c,e,t,d,a),l=(c,d)=>fi(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=o0(i.textLines,e,c))};switch(i.type){case T.leerElement:a.out+=t.live?f0(n,t.live):Jh(n,e);return;case T.anweisung:case T.aufruf:Yx(i.textLines,e,t,n,a);return;case T.aussprung:{const c=Qa(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=M(n)+(c===""?`break `:`break # ${c} -`):a.out+=B(n)+(c===""?`break; +`):a.out+=M(n)+(c===""?`break; `:`break; // ${c} `);return}case T.verzweigung:Jo(i,e,t,n,a,!1);return;case T.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;fi(d+" = ",` -`,i.textLines,e,t,n,a),c.forEach((h,g)=>{const f=g===c.length-1;f&&g===0?a.out+=B(n)+"if True:"+Y1(h.name,e)+` -`:f?a.out+=B(n)+"else:"+Y1(h.name,e)+` -`:a.out+=B(n)+(g===0?"if ":"elif ")+d+" == "+la(h.name,e)+`: +`,i.textLines,e,t,n,a),c.forEach((h,g)=>{const f=g===c.length-1;f&&g===0?a.out+=M(n)+"if True:"+Y1(h.name,e)+` +`:f?a.out+=M(n)+"else:"+Y1(h.name,e)+` +`:a.out+=M(n)+(g===0?"if ":"elif ")+d+" == "+la(h.name,e)+`: `,o(h.elements,n+s)});return}fi(r?"match ":"switch (",r?`: `:`) { `,i.textLines,e,t,n,a,(m=t.live)==null?void 0:m.labels.selector),c.forEach((d,h)=>{const g=h===c.length-1;if(e==="java"){const f=g?"default -> { "+Y1(d.name,e)+` `:"case "+la(d.name,e)+` -> { -`;a.out+=B(n+s)+f,o(d.elements,n+s*2),a.out+=B(n+s)+`} -`}else if(r){const f=g?"case _:"+Y1(d.name,e):"case "+la(d.name,e)+":";a.out+=B(n+s)+f+` -`,o(d.elements,n+s*2)}else{const f=g?"default:"+Y1(d.name,e):"case "+la(d.name,e)+":";a.out+=B(n+s)+f+` -`,o(d.elements,n+s*2),a.out+=B(n+s*2)+`break; -`}}),r||(a.out+=B(n)+`} -`);return}case T.forSchleife:if(e==="java"){u();const c=t.live?ng(i.textLines,t.live.labels):m0(i.textLines);a.out+=B(n)+"for ("+c+`) { -`}else if(r){const c=t.jsIntVariables??new Set,d=Ex(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=B(n)+d.rangeLine+` -`;else if(d){u(),a.out+=B(n)+d.init+` -`,a.out+=B(n)+"while "+Ze(d.condition,c)+`: -`;for(const h of i.loopBody??[])rr(h,e,t,n+s,a);a.out+=B(n+s)+Yh(d.increment,c)+` -`;return}else t.live?a.out+=B(n)+eb(i.textLines,t.live.labels,c)+` +`;a.out+=M(n+s)+f,o(d.elements,n+s*2),a.out+=M(n+s)+`} +`}else if(r){const f=g?"case _:"+Y1(d.name,e):"case "+la(d.name,e)+":";a.out+=M(n+s)+f+` +`,o(d.elements,n+s*2)}else{const f=g?"default:"+Y1(d.name,e):"case "+la(d.name,e)+":";a.out+=M(n+s)+f+` +`,o(d.elements,n+s*2),a.out+=M(n+s*2)+`break; +`}}),r||(a.out+=M(n)+`} +`);return}case T.forSchleife:if(e==="java"){u();const c=t.live?ng(i.textLines,t.live.labels):m0(i.textLines);a.out+=M(n)+"for ("+c+`) { +`}else if(r){const c=t.jsIntVariables??new Set,d=Ex(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=M(n)+d.rangeLine+` +`;else if(d){u(),a.out+=M(n)+d.init+` +`,a.out+=M(n)+"while "+Ze(d.condition,c)+`: +`;for(const h of i.loopBody??[])rr(h,e,t,n+s,a);a.out+=M(n+s)+Yh(d.increment,c)+` +`;return}else t.live?a.out+=M(n)+e4(i.textLines,t.live.labels,c)+` `:l("for ",`: -`)}else{u();const c=t.live?Kx(i.textLines,t.live.labels):Lx(i.textLines);a.out+=B(n)+"for ("+c+`) { -`}o(i.loopBody??[],n+s),r||(a.out+=B(n)+`} +`)}else{u();const c=t.live?Kx(i.textLines,t.live.labels):Lx(i.textLines);a.out+=M(n)+"for ("+c+`) { +`}o(i.loopBody??[],n+s),r||(a.out+=M(n)+`} `);return;case T.whileSchleife:l(r?"while ":"while (",r?`: `:`) { -`),o(i.loopBody??[],n+s),r||(a.out+=B(n)+`} -`);return;case T.doUntilSchleife:{const c=t.live&&x0(i.textLines)?t1(t.live.labels.condition):Ua(i.textLines);if(r){a.out+=B(n)+`while True: -`;const d=n+s;o(i.loopBody??[],d),u(d);const h=c.includes(Ui)?c:Ze(c,t.jsIntVariables??new Set);a.out+=B(d)+"if not ("+h+`): -`,a.out+=B(d+s)+`break -`}else a.out+=B(n)+`do { -`,o(i.loopBody??[],n+s),u(),a.out+=B(n)+"} while ("+c+`); -`;return}case T.endlosschleife:{const c=Ua(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=B(n)+(d?`while True: +`),o(i.loopBody??[],n+s),r||(a.out+=M(n)+`} +`);return;case T.doUntilSchleife:{const c=t.live&&x0(i.textLines)?t1(t.live.labels.condition):Qa(i.textLines);if(r){a.out+=M(n)+`while True: +`;const d=n+s;o(i.loopBody??[],d),u(d);const h=c.includes(Qi)?c:Ze(c,t.jsIntVariables??new Set);a.out+=M(d)+"if not ("+h+`): +`,a.out+=M(d+s)+`break +`}else a.out+=M(n)+`do { +`,o(i.loopBody??[],n+s),u(),a.out+=M(n)+"} while ("+c+`); +`;return}case T.endlosschleife:{const c=Qa(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=M(n)+(d?`while True: `:`while True: # ${c} -`):a.out+=B(n)+(d?`while (true) { +`):a.out+=M(n)+(d?`while (true) { `:`while (true) /* ${c} */ { -`),o(i.loopBody??[],n+s),r||(a.out+=B(n)+`} -`);return}}}const Ui="",p0="",t1=i=>Ui+i+p0,f0=(i,e)=>B(i)+t1(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` -`,x0=i=>i.every(e=>e.trim()==="");function ng(i,e){return x0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Qt(i[a]??"");return s===""?t1(n):s}).join("; "):m0(i)}function Kx(i,e){const t=ng(i,e).split(";"),n=t[0].includes(Ui)?void 0:Hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function eb(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Qt(g)):[],r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ye(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Ze(r[2],t):t1(e.start),u=ye(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=t1(e.end);u&&(o===void 0||u[1]===o)&&(m=Ze(u[3],t),u[2]==="<="&&(m=Wo(m,1)));const c=o===void 0?void 0:Vh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??t1(e.selector)} in range(${d.join(", ")}):`}function Ro(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Ro(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Ro(o.elements,[...s,l],t))}),t}function ig(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` +`),o(i.loopBody??[],n+s),r||(a.out+=M(n)+`} +`);return}}}const Qi="",p0="",t1=i=>Qi+i+p0,f0=(i,e)=>M(i)+t1(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` +`,x0=i=>i.every(e=>e.trim()==="");function ng(i,e){return x0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=qt(i[a]??"");return s===""?t1(n):s}).join("; "):m0(i)}function Kx(i,e){const t=ng(i,e).split(";"),n=t[0].includes(Qi)?void 0:Hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function e4(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>qt(g)):[],r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ye(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Ze(r[2],t):t1(e.start),u=ye(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=t1(e.end);u&&(o===void 0||u[1]===o)&&(m=Ze(u[3],t),u[2]==="<="&&(m=Wo(m,1)));const c=o===void 0?void 0:Vh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??t1(e.selector)} in range(${d.join(", ")}):`}function Ro(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Ro(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Ro(o.elements,[...s,l],t))}),t}function ig(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` `).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function ag(i,e,t){const n={target:e,labels:t,paths:Ro(i.elements),spans:[]},a=r0(i,e,{includeEmptyElseBranch:!0,live:n}),s=kt(i.caption);let r="";if(e==="java"){const u=g0(i);for(const m of u)r+=m+` `;ks(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; `),r+=`Scanner scanner = new Scanner(System.in); @@ -195,24 +195,24 @@ ${o.out}${B(a)}} `),r+=Lo([i],"python"),s&&(r+=`def ${s.name}(${u}): `))}const o={out:""};z1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} `);const l=r.split(` -`).length-1;return{text:sg((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function sg(i,e){switch(e){case"javascript":return ib(No(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return tb(No(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return rb(i)}}function tb(i){for(let e=0;e<5;e++){const t=rg(nb(i),"python");if(t===i)break;i=t}return i}const Ju={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function nb(i){return b0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Ju)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=ab(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Ju[t]}(${n})`}})}function ib(i){for(let e=0;e<5;e++){const t=rg(b0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function rg(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function ab(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function b0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const ob=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function or(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),ob.has(t.toLowerCase())&&(t="_"+t),t)}function Ru(i,e,t={},n=[]){const a={...Nh,...t},s=or(e),r=[i,...n].filter((z,I,k)=>k.indexOf(z)===I).map(z=>({d:z,header:kt(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>Bo(z.d,z.header,"java",t,a.indentPerLevel)),l=kt(i.caption),u=r.some(z=>ks(z.d)),m=ws(i,"java",a),c=a.indentPerLevel*2,d=ks(i),h=d?lb(m):m,g=B(c),f=h.trim()===""?"":h.split(` +`).length-1;return{text:sg((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function sg(i,e){switch(e){case"javascript":return i4(No(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return t4(No(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return r4(i)}}function t4(i){for(let e=0;e<5;e++){const t=rg(n4(i),"python");if(t===i)break;i=t}return i}const Ju={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function n4(i){return b0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Ju)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=a4(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Ju[t]}(${n})`}})}function i4(i){for(let e=0;e<5;e++){const t=rg(b0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function rg(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function a4(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function b0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const o4=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function or(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),o4.has(t.toLowerCase())&&(t="_"+t),t)}function Ru(i,e,t={},n=[]){const a={...Nh,...t},s=or(e),r=[i,...n].filter((z,I,k)=>k.indexOf(z)===I).map(z=>({d:z,header:kt(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>Mo(z.d,z.header,"java",t,a.indentPerLevel)),l=kt(i.caption),u=r.some(z=>ks(z.d)),m=ws(i,"java",a),c=a.indentPerLevel*2,d=ks(i),h=d?l4(m):m,g=M(c),f=h.trim()===""?"":h.split(` `).map(z=>z.trim()===""?g:g+z).join(` `);let x="";const b=o.length>0&&(d||u),v=[...new Set([i,...r.map(z=>z.d)].flatMap(g0))],w=v.some(z=>z!==h0);(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const z of v)x+=z+` `;v.length&&(x+=` `),x+=`public class ${s} { -`,b&&(x+=B(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in); +`,b&&(x+=M(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in); -`),l||(x+=B(a.indentPerLevel)+`public static void main(String[] args)${w?" throws Exception":""} { -`,d&&!b&&(x+=B(c)+`Scanner scanner = new Scanner(System.in); +`),l||(x+=M(a.indentPerLevel)+`public static void main(String[] args)${w?" throws Exception":""} { +`,d&&!b&&(x+=M(c)+`Scanner scanner = new Scanner(System.in); `,f!==""&&(x+=` `)),x+=f,f!==""&&!f.endsWith(` `)&&(x+=` -`),x+=B(a.indentPerLevel)+`} +`),x+=M(a.indentPerLevel)+`} `);for(const[z,I]of o.entries())x+=(z>0||!l?` `:"")+I;return x+=`} -`,x}function lb(i){const e=i.split(` +`,x}function l4(i){const e=i.split(` `);let t=0;for(e[t]==="// import java.util.Scanner;"&&t++;t=e.length?"":e.slice(t).join(` -`)}const yn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function ua(i){try{return localStorage.getItem(i)}catch{return null}}function ma(i,e){try{localStorage.setItem(i,e)}catch{}}const ub=()=>p("web_run_stopped_loop"),og=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function mb(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(ub())}); })(); ${a}++) {`})}function cb(i){return mb(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const db=` +`)}const yn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function ua(i){try{return localStorage.getItem(i)}catch{return null}}function ma(i,e){try{localStorage.setItem(i,e)}catch{}}const u4=()=>p("web_run_stopped_loop"),og=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function m4(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(u4())}); })(); ${a}++) {`})}function c4(i){return m4(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const d4=` let answer let lines = [] // Text von \`process.stdout.write\` ohne neue Zeile (wie \`System.out.print\`). @@ -257,7 +257,7 @@ onmessage = async (e) => { send('error', String(err)) } } -`,Or=2e3;class hb{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=ua(yn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=ua(yn.javaMode)==="class"?"class":"snippet",this.comments=ua(yn.comments)==="true",this.emptyElse=ua(yn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Ru(e,this.classStem(),t,this.subprograms()):ws(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return ys(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=` +`,Or=2e3;class h4{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=ua(yn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=ua(yn.javaMode)==="class"?"class":"snippet",this.comments=ua(yn.comments)==="true",this.emptyElse=ua(yn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Ru(e,this.classStem(),t,this.subprograms()):ws(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return ys(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`

${Ne(p("codegen_placeholder_title"))}

@@ -287,12 +287,12 @@ onmessage = async (e) => {

${Ne(p("codegen_generated_hint"))}

- `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,ma(yn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ma(yn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ma(yn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ma(yn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=or(this.classStem()),s=Ru(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=cb(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([db],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(og())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>Or&&(this.droppedLines+=this.outputLines.length-Or,this.outputLines.splice(0,this.outputLines.length-Or)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` + `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,ma(yn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ma(yn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ma(yn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ma(yn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=or(this.classStem()),s=Ru(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=c4(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([d4],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(og())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>Or&&(this.droppedLines+=this.outputLines.length-Or,this.outputLines.splice(0,this.outputLines.length-Or)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` `:"";this.runOutput.textContent=t+this.outputLines.join(` `)+(this.outputLines.length?` -`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Me=(i,e=!1)=>``,oe={newFile:Me(''),open:Me(''),save:Me(''),undo:Me(''),redo:Me(''),cut:Me(''),copy:Me(''),paste:Me(''),trash:Me(''),share:Me(''),book:Me(''),code:Me(''),play:Me('',!0),step:Me(''),indent:Me(''),stop:Me('',!0),folder:Me(''),newFolder:Me(''),diagram:Me(''),fileText:Me('')},gb="visustruct.learn.progress",Mr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function pb(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(Mr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&Mr[i.view.lesson]?{...i.view,lesson:Mr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function fb(){try{localStorage.removeItem(gb)}catch{}}const lg=()=>({lessons:{},exercises:{}});fb();let tt=lg();const Go=new Set;function ca(){for(const i of Go)i()}const Gu="visustruct-lernstand";function ug(i,e){return i||e||void 0}function xb(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:ug(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function bb(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=xb(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:ug(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const be={lesson(i){return tt.lessons[i]??{step:0}},updateLesson(i,e){tt.lessons[i]={...be.lesson(i),...e},ca()},exercise(i){return tt.exercises[i]??{}},updateExercise(i,e){tt.exercises[i]={...be.exercise(i),...e},ca()},resetExercise(i){delete tt.exercises[i],ca()},view(){return tt.view},hasContent(){return Object.values(tt.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(tt.exercises).length>0},setView(i){tt.view=i,ca()},onChange(i){return Go.add(i),()=>Go.delete(i)},toFile(){return JSON.stringify({format:Gu,version:1,saved:new Date().toISOString(),lessons:tt.lessons,exercises:tt.exercises,view:tt.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==Gu)return!1;const n=pb({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return tt=e?{...bb(tt,n),view:n.view??tt.view}:n,!0},clear(){tt=lg()}};function Hu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Vu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function vb(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Vu(i.name)&&Vu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function yb(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function wb(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function zb(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Un=10;function Ib(i){let e=i.replace(/\r/g,"").split(` -`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Un,r=e.length*Un,o=(m,c)=>({x:-s/2+(m+.5)*Un,y:r/2-(c+.5)*Un}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Qu?l.colors.push({at:g,color:Qu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Qu={r:"red",g:"green",b:"blue",y:"yellow"},$1=(i,e)=>Math.abs(i.x-e.x)<=Un/2&&Math.abs(i.y-e.y)<=Un/2,qu=10,Uu=9,kb=300,g1=8,Sb=[-3.6,-1.2,1.2,3.6],Tb=2.5,_b=20,jb=12,v0=100,Oi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Yu=i=>i*Math.PI/180,p1=i=>({x:Math.sin(Yu(i)),y:Math.cos(Yu(i))}),da=()=>Array.from({length:Ph},()=>{}),$u=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class Ss{constructor(e=Oi){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",da());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=da(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Un/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=p1(this.pose.heading),t={x:this.pose.x+e.x*g1,y:this.pose.y+e.y*g1};return(this.setup.goals??[]).some(n=>$1(this.pose,n)||$1(t,n))||(this.setup.targets??[]).some(n=>$1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Xu(e.args[0]),Xu(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=da().map(()=>$u(e.args));return;case"ledOff":this.leds=da();return;case"ledColor":this.leds[e.args[0]]=$u(hs[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*_b);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*g1+t.x*a,y:this.pose.y+e.y*g1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>$1(r,l))||this.setup.lines.some(l=>Ab(r,l)<=Tb/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=p1(this.pose.heading),t={x:this.pose.x+e.x*g1,y:this.pose.y+e.y*g1};return(n=(this.setup.colors??[]).find(a=>$1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=Cb(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Ku(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Cb(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function Ab(i,e){let t=1/0;for(let n=0;n+10&&o.tick(v0),s.robotSensors={...o.sensors(),...Zb(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?ps(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:Mh(m.robotActions.filter(d=>!Db.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:ps(s.state.robotActions),tooManySteps:!0}}function Zb(i,e){const t=Math.floor(e/Ob);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function mg(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` -`)}function ha(i,e){return i.length!==e.length?!1:i.every((t,n)=>em(t)===em(e[n]))}function Lb(i,e){const t=n=>n.join("").replace(/\s+/g,"");return i.length>0&&i.length{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=Bb(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ha(mg((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ha(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ha(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ha(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Eb(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Ho(i){const e=[T.forSchleife,T.whileSchleife,T.doUntilSchleife,T.endlosschleife];let t=0;for(const n of i){const a=Math.max(Ho(n.loopBody??[]),...(n.cases??[]).map(s=>Ho(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Mi extends Error{}function Nb(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();Ts(o,Fb(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Mi(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Mi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Fb(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Jb(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Mi(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Mi(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function Rb(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(Ts(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(Ts(i,e));return s!==t[t.length-1]&&t.push(s),t}function Gb(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function Hb(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=Gb(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:Ts(o,l)}}function Vb(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Qb=`--- +`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const De=(i,e=!1)=>``,oe={newFile:De(''),open:De(''),save:De(''),undo:De(''),redo:De(''),cut:De(''),copy:De(''),paste:De(''),trash:De(''),share:De(''),book:De(''),code:De(''),play:De('',!0),step:De(''),indent:De(''),stop:De('',!0),folder:De(''),newFolder:De(''),diagram:De(''),fileText:De('')},g4="visustruct.learn.progress",Dr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function p4(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(Dr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&Dr[i.view.lesson]?{...i.view,lesson:Dr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function f4(){try{localStorage.removeItem(g4)}catch{}}const lg=()=>({lessons:{},exercises:{}});f4();let tt=lg();const Go=new Set;function ca(){for(const i of Go)i()}const Gu="visustruct-lernstand";function ug(i,e){return i||e||void 0}function x4(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:ug(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function b4(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=x4(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:ug(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const be={lesson(i){return tt.lessons[i]??{step:0}},updateLesson(i,e){tt.lessons[i]={...be.lesson(i),...e},ca()},exercise(i){return tt.exercises[i]??{}},updateExercise(i,e){tt.exercises[i]={...be.exercise(i),...e},ca()},resetExercise(i){delete tt.exercises[i],ca()},view(){return tt.view},hasContent(){return Object.values(tt.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(tt.exercises).length>0},setView(i){tt.view=i,ca()},onChange(i){return Go.add(i),()=>Go.delete(i)},toFile(){return JSON.stringify({format:Gu,version:1,saved:new Date().toISOString(),lessons:tt.lessons,exercises:tt.exercises,view:tt.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==Gu)return!1;const n=p4({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return tt=e?{...b4(tt,n),view:n.view??tt.view}:n,!0},clear(){tt=lg()}};function Hu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Vu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function v4(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Vu(i.name)&&Vu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function y4(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function w4(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function z4(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Qn=10;function I4(i){let e=i.replace(/\r/g,"").split(` +`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,x)=>"^>v<".includes(g)?h===m>>1&&x===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Qn,r=e.length*Qn,o=(m,c)=>({x:-s/2+(m+.5)*Qn,y:r/2-(c+.5)*Qn}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in qu?l.colors.push({at:g,color:qu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const qu={r:"red",g:"green",b:"blue",y:"yellow"},$1=(i,e)=>Math.abs(i.x-e.x)<=Qn/2&&Math.abs(i.y-e.y)<=Qn/2,Uu=10,Qu=9,k4=300,g1=8,S4=[-3.6,-1.2,1.2,3.6],T4=2.5,_4=20,j4=12,v0=100,Oi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Yu=i=>i*Math.PI/180,p1=i=>({x:Math.sin(Yu(i)),y:Math.cos(Yu(i))}),da=()=>Array.from({length:Ph},()=>{}),$u=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class Ss{constructor(e=Oi){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",da());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=da(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Qn/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=p1(this.pose.heading),t={x:this.pose.x+e.x*g1,y:this.pose.y+e.y*g1};return(this.setup.goals??[]).some(n=>$1(this.pose,n)||$1(t,n))||(this.setup.targets??[]).some(n=>$1(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[Xu(e.args[0]),Xu(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=da().map(()=>$u(e.args));return;case"ledOff":this.leds=da();return;case"ledColor":this.leds[e.args[0]]=$u(hs[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*_4);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*g1+t.x*a,y:this.pose.y+e.y*g1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>$1(r,l))||this.setup.lines.some(l=>A4(r,l)<=T4/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=p1(this.pose.heading),t={x:this.pose.x+e.x*g1,y:this.pose.y+e.y*g1};return(n=(this.setup.colors??[]).find(a=>$1(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=C4(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Ku(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function C4(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function A4(i,e){let t=1/0;for(let n=0;n+10&&o.tick(v0),s.robotSensors={...o.sensors(),...Z4(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?ps(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:Dh(m.robotActions.filter(d=>!B4.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:ps(s.state.robotActions),tooManySteps:!0}}function Z4(i,e){const t=Math.floor(e/O4);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function mg(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` +`)}function ha(i,e){return i.length!==e.length?!1:i.every((t,n)=>em(t)===em(e[n]))}function L4(i,e){const t=n=>n.join("").replace(/\s+/g,"");return i.length>0&&i.length{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=M4(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ha(mg((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ha(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||ha(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ha(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function E4(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Ho(i){const e=[T.forSchleife,T.whileSchleife,T.doUntilSchleife,T.endlosschleife];let t=0;for(const n of i){const a=Math.max(Ho(n.loopBody??[]),...(n.cases??[]).map(s=>Ho(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Di extends Error{}function N4(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();Ts(o,F4(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Di(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Di(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function F4(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function J4(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Di(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Di(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function R4(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(Ts(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(Ts(i,e));return s!==t[t.length-1]&&t.push(s),t}function G4(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function H4(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=G4(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:Ts(o,l)}}function V4(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const q4=`--- titel: Was ist ein Struktogramm? bereich: Erste Schritte kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. @@ -696,7 +696,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Ein Pfeil > Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. ::: -`,qb=`--- +`,U4=`--- titel: Der Editor bereich: Erste Schritte kurz: Elemente einfügen, Text eingeben, verschieben und löschen. @@ -882,7 +882,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] input: "Guten Tag" > Ohne Anführungszeichen wird Guten Tag als Name einer Variablen verstanden. ::: -`,Ub=`--- +`,Q4=`--- titel: Speichern, Öffnen, Exportieren bereich: Erste Schritte kurz: Dateien sichern, deinen Workspace nutzen, mehrere Diagramme öffnen und als Bild oder PDF weitergeben. @@ -1044,7 +1044,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Direkt im Workspace ohne Unterordner > VisuStruct legt für jeden Tag automatisch einen Datumsordner an. So bleiben die Programme nach Stunden sortiert. ::: -`,Yb=`--- +`,Y4=`--- titel: Variablen und Datentypen bereich: Grundlagen kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und rechnen. @@ -1440,7 +1440,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Double preis = 2.5 > Kommazahlen schreibst du mit Punkt, und am Ende steht ein Semikolon. ::: -`,$b=`--- +`,$4=`--- titel: Sequenz bereich: Grundlagen kurz: Schritte nacheinander ausführen, auf die Reihenfolge achten und Werte tauschen. @@ -1693,7 +1693,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Mit einem Doppelpunkt : > Fehlt das Semikolon, zeigt VisuStruct unter dem Code einen Hinweis. ::: -`,Xb=`--- +`,X4=`--- titel: Eingabe und Ausgabe bereich: Grundlagen kurz: Werte abfragen, Ergebnisse anzeigen und das EVA-Prinzip anwenden. @@ -2125,7 +2125,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Bei der nächsten Leerzeile > Darum kann ein Kommentar mit \`/*\` über mehrere Zeilen gehen. Ein Kommentar mit \`//\` endet dagegen am Zeilenende. ::: -`,Kb=`--- +`,K4=`--- titel: Simulation und Schreibtischtest bereich: Grundlagen kurz: Ein Struktogramm Schritt für Schritt ausführen, von Hand nachrechnen und Fehler finden. @@ -2489,7 +2489,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] Logikfehler > Es gibt keine Meldung, das Ergebnis ist trotzdem falsch. So einen Fehler findest du nur mit deiner Erwartung und dem Schreibtischtest. ::: -`,e4=`--- +`,eb=`--- titel: Verzweigung bereich: Grundlagen kurz: Mit einer Bedingung entscheiden, welcher von zwei Wegen ausgeführt wird. @@ -2857,7 +2857,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Hinter einem Semikolon > \`if (alter >= 18) { … }\`: Die runden Klammern gehören zur Bedingung, die geschweiften zum Zweig. ::: -`,t4=`--- +`,tb=`--- titel: Bedingungen verknüpfen bereich: Grundlagen kurz: Mehrere Bedingungen mit und, oder und nicht verbinden und Wertebereiche prüfen. @@ -3184,7 +3184,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] if (alter >= 12 || alter < 18) > Jeder Vergleich steht für sich, verbunden mit \`&&\`. ::: -`,n4=`--- +`,nb=`--- titel: Fallauswahl bereich: Grundlagen kurz: Je nach Wert einer Variablen einen von vielen Fällen ausführen. @@ -3513,7 +3513,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] default - [ ] case 0 ::: -`,i4=`--- +`,ib=`--- titel: While-Schleife bereich: Grundlagen kurz: Schritte wiederholen, solange eine Bedingung wahr ist. @@ -3872,7 +3872,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] while (zahl > 0); > Die Bedingung steht in runden Klammern, danach öffnet \`{\` den Rumpf. ::: -`,a4=`--- +`,ab=`--- titel: Do-while-Schleife bereich: Grundlagen kurz: Erst ausführen, dann prüfen: Schleifen mit mindestens einem Durchlauf. @@ -4150,7 +4150,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] } until (bedingung); > Nach der Bedingung kommt ein Semikolon. ::: -`,s4=`--- +`,sb=`--- titel: For-Schleife bereich: Grundlagen kurz: Mit Start, Bedingung und Schritt eine feste Anzahl von Durchläufen zählen. @@ -4487,7 +4487,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] i wird ausgegeben. > \`i++\` ist die Kurzform von \`i = i + 1\`. ::: -`,r4=`--- +`,rb=`--- titel: Verschachteln bereich: Grundlagen kurz: Verzweigungen in Schleifen und Schleifen in Schleifen kombinieren. @@ -4791,7 +4791,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] An den geschweiften Klammern und der Einrückung - [ ] An den Semikolons ::: -`,o4=`--- +`,ob=`--- titel: Arrays bereich: Grundlagen kurz: Viele Werte unter einem Namen speichern, mit dem Index darauf zugreifen und sie mit einer Schleife durchlaufen. @@ -5152,7 +5152,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] int zahlen = [1, 2, 3]; - [ ] array zahlen = (1, 2, 3); ::: -`,l4=`--- +`,lb=`--- titel: Zweidimensionale Arrays bereich: Grundlagen kurz: Werte in Zeilen und Spalten speichern, wie die Sitze in einem Kinosaal, und mit zwei verschachtelten Schleifen durchlaufen. @@ -5469,7 +5469,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 5, die Zahl der Plätze - [ ] 15, alle Plätze zusammen ::: -`,u4=`--- +`,ub=`--- titel: Zeichenketten bereich: Grundlagen kurz: Mit Texten arbeiten, also einzelne Zeichen lesen, Teile herausschneiden, suchen, vergleichen und zerlegen. @@ -5995,7 +5995,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] eine Fehlermeldung > parseInt macht aus dem Text eine Zahl. Danach rechnet Java ganz normal. ::: -`,m4=`--- +`,mb=`--- titel: Aufruf und Aussprung bereich: Grundlagen kurz: Große Aufgaben in Unterprogramme zerlegen und Schleifen vorzeitig verlassen. @@ -6478,7 +6478,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] return > void heißt „leer“: Die Methode macht etwas, gibt aber keinen Wert zurück. ::: -`,c4=`--- +`,cb=`--- titel: Suchen und Sortieren bereich: Grundlagen kurz: Mit Spielkarten verstehen, wie lineare und binäre Suche und Bubblesort arbeiten und warum manche Verfahren viel schneller sind. @@ -6829,7 +6829,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Eine While-Schleife kann keine Arrays durchlaufen. > Die Karte kann mehrmals vorkommen. Darum gehst du alle Karten bis zum Ende durch. ::: -`,d4=`--- +`,db=`--- titel: Struktogramm und Code bereich: Vom Struktogramm zum Code kurz: Alle Elemente in Java auf einen Blick, Code erzeugen, im Bereich Code Java schreiben, ausführen und Fehler suchen. @@ -7301,7 +7301,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Zeile 3 wird als Nächstes ausgeführt. > Der Haltepunkt ist ein runder roter Punkt, die nächste Zeile ist gelb. Eine rote Zeilennummer zeigt einen Syntaxfehler oder einen Laufzeitfehler. ::: -`,h4=`--- +`,hb=`--- titel: Python und JavaScript bereich: Vom Struktogramm zum Code kurz: Python- und JavaScript-Code aus dem Struktogramm erzeugen und JavaScript direkt im Browser ausführen. @@ -7541,7 +7541,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Es wird Summe: ausgegeben. > Mit str(summe) wird aus der Zahl ein Text. ::: -`,g4=`--- +`,gb=`--- titel: Wenn das Programm abstürzt: try und catch bereich: Fehler abfangen kurz: Mit echtem Java Fehlermeldungen lesen und Abstürze mit try und catch abfangen. @@ -7834,7 +7834,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ArithmeticException -> Teilen durch 0 = NumberFormatException -> Text ist keine Zahl ::: -`,p4=`--- +`,pb=`--- titel: Text einlesen und speichern bereich: Dateien kurz: Mit Scanner eine Textdatei Zeile für Zeile lesen und mit PrintWriter eine Datei speichern. @@ -8088,7 +8088,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = println(text) -> schreibt eine Zeile = close() -> schließt die Datei ::: -`,f4=`--- +`,fb=`--- titel: Zeile für Zeile mit BufferedReader bereich: Dateien kurz: Mit BufferedReader und readLine lesen, bis null kommt, und mit Files eine ganze Datei auf einmal lesen. @@ -8344,7 +8344,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Files.readString -> kleine Dateien auf einmal = Scanner -> Zahlen und Wörter lesen ::: -`,x4=`--- +`,xb=`--- titel: Tabellen als CSV bereich: Dateien kurz: Eine Tabelle als CSV-Datei lesen, jede Zeile mit split zerlegen und mit den Zahlen rechnen. @@ -8568,7 +8568,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Datensatz -> eine Zeile mit Werten = Trennzeichen -> trennt die Spalten, meist ; ::: -`,b4=`--- +`,bb=`--- titel: Daten als JSON bereich: Dateien kurz: JSON-Dateien verstehen, Werte mit indexOf und substring herausholen und selbst JSON schreiben. @@ -8793,7 +8793,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = [ ] -> eine Liste = : -> trennt Schlüssel und Wert ::: -`,v4=`--- +`,vb=`--- titel: Formate im Vergleich bereich: Dateien kurz: Dieselben Daten als txt, CSV und JSON vergleichen, das passende Format wählen und eine Datei in ein anderes Format umwandeln. @@ -8968,7 +8968,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = die Notenliste der Klasse -> CSV = ein Spielstand mit Listen -> JSON ::: -`,y4=`--- +`,yb=`--- titel: Dein erstes Fenster bereich: Fenster mit Swing kurz: Mit Java und Swing ein eigenes Fenster öffnen, Zeile für Zeile erklärt. @@ -9190,7 +9190,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Sie stehen in geschweiften Klammern. - [ ] Sie enden mit Window. ::: -`,w4=`--- +`,wb=`--- titel: Ein Knopf im Fenster bereich: Fenster mit Swing kurz: Einen Knopf ins Fenster legen und mit einem Layout ordentlich anordnen. @@ -9406,7 +9406,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Auf dem Knopf steht „Ich wurde geklickt“. > Was beim Klick passieren soll, lernst du in der nächsten Lektion. ::: -`,z4=`--- +`,zb=`--- titel: Der Knopf reagiert bereich: Fenster mit Swing kurz: Mit einem ActionListener festlegen, was beim Klick passiert. @@ -9748,7 +9748,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = setText -> Beschriftung ändern = setVisible(true) -> Fenster zeigen ::: -`,I4=`--- +`,Ib=`--- titel: Zahl verdoppeln im Fenster bereich: Fenster mit Swing kurz: Beschriftung, Textfeld und Knopf mit einem GridLayout anordnen und mit dem Text im Textfeld rechnen. @@ -10029,7 +10029,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = JButton -> Knopf = GridLayout -> Anordnung im Gitter ::: -`,k4=`--- +`,kb=`--- titel: Klickzähler mit Reset bereich: Fenster mit Swing kurz: Zwei Knöpfe ändern dieselbe Zahl: eine Variable für die ganze Klasse anlegen. @@ -10261,7 +10261,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Es setzt das Fenster in die Mitte des Bildschirms. - [ ] Es macht die Schrift größer. ::: -`,S4=`--- +`,Sb=`--- titel: Eine Ampel mit Farben bereich: Fenster mit Swing kurz: Hintergrundfarben setzen und mit einer Zustandsvariable eine Ampel weiterschalten. @@ -10537,7 +10537,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 3 > Nach phase++ ist sie 3, das ist größer als 2, also wird sie 0. ::: -`,T4=`--- +`,Tb=`--- titel: Notenrechner im Fenster bereich: Fenster mit Swing kurz: Punkte eingeben, mit else if die Note bestimmen und falsche Eingaben abfangen. @@ -10813,7 +10813,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] punkte >= 0 || punkte <= 100 > Eine Zahl kann nicht gleichzeitig kleiner als 0 und größer als 100 sein, deshalb braucht es oder. ::: -`,_4=`--- +`,_b=`--- titel: Ein Taschenrechner bereich: Fenster mit Swing kurz: Zwei Spalten mit GridLayout, vier Rechenknöpfe und die Division durch 0 abfangen. @@ -11084,7 +11084,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Spalte für Spalte, erst ganz links von oben nach unten - [ ] Zufällig ::: -`,j4=`--- +`,jb=`--- titel: Zahlenraten bereich: Fenster mit Swing kurz: Ein Spiel mit Zufallszahl, Versuchszähler und einem Knopf, der sich am Ende abschaltet. @@ -11240,7 +11240,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] 7 > Jeder Tipp halbiert den Bereich, und 2 hoch 7 = 128 ist größer als 100. ::: -`,C4=`--- +`,Cb=`--- titel: Viele Knöpfe, ein Zuhörer bereich: Fenster mit Swing kurz: Ein Zuhörer für viele Knöpfe, mit getActionCommand und getSource herausfinden, welcher Knopf geklickt wurde. @@ -11545,7 +11545,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ActionEvent -> das Ereignis e mit den Infos zum Klick = JPanel -> eine Fläche mit eigenem Layout ::: -`,A4=`--- +`,Ab=`--- titel: Innere Klassen bereich: Fenster mit Swing kurz: Einen Zuhörer als benannte innere Klasse, als anonyme Klasse und als Lambda schreiben und wissen, wer was sehen darf. @@ -11777,7 +11777,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = new ActionListener() { … } -> anonyme Klasse = der Pfeil hinter e -> Lambda ::: -`,P4=`--- +`,Pb=`--- titel: Zwei Reiter bereich: Fenster mit Swing kurz: Ein Fenster mit zwei Reitern bauen, Daten von einem Reiter zum anderen bringen und die Liste als Textdatei speichern. @@ -12058,7 +12058,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = JPanel -> die Fläche eines Reiters = JTextArea -> ein Textbereich mit mehreren Zeilen ::: -`,O4=`--- +`,Ob=`--- titel: Model View Controller bereich: Fenster mit Swing kurz: Den Klickzähler in Model, View und Controller zerlegen und verstehen, wer mit wem redet. @@ -12473,7 +12473,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ZahlAnzeige mit aktualisieren(int wert) -> View = der Zuhörer am Knopf -> Controller ::: -`,M4=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim +`,Db=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim Hovern oder Antippen seine Erklärung. Steht er im Schritt fett, wird er gerade erklärt und deshalb nicht markiert. \`auch:\` nennt weitere Formen, die ebenfalls erkannt werden. Groß- und Kleinschreibung zählt. @@ -12590,6 +12590,13 @@ Eine Variable, die in einer Schleife mitzählt, meistens i. auch: Endlosschleifen Eine Schleife, deren Bedingung nie falsch wird. Sie hört nie von selbst auf. +### Merker +Eine Variable vom Typ boolean, die mit false anfängt und auf true gesetzt wird, sobald etwas passiert ist. + +### Zustandsautomat +auch: Zustandsautomaten, Zustandsvariable, Zustandsvariablen +Ein Programm, das immer in genau einem Zustand ist und nach festen Regeln in den nächsten Zustand wechselt, z. B. eine Ampel. + ### Array auch: Arrays Eine Reihe von Fächern mit einem gemeinsamen Namen und demselben Datentyp. Im Lehrplan heißt es auch Feld. @@ -12724,7 +12731,7 @@ Befehle als Zahlen, die der Prozessor direkt ausführt. Jede Prozessorart hat ih ### JIT-Compiler auch: JIT Ein Teil der JVM, der oft benutzten Bytecode während des Ausführens („just in time“) in Maschinencode übersetzt. Dadurch wird Java schneller. -`,D4=`## Grundbausteine +`,Bb=`## Grundbausteine ### Anweisung @@ -12893,7 +12900,7 @@ for (int i = 1; i <= 10; i++) { \`\`\` Gut für: die Aufgabenstellung, die Einteilung in Eingabe, Verarbeitung und Ausgabe, eine Erklärung, das Ende eines Blocks hinter \`}\`, die erwartete Ausgabe und Notizen fürs nächste Mal. -`,B4=`--- +`,Mb=`--- titel: What is a structure chart? bereich: First steps kurz: Show and read algorithms as a series of clear steps. @@ -13290,7 +13297,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] An arrow > Everything between WHILE and END WHILE is indented and is repeated. ::: -`,Z4=`--- +`,Zb=`--- titel: The editor bereich: First steps kurz: Insert elements, type text, move and delete. @@ -13476,7 +13483,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] input: "Good morning" > Without quotation marks, Good morning is understood as the name of a variable. ::: -`,L4=`--- +`,Lb=`--- titel: Save, open, export bereich: First steps kurz: Keep your files safe, use your workspace, open several diagrams and share them as an image or PDF. @@ -13638,7 +13645,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Directly in the workspace without a subfolder > VisuStruct automatically creates a date folder for each day. That keeps the programs sorted by lesson. ::: -`,W4=`--- +`,Wb=`--- titel: Variables and data types bereich: Basics kurz: Store values, get to know the data types int, double, String and boolean, and calculate. @@ -14034,7 +14041,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Double price = 2.5 > Decimal numbers use a point, and the line ends with a semicolon. ::: -`,E4=`--- +`,Eb=`--- titel: Sequence bereich: Basics kurz: Run steps one after another, watch the order and swap values. @@ -14287,7 +14294,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] With a colon : > If the semicolon is missing, VisuStruct shows a hint below the code. ::: -`,N4=`--- +`,Nb=`--- titel: Input and output bereich: Basics kurz: Ask for values, show results and use the IPO model. @@ -14719,7 +14726,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] At the next empty line > That is why a comment with \`/*\` can span several lines. A comment with \`//\`, on the other hand, ends at the end of the line. ::: -`,F4=`--- +`,Fb=`--- titel: Simulation and desk check bereich: Basics kurz: Run a structure chart step by step, work it out by hand and find mistakes. @@ -15083,7 +15090,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] Logic error > There is no message, but the result is still wrong. You only find an error like this with your expectation and a desk check. ::: -`,J4=`--- +`,Jb=`--- titel: Branch bereich: Basics kurz: Use a condition to decide which of two paths runs. @@ -15451,7 +15458,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] After a semicolon > \`if (age >= 18) { … }\`: the round brackets belong to the condition, the curly ones to the branch. ::: -`,R4=`--- +`,Rb=`--- titel: Combining conditions bereich: Basics kurz: Join several conditions with and, or and not, and check ranges of values. @@ -15778,7 +15785,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] if (age >= 12 || age < 18) > Each comparison stands on its own, joined with \`&&\`. ::: -`,G4=`--- +`,Gb=`--- titel: Switch bereich: Basics kurz: Run one of many cases, depending on the value of a variable. @@ -16107,7 +16114,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] default - [ ] case 0 ::: -`,H4=`--- +`,Hb=`--- titel: While loop bereich: Basics kurz: Repeat steps as long as a condition is true. @@ -16466,7 +16473,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] while (number > 0); > The condition is in round brackets, then \`{\` opens the body. ::: -`,V4=`--- +`,Vb=`--- titel: Do-while loop bereich: Basics kurz: Run first, check afterwards: loops with at least one pass. @@ -16744,7 +16751,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] } until (condition); > A semicolon follows the condition. ::: -`,Q4=`--- +`,qb=`--- titel: For loop bereich: Basics kurz: Count a fixed number of passes with Init, Condition and Step. @@ -17081,7 +17088,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] i is output. > \`i++\` is short for \`i = i + 1\`. ::: -`,q4=`--- +`,Ub=`--- titel: Nesting bereich: Basics kurz: Combine branches inside loops and loops inside loops. @@ -17385,7 +17392,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] By the curly brackets and the indentation - [ ] By the semicolons ::: -`,U4=`--- +`,Qb=`--- titel: Arrays bereich: Basics kurz: Store many values under one name, reach them with the index and go through them with a loop. @@ -17746,7 +17753,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] int numbers = [1, 2, 3]; - [ ] array numbers = (1, 2, 3); ::: -`,Y4=`--- +`,Yb=`--- titel: Two-dimensional arrays bereich: Basics kurz: Store values in rows and columns, like the seats in a cinema, and go through them with two nested loops. @@ -18063,7 +18070,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 5, the number of seats - [ ] 15, all seats together ::: -`,$4=`--- +`,$b=`--- titel: Strings bereich: Basics kurz: Work with text: read single characters, cut out parts, search, compare and split. @@ -18587,7 +18594,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] an error message > parseInt turns the text into a number. After that Java calculates as usual. ::: -`,X4=`--- +`,Xb=`--- titel: Call and break bereich: Basics kurz: Split big tasks into subprograms and leave loops early. @@ -19069,7 +19076,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] return > void means “empty”: the method does something but returns no value. ::: -`,K4=`--- +`,Kb=`--- titel: Searching and sorting bereich: Basics kurz: Use playing cards to understand how linear search, binary search and bubble sort work, and why some methods are much faster. @@ -25180,6 +25187,14 @@ A variable that counts along in a loop, usually i. also: endless loop, endless loops, infinite loop, infinite loops A loop whose condition never becomes false. It never stops by itself. +### Flag +also: flag, flags +A boolean variable that starts with false and is set to true as soon as something has happened. + +### State machine +also: state machine, state machines, state variable, state variables +A program that is always in exactly one state and changes to the next state by fixed rules, e.g. a traffic light. + ### Array also: array, arrays, Arrays A row of slots with one shared name and the same data type. @@ -28706,7 +28721,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] default - [ ] case 0 ::: -`,Mv=`--- +`,Dv=`--- titel: Ciclo while bereich: Fundamentos kurz: Repetir passos enquanto uma condição for verdadeira. @@ -29065,7 +29080,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] while (numero > 0); > A condição fica entre parênteses curvos, depois \`{\` abre o corpo. ::: -`,Dv=`--- +`,Bv=`--- titel: Ciclo do-while bereich: Fundamentos kurz: Primeiro executar, depois verificar: ciclos com pelo menos uma iteração. @@ -29343,7 +29358,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] } until (condicao); > Depois da condição vem um ponto e vírgula. ::: -`,Bv=`--- +`,Mv=`--- titel: Ciclo for bereich: Fundamentos kurz: Contar um número fixo de iterações com Início, Condição e Passo. @@ -33536,7 +33551,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = Files.readString -> ficheiros pequenos de uma vez = Scanner -> ler números e palavras ::: -`,Qv=`--- +`,qv=`--- titel: Tabelas em CSV bereich: Ficheiros kurz: Ler uma tabela num ficheiro CSV, dividir cada linha com split e fazer contas com os números. @@ -33760,7 +33775,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = registo -> uma linha com valores = separador -> separa as colunas, muitas vezes ; ::: -`,qv=`--- +`,Uv=`--- titel: Dados em JSON bereich: Ficheiros kurz: Perceber ficheiros JSON, tirar valores com indexOf e substring e escrever JSON tu mesmo. @@ -33985,7 +34000,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = [ ] -> uma lista = : -> separa a chave do valor ::: -`,Uv=`--- +`,Qv=`--- titel: Comparar formatos bereich: Ficheiros kurz: Comparar os mesmos dados em txt, CSV e JSON, escolher o formato certo e converter um ficheiro noutro formato. @@ -38967,7 +38982,7 @@ tipp: Verdoppeln heißt: mal 2. Das Ergebnis speicherst du wieder in derselben V tipp: \`zahl = zahl * 2\` rechnet mit dem alten Wert und speichert das Ergebnis wieder in \`zahl\`. Text und Variable verbindest du mit \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,My=`--- +`,Dy=`--- titel: Age in a subprogram nach: 18 stufe: 2 @@ -38988,7 +39003,7 @@ tipp: Open the exercise in the editor and build the main program there with the lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,Dy=`--- +`,By=`--- titel: Ball throw results nach: 25 stufe: 2 @@ -39017,7 +39032,7 @@ tipp: You need four variables before the loop: the count, the sum as a \`double\ tipp: In the loop: \`String[] parts = line.split(";");\` and \`int distance = Integer.parseInt(parts[1]);\`. If \`distance > bestDistance\`, remember the distance and the name. To save: \`PrintWriter out = new PrintWriter("winner.txt");\`, \`out.println(…)\` and \`out.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,By=`--- +`,My=`--- titel: Leaderboard nach: 19 stufe: 2 @@ -39599,7 +39614,7 @@ tipp: In Java this is a switch: \`switch (pick) { … }\`. tipp: Every case looks like this: \`case 1 -> { System.out.println("…"); }\`. All other numbers go to \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,Qy=`--- +`,qy=`--- titel: Add up nach: 2 stufe: 1 @@ -39615,7 +39630,7 @@ tipp: You need three variables: two for the numbers and one for the result. tipp: You set a variable with a statement such as \`int number1 = 4\`. For the output you write the name of the variable without quotation marks. lösung: aufgabe-summe-loesung.visustruct ::: -`,qy=`--- +`,Uy=`--- titel: Draw for board duty nach: 15 stufe: 2 @@ -39652,7 +39667,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > With \`int pick = (int) (Math.random() * 5) + 1\` you can also let chance draw the number. But for the automatic check we need a fixed input. -`,Uy=`--- +`,Qy=`--- titel: Calculator nach: 10 stufe: 2 @@ -41714,6 +41729,156 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine Do-while-Schleife in Java schreiben. → Jetzt in Java: Schritte zählen ::: `,P9=`--- +titel: Zählen und Summieren +bereich: Sensoren und Entscheidungen +kurz: Mit einer Variablen mitzählen und Werte zusammenzählen. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- eine Zählvariable anlegen und in einer Schleife hochzählen +- in einer Schleife eine Summe bilden +- das Ergebnis nach der Schleife auf dem Bildschirm zeigen +::: + +## Mitzählen + +Wie viele Schritte fährt der mBot2 bis zur Wand? Das weißt du vorher nicht, die Welt ist jedes Mal anders. Der mBot2 soll deshalb **mitzählen**. Dafür brauchst du drei Kästen: + +1. **Vor** der Schleife: \`int schritte = 0\`. Am Anfang ist noch nichts gezählt. +2. **In** der Schleife: \`schritte = schritte + 1\`. Nach jedem Schritt eins mehr. +3. **Nach** der Schleife: das Ergebnis zeigen, zum Beispiel mit \`mbot.showText("Schritte: " + schritte)\`. + +Lies \`schritte = schritte + 1\` von rechts nach links: Nimm den alten Wert von \`schritte\`, zähle 1 dazu und speichere das Ergebnis wieder in \`schritte\`. So eine Variable heißt **Zählvariable** oder kurz Zähler. + +> Achtung: Steht \`int schritte = 0\` **in** der Schleife, fängt der Zähler bei jedem Durchgang wieder bei 0 an. Am Ende steht dann immer 1 da. + +::: angeberwissen +Dein Handy zählt deine Schritte genau so: Bei jedem Schritt rechnet es \`schritte = schritte + 1\`. Ich zähle lieber meine Grashalme. Ich bin bei 4 Millionen. +::: + +::: übung vb-schritte-welt +titel: Schritte bis zur Wand +auftrag: Baue ein Struktogramm: Der mBot2 fährt vor, solange der Abstand größer als 15 ist. Dabei zählt er seine Schritte mit. Danach zeigt er zum Beispiel **Schritte: 3** auf dem Bildschirm. Es gibt drei Welten. +welt: wand-kurz -> screen "Schritte: 3" +welt: wand-mittel -> screen "Schritte: 7" +welt: wand-lang -> screen "Schritte: 12" +braucht: whileSchleife +tipp: Der erste Kasten ist \`int schritte = 0\`. Danach kommt die While-Schleife mit \`mbot.getDistance() > 15\`. +tipp: In der Schleife stehen **fahre vor** und \`schritte = schritte + 1\`. Nach der Schleife steht \`mbot.showText("Schritte: " + schritte)\`. +lösung: vb-schritte-welt-loesung.visustruct +::: + +## Zusammenzählen + +Ein Zähler wächst immer um 1. Eine **Summe** wächst um verschiedene Werte. Der mBot2 fährt eine Spirale: erst 10 cm, dann 20, dann 30, dann 40. Wie weit ist er insgesamt gefahren? + +| Durchgang | \`seite\` | \`gesamt\` danach | +|---|---|---| +| vorher | 10 | 0 | +| 1 | 10 | 0 + 10 = 10 | +| 2 | 20 | 10 + 20 = 30 | +| 3 | 30 | 30 + 30 = 60 | +| 4 | 40 | 60 + 40 = 100 | + +Das Muster ist dasselbe wie beim Zählen. Nur steht statt der 1 jetzt der Wert, der dazukommt: \`gesamt = gesamt + seite\`. + +## Jetzt in Java: Spirale mit Strecke + +::: übung vb-java-spirale-strecke +titel: Spirale mit Strecke +code: java +auftrag: Schreibe in Java: Lege \`int seite = 10\` und \`int gesamt = 0\` an. Fahre viermal: \`seite\` cm vor, rechts drehen, \`seite\` zu \`gesamt\` dazuzählen, \`seite\` um 10 größer machen. Zeige danach **Strecke: 100 cm** auf dem Bildschirm. +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Strecke: 100 cm" +braucht: forSchleife +tipp: In der For-Schleife stehen vier Zeilen: \`mbot.forward(seite);\`, \`mbot.turnRight();\`, \`gesamt = gesamt + seite;\` und \`seite = seite + 10;\`. +tipp: Nach der Schleife steht \`mbot.showText("Strecke: " + gesamt + " cm");\`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +::: übung vb-fehler-05-zaehlen-und-summieren +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Spirale mit Strecke“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-05-zaehlen-und-summieren-start.visustruct +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Strecke: 100 cm" +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Variable dort, wo sie angelegt wird? Java unterscheidet Groß- und Kleinschreibung. +tipp: Richtig heißt es \`gesamt = gesamt + seite\`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +## Spiel: Was steht am Ende in der Variablen? + +::: spiel frage +titel: Spiel: Was steht am Ende in der Variablen? +intro: Ludwig hat kleine Programme geschrieben. Rechne im Kopf mit. Fünf Runden. + +runde: +frage: \`int z = 0\`, dann dreimal \`z = z + 1\`. Was ist \`z\`? +- 1 +- [x] 3 +- 0 +> Jeder Durchgang zählt 1 dazu: 1, 2, 3. + +runde: +frage: \`int summe = 0\`, dann \`summe = summe + 5\` und \`summe = summe + 7\`. Was ist \`summe\`? +- 7 +- [x] 12 +- 5 +> 0 + 5 = 5, dann 5 + 7 = 12. + +runde: +frage: Eine Schleife läuft viermal. In ihr stehen \`int z = 0\` und \`z = z + 1\`. Was ist \`z\` am Ende? +- 4 +- [x] 1 +- 0 +> Der Zähler wird in jedem Durchgang wieder auf 0 gesetzt. Er gehört vor die Schleife. + +runde: +frage: \`int gesamt = 0\`. Der mBot2 fährt 20, 20 und 30 cm und zählt jedes Mal dazu. Was ist \`gesamt\`? +- 30 +- 20 +- [x] 70 +> 20 + 20 + 30 = 70. + +runde: +frage: \`int schritte = 10\`, dann zweimal \`schritte = schritte + 1\`. Was ist \`schritte\`? +- 2 +- [x] 12 +- 11 +> Der Zähler fängt hier bei 10 an, nicht bei 0. +::: + +::: quiz +? Wo legst du die Zählvariable \`int schritte = 0\` an? +→ Mitzählen +- [x] Vor der Schleife +- [ ] In der Schleife +- [ ] Nach der Schleife +> In der Schleife würde sie bei jedem Durchgang wieder 0. +? Was macht \`schritte = schritte + 1\`? +→ Mitzählen +- [ ] Es vergleicht schritte mit schritte + 1. +- [x] Es nimmt den alten Wert, zählt 1 dazu und speichert das Ergebnis. +- [ ] Es setzt schritte auf 1. +? Wie zählst du die Seitenlänge \`seite\` zur Summe \`gesamt\` dazu? +→ Zusammenzählen +- [ ] \`gesamt = seite\` +- [ ] \`seite = gesamt + seite\` +- [x] \`gesamt = gesamt + seite\` +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann eine Zählvariable anlegen und in einer Schleife hochzählen. → Mitzählen +- Ich kann in einer Schleife eine Summe bilden. → Zusammenzählen +- Ich kann das Ergebnis nach der Schleife auf dem Bildschirm zeigen. → Jetzt in Java: Spirale mit Strecke +::: +`,O9=`--- titel: Der Ultraschallsensor bereich: Sensoren und Entscheidungen kurz: Abstand messen, Abstand halten und das Ganze in Java. @@ -41824,7 +41989,339 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann zwei Verzweigungen ineinander bauen. → Abstand halten im Struktogramm - Ich kann eine While-Schleife mit dem Abstand in Java schreiben. → Jetzt in Java ::: -`,O9=`--- +`,D9=`--- +titel: Feste Werte mit final +bereich: Sensoren und Entscheidungen +kurz: Eine Konstante anlegen, damit eine wichtige Zahl nur an einer Stelle steht. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- erklären, was eine Konstante ist +- eine Konstante im Struktogramm und in Java anlegen +- eine Konstante in einer Bedingung und in einem Befehl benutzen +::: + +## Eine Zahl an vielen Stellen + +Ludwig hat ein Programm für den Flur geschrieben: Der mBot2 fährt bis 20 cm vor die Wand, dreht sich um und fährt bis 20 cm vor die andere Wand. + +::: diagramm vb-l06k-ohne.visustruct +Hin und zurück. Die Zahl 20 steht an zwei Stellen. +::: + +Jetzt soll der mBot2 schon bei 30 cm anhalten. Ludwig muss jede 20 suchen und ändern. Vergisst er eine, hält der mBot2 einmal bei 30 und einmal bei 20 cm. In langen Programmen passiert so etwas schnell. + +::: angeberwissen +Profis nennen eine Zahl, die einfach so im Programm steht, eine **magische Zahl**. Magisch, weil niemand mehr weiß, was sie bedeutet. Ich mag nur magische Grashalme. +::: + +## Eine Konstante anlegen + +Besser ist eine **Konstante**. Das ist eine Variable, deren Wert nach dem Festlegen gleich bleibt. Du legst sie einmal ganz oben an und benutzt danach nur noch ihren Namen. + +| | Struktogramm | Java | +|---|---|---| +| anlegen | \`const int ABSTAND = 20\` | \`final int ABSTAND = 20;\` | +| benutzen | \`mbot.getDistance() > ABSTAND\` | \`mbot.getDistance() > ABSTAND\` | + +Im Struktogramm schreibst du \`const\` davor, in Java \`final\`. Beides heißt: Dieser Wert ändert sich nicht mehr. Namen von Konstanten schreibt man in **Großbuchstaben**, dann erkennt man sie sofort. + +::: diagramm vb-l06k-mit.visustruct +Dasselbe Programm mit der Konstanten ABSTAND. Für 30 cm änderst du nur die erste Zeile. +::: + +::: übung vb-konstante-wand +titel: Wand mit Konstante +auftrag: Lege die Konstante \`ABSTAND\` mit dem Wert 20 an. Der mBot2 fährt vor, solange der Abstand größer als \`ABSTAND\` ist. Danach spielt er einen Ton. Es gibt drei Welten. +welt: wand-kurz -> tone +welt: wand-mittel -> tone +welt: wand-lang -> tone +braucht: whileSchleife +tipp: Der erste Kasten ist eine Anweisung mit \`const int ABSTAND = 20\`. Darunter kommt eine While-Schleife. +tipp: Die Bedingung der Schleife ist \`mbot.getDistance() > ABSTAND\`. In der Schleife steht **fahre vor**, nach der Schleife **spiele Ton**. +lösung: vb-konstante-wand-loesung.visustruct +::: + +## Jetzt in Java: Quadrat mit Konstante + +Eine Konstante passt auch in einen Befehl. Mit \`final int SEITE = 30;\` fährt \`mbot.forward(SEITE);\` genau 30 cm. Soll das Quadrat größer werden, änderst du nur die eine Zeile. + +::: übung vb-java-konstante-seite +titel: Quadrat mit Konstante +code: java +auftrag: Schreibe in Java: Lege die Konstante \`SEITE\` mit dem Wert 30 an. Fahre dann mit einer For-Schleife ein Quadrat mit der Seitenlänge \`SEITE\`. +fahrt: 4 x (forward 30, turnRight) +braucht: forSchleife +tipp: Die erste Zeile ist \`final int SEITE = 30;\`. Danach kommt \`for (int i = 0; i < 4; i++) { … }\`. +tipp: In der Schleife stehen \`mbot.forward(SEITE);\` und \`mbot.turnRight();\`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +::: übung vb-fehler-06-konstanten-final +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Quadrat mit Konstante“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-06-konstanten-final-start.visustruct +fahrt: 4 x (forward 30, turnRight) +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Konstante dort, wo sie angelegt wird? Konstanten schreibt man in Großbuchstaben. +tipp: Richtig heißt es \`mbot.forward(SEITE)\`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +## Spiel: Konstante oder Variable? + +::: spiel frage +titel: Spiel: Konstante oder Variable? +intro: Ludwig sortiert Werte. Bleibt der Wert im ganzen Programm gleich, ist er eine Konstante. Ändert er sich, ist er eine Variable. Sechs Runden. +frage: Konstante oder Variable? +antworten: Konstante | Variable + +runde: +frage: Die Anzahl der Ecken eines Quadrats +richtig: Konstante +> Ein Quadrat hat immer vier Ecken. + +runde: +frage: Der Abstand, den der Ultraschallsensor gerade misst +richtig: Variable +> Fährt der mBot2, ändert sich der Abstand ständig. + +runde: +frage: Der Mindestabstand, bei dem der mBot2 immer anhalten soll +richtig: Konstante +> Du legst ihn einmal fest, zum Beispiel \`final int ABSTAND = 20;\`. + +runde: +frage: Die Zahl der Schritte, die der mBot2 schon gefahren ist +richtig: Variable +> Nach jedem Schritt wird sie um 1 größer. + +runde: +frage: Die Tonhöhe des Warntons, immer 440 Hz +richtig: Konstante +> Der Warnton klingt immer gleich. + +runde: +frage: Der Akkustand in Prozent +richtig: Variable +> Der Akku wird beim Fahren langsam leer. +::: + +::: quiz +? Was ist eine Konstante? +→ Eine Konstante anlegen +- [ ] Eine Variable, die sich in jedem Durchgang ändert +- [x] Eine Variable, deren Wert nach dem Festlegen gleich bleibt +- [ ] Ein Sensor, der immer denselben Wert misst +> Eine Konstante legst du einmal fest. Danach benutzt du nur ihren Namen. +? Wie legst du in Java die Konstante \`ABSTAND\` mit dem Wert 20 an? +→ Eine Konstante anlegen +- [ ] \`const ABSTAND = 20;\` +- [x] \`final int ABSTAND = 20;\` +- [ ] \`int final = 20;\` +> In Java steht \`final\` vor dem Datentyp. Im Struktogramm schreibst du \`const\`. +? Warum ist eine Konstante besser als die Zahl 20 an vielen Stellen? +→ Eine Konstante anlegen +- [ ] Weil das Programm dann schneller fährt +- [x] Weil du den Wert nur an einer Stelle ändern musst +- [ ] Weil der Sensor dann genauer misst +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann erklären, was eine Konstante ist. → Eine Konstante anlegen +- Ich kann eine Konstante im Struktogramm und in Java anlegen. → Eine Konstante anlegen +- Ich kann eine Konstante in einer Bedingung und in einem Befehl benutzen. → Jetzt in Java: Quadrat mit Konstante +::: +`,B9=`--- +titel: Nah, mittel oder weit? +bereich: Sensoren und Entscheidungen +kurz: Eine Verzweigung mit drei Fällen bauen und in Java mit else if schreiben. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- eine Verzweigung mit drei Fällen bauen +- \`else if\` in Java lesen und schreiben +- die Bedingungen in der richtigen Reihenfolge prüfen +::: + +## Drei Fälle statt zwei + +Viele Autos haben eine **Einparkhilfe**. Ist die Wand weit weg, ist alles frei. Kommt sie näher, heißt es: langsam. Ist sie ganz nah: Stopp! + +Eine Verzweigung hat nur zwei Zweige, Ja und Nein. Für drei Fälle setzt du eine zweite Verzweigung in den Nein-Zweig der ersten: + +1. Ist der Abstand kleiner als 10? Dann **Stopp**. +2. Sonst: Ist der Abstand kleiner als 30? Dann **Langsam**. +3. Sonst: **Frei**. + +::: diagramm vb-l06n-einparkhilfe.visustruct +Die Einparkhilfe. Die zweite Frage wird nur gestellt, wenn die Antwort auf die erste Nein war. +::: + +Probiere es in der [Simulation](#zeige-simulation) aus: Öffne das Diagramm im Editor und stelle den Abstand auf 5, 20 und 50 cm. + +> 📘 **Mehr dazu ohne Roboter:** In VisuStruct gibt es die Lektion [„Verzweigung“](?visustruct&lektion=08-verzweigung). Sie öffnet sich in einem neuen Fenster. + +## Tempo nach Abstand im Struktogramm + +::: übung vb-tempo-abstand +titel: Tempo nach Abstand +auftrag: Baue ein Struktogramm mit drei Fällen: Ist der Abstand kleiner als 10, fährt der mBot2 5 cm zurück. Sonst: Ist der Abstand kleiner als 30, fährt er 5 cm vor. Sonst fährt er 20 cm vor. +messwerte: getDistance=5 -> backward 5 +messwerte: getDistance=20 -> forward 5 +messwerte: getDistance=50 -> forward 20 +braucht: verzweigung +tipp: Baue es wie die Einparkhilfe: eine Verzweigung mit \`mbot.getDistance() < 10\` und im Nein-Zweig eine zweite mit \`mbot.getDistance() < 30\`. +tipp: Die Befehle sind \`mbot.backward(5)\`, \`mbot.forward(5)\` und \`mbot.forward(20)\`. Der letzte steht im Nein-Zweig der zweiten Verzweigung. +lösung: vb-tempo-abstand-loesung.visustruct +::: + +> Beim Prüfen setzt VisuStruct den Abstand nacheinander auf 5, 20 und 50 cm. + +## Jetzt in Java: else if + +Schau in den Bereich [Code](#zeige-codelive). Die Verzweigung im Nein-Zweig sieht so aus: + +\`\`\`java +if (mbot.getDistance() < 10) { + mbot.showText("Stopp"); +} else { + if (mbot.getDistance() < 30) { + mbot.showText("Langsam"); + } else { + mbot.showText("Frei"); + } +} +\`\`\` + +In Java darfst du das kürzer schreiben. Das \`if\` rutscht direkt hinter das \`else\`: + +\`\`\`java +if (mbot.getDistance() < 10) { + mbot.showText("Stopp"); +} else if (mbot.getDistance() < 30) { + mbot.showText("Langsam"); +} else { + mbot.showText("Frei"); +} +\`\`\` + +Beides bedeutet genau dasselbe. Mit \`else if\` ist es aber besser zu lesen. Die geschweiften Klammern \`{ }\` schreibst du trotzdem immer. + +::: übung vb-java-tageszeit +titel: Tag oder Nacht? +code: java +auftrag: Schreibe in Java mit \`else if\`: Ist die Helligkeit kleiner als 20, zeigt der mBot2 **Nacht**. Sonst: Ist sie kleiner als 60, zeigt er **Dämmerung**. Sonst zeigt er **Tag**. +messwerte: getBrightness=10 -> none, screen "Nacht" +messwerte: getBrightness=40 -> none, screen "Dämmerung" +messwerte: getBrightness=80 -> none, screen "Tag" +braucht: verzweigung +tipp: Die Helligkeit liest du mit \`mbot.getBrightness()\`. Die erste Bedingung ist \`mbot.getBrightness() < 20\`. +tipp: \`if (…) { mbot.showText("Nacht"); } else if (mbot.getBrightness() < 60) { mbot.showText("Dämmerung"); } else { mbot.showText("Tag"); }\` +lösung: vb-java-tageszeit-loesung.visustruct +::: + +::: übung vb-fehler-06-nah-mittel-weit +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Tag oder Nacht?“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-06-nah-mittel-weit-start.visustruct +messwerte: getBrightness=10 -> none, screen "Nacht" +messwerte: getBrightness=40 -> none, screen "Dämmerung" +messwerte: getBrightness=80 -> none, screen "Tag" +tipp: Ein Text gehört in Anführungszeichen. Ohne sie sucht Java eine Variable mit diesem Namen. +tipp: Richtig heißt es \`mbot.showText("Nacht")\`. +lösung: vb-java-tageszeit-loesung.visustruct +::: + +## Auf die Reihenfolge kommt es an + +Ludwig hat die Einparkhilfe umgebaut und die Fragen getauscht: + +\`\`\`java +if (mbot.getDistance() < 30) { + mbot.showText("Langsam"); +} else if (mbot.getDistance() < 10) { + mbot.showText("Stopp"); +} +\`\`\` + +Bei 5 cm zeigt sein mBot2 **Langsam** statt **Stopp**. Denn 5 ist auch kleiner als 30. Die erste Bedingung ist schon wahr, die zweite wird gar nicht mehr geprüft. **Stopp** erscheint nie. + +> Merke: Bei \`<\` prüfst du zuerst den kleinsten Wert, dann den nächstgrößeren. + +::: spiel frage +titel: Spiel: Was zeigt die Einparkhilfe? +intro: Ludwigs Einparkhilfe von oben: unter 10 cm **Stopp**, unter 30 cm **Langsam**, sonst **Frei**. Was zeigt sie? Sechs Runden. +frage: Was zeigt die Einparkhilfe? +antworten: Stopp | Langsam | Frei + +runde: +frage: Der Abstand ist **5 cm**. +richtig: Stopp +> 5 ist kleiner als 10. Schon die erste Frage ist wahr. + +runde: +frage: Der Abstand ist **25 cm**. +richtig: Langsam +> 25 ist nicht kleiner als 10, aber kleiner als 30. + +runde: +frage: Der Abstand ist **80 cm**. +richtig: Frei +> Beide Fragen sind falsch, also bleibt der letzte Nein-Zweig. + +runde: +frage: Der Abstand ist genau **10 cm**. +richtig: Langsam +> 10 ist nicht kleiner als 10. Die erste Frage ist falsch, die zweite wahr. + +runde: +frage: Der Abstand ist genau **30 cm**. +richtig: Frei +> 30 ist nicht kleiner als 30. Beide Fragen sind falsch. + +runde: +frage: Der Abstand ist **9 cm**. +richtig: Stopp +> 9 ist kleiner als 10. +::: + +::: quiz +? Wie viele Verzweigungen brauchst du im Struktogramm für drei Fälle? +→ Drei Fälle statt zwei +- [ ] Eine +- [x] Zwei, die zweite im Nein-Zweig der ersten +- [ ] Drei nebeneinander +> Jede Verzweigung teilt in zwei Zweige. Die zweite teilt den Nein-Zweig noch einmal. +? Was bedeutet \`else if\` in Java? +→ Jetzt in Java: else if +- [x] Sonst prüfe noch eine Bedingung +- [ ] Wiederhole die Bedingung +- [ ] Prüfe beide Bedingungen gleichzeitig +> \`else if\` ist die kurze Schreibweise für ein \`if\` im \`else\`-Zweig. +? Ludwig prüft zuerst \`< 30\` und danach \`< 10\`. Was passiert bei 5 cm? +→ Auf die Reihenfolge kommt es an +- [ ] Es erscheint Stopp. +- [x] Es erscheint Langsam. +- [ ] Es erscheint gar nichts. +> 5 ist auch kleiner als 30. Die zweite Bedingung wird nicht mehr geprüft. +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann eine Verzweigung mit drei Fällen bauen. → Drei Fälle statt zwei +- Ich kann \`else if\` in Java lesen und schreiben. → Jetzt in Java: else if +- Ich kann die Bedingungen in der richtigen Reihenfolge prüfen. → Auf die Reihenfolge kommt es an +::: +`,M9=`--- titel: Der Liniensensor bereich: Sensoren und Entscheidungen kurz: Dunkle Linien auf dem Boden erkennen und nicht vom Tisch fallen. @@ -41930,7 +42427,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann bis zu einer Linie fahren. → Am Rand umkehren im Struktogramm - Ich kann in Java mit einer Variable Schritte zählen. → Jetzt in Java: hin und zurück ::: -`,M9=`--- +`,Z9=`--- titel: Und, oder, nicht bereich: Sensoren und Entscheidungen kurz: Zwei Sensoren in einer Bedingung prüfen: und, oder, nicht. @@ -42081,7 +42578,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine Bedingung mit \`!\` (nicht) umdrehen. → Nicht: das Gegenteil - Ich kann eine verknüpfte Bedingung in einer Java-Schleife schreiben. → Jetzt in Java: Sicher fahren ::: -`,D9=`--- +`,L9=`--- titel: Farben erkennen bereich: Sensoren und Entscheidungen kurz: Der Quad-RGB-Sensor sagt, auf welcher Farbe der mBot2 steht. @@ -42183,7 +42680,165 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann mit \`!\` eine Bedingung umdrehen. → Fahre bis Rot im Struktogramm - Ich kann eine Verzweigung in eine Schleife schreiben. → Jetzt in Java: bei Grün piepen ::: -`,B9=`--- +`,W9=`--- +titel: Der größte Wert +bereich: Sensoren und Entscheidungen +kurz: Rundum messen und sich den größten Wert merken: Wo ist am meisten Platz? +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- mit einer Variablen den bisher größten Wert merken +- in einer Schleife jeden neuen Messwert mit dem bisher größten vergleichen +- mit dem mBot2 herausfinden, in welcher Richtung am meisten Platz ist +::: + +## Den Rekord merken + +Beim Weitsprung gibt es eine Tafel mit dem **Rekord**. Nach jedem Sprung schaut die Schiedsrichterin: Ist der neue Sprung weiter als der Rekord? Dann kommt er an die Tafel. Sonst bleibt der alte Rekord stehen. + +Genau so findet ein Programm den größten Wert. Die Tafel ist eine Variable \`max\`: + +1. **Vor** der Schleife: \`int max = 0\`. Noch steht nichts an der Tafel. +2. **In** der Schleife: Ist der neue Wert größer als \`max\`? Dann \`max = wert\`. +3. **Nach** der Schleife steht in \`max\` der größte Wert. + +Der mBot2 dreht sich viermal und misst jedes Mal den Abstand. So sieht das im Schreibtischtest aus: + +| Richtung | gemessen | größer als \`max\`? | \`max\` danach | +|---|---|---|---| +| vorher | | | 0 | +| vorn | 16 | ja | 16 | +| rechts | 36 | ja | 36 | +| hinten | 6 | nein | 36 | +| links | 26 | nein | 36 | + +> Wichtig: Die Verzweigung hat nur einen Ja-Zweig. Ist der Wert nicht größer, passiert nichts. Der alte Rekord bleibt. + +## Wo ist am meisten Platz? + +::: übung vb-meister-platz +titel: Wo ist am meisten Platz? +auftrag: Baue ein Struktogramm: Lege \`int max = 0\` an. Der mBot2 misst viermal den Abstand und dreht sich danach jeweils nach rechts. Ist ein Abstand größer als \`max\`, merkt er ihn sich in \`max\`. Zum Schluss zeigt er zum Beispiel **Am weitesten: 36 cm**. Es gibt zwei Welten. +welt: platz-1 -> screen "Am weitesten: 36 cm" +welt: platz-2 -> screen "Am weitesten: 46 cm" +braucht: forSchleife, verzweigung +tipp: Die For-Schleife läuft viermal. In ihr stehen drei Kästen: \`int abstand = mbot.getDistance()\`, eine Verzweigung und **drehe rechts**. +tipp: Die Verzweigung prüft \`abstand > max\`. Im Ja-Zweig steht \`max = abstand\`, der Nein-Zweig bleibt leer. Nach der Schleife: \`mbot.showText("Am weitesten: " + max + " cm")\`. +lösung: vb-meister-platz-loesung.visustruct +::: + +::: angeberwissen +Viele Saugroboter haben oben einen kleinen Turm mit einem Laser. Er dreht sich und misst ringsum die Abstände. So zeichnet der Roboter eine Karte der Wohnung. Bei mir zu Hause misst niemand. Ich fresse mir einfach den Weg frei. +::: + +## Jetzt in Java: Die Richtung merken + +Jetzt weiß der mBot2, **wie viel** Platz es höchstens gibt. Aber **wo**? Dafür merkt er sich in einer zweiten Variablen auch die Richtung. Die Zählvariable \`i\` sagt dir, die wievielte Messung es war: 0 ist vorn, 1 ist rechts, 2 ist hinten und 3 ist links. + +\`\`\`java +if (abstand > max) { + max = abstand; + richtung = i; +} +\`\`\` + +Beide Zeilen stehen im Ja-Zweig. Nur wenn es einen neuen Rekord gibt, ändert sich auch die Richtung. + +::: übung vb-java-richtung +titel: Die Richtung merken +code: java +auftrag: Schreibe „Wo ist am meisten Platz?“ in Java. Merke dir zusätzlich in \`int richtung = 0\` die Nummer der Messung mit dem größten Abstand. Zeige zum Schluss zum Beispiel **Richtung: 1**. +welt: platz-1 -> screen "Richtung: 1" +welt: platz-2 -> screen "Richtung: 0" +braucht: forSchleife, verzweigung +tipp: Vor der Schleife stehen \`int max = 0;\` und \`int richtung = 0;\`. In der Schleife: \`int abstand = mbot.getDistance();\`, die Verzweigung und \`mbot.turnRight();\`. +tipp: Im Ja-Zweig stehen \`max = abstand;\` und \`richtung = i;\`. Nach der Schleife: \`mbot.showText("Richtung: " + richtung);\` +lösung: vb-java-richtung-loesung.visustruct +::: + +::: übung vb-fehler-08-groesster-wert +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Die Richtung merken“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-08-groesster-wert-start.visustruct +welt: platz-1 -> screen "Richtung: 1" +welt: platz-2 -> screen "Richtung: 0" +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie heißt die Variable dort, wo sie angelegt wird? Java unterscheidet Groß- und Kleinschreibung. +tipp: Richtig heißt es \`richtung = i\`. +lösung: vb-java-richtung-loesung.visustruct +::: + +## Spiel: Neuer Rekord? + +::: spiel frage +titel: Spiel: Neuer Rekord? +intro: Der mBot2 misst nacheinander mehrere Abstände. Was steht am Ende in \`max\`? Fünf Runden. + +runde: +frage: Gemessen: 20, 50, 30 +- 30 +- [x] 50 +- 100 +> 50 ist der größte Wert. Die 30 danach ist kein neuer Rekord. + +runde: +frage: Gemessen: 10, 20, 30, 40 +- 10 +- [x] 40 +- 100 +> Jeder Wert ist ein neuer Rekord. Am Ende steht der letzte da. + +runde: +frage: Gemessen: 90, 10, 20, 30 +- 30 +- [x] 90 +- 10 +> Der Rekord kommt gleich am Anfang. Danach ist kein Wert größer. + +runde: +frage: Gemessen: 15, 15, 15 +- 45 +- 0 +- [x] 15 +> 15 ist nicht größer als 15. \`max\` bleibt 15. + +runde: +frage: Gemessen: 25, 60, 60, 5. In welcher Richtung (\`i\`) ist der Rekord? +- 0 +- [x] 1 +- 2 +> Bei \`i = 1\` kommt die 60. Die zweite 60 ist nicht **größer**, also bleibt \`richtung\` bei 1. +::: + +::: quiz +? Womit fängt \`max\` vor der Schleife an? +→ Den Rekord merken +- [x] Mit 0, weil noch nichts gemessen ist +- [ ] Mit dem größten Wert +- [ ] Mit 100 +> Jeder Abstand ist größer als 0, also wird schon der erste Messwert der Rekord. +? Was steht im Nein-Zweig der Verzweigung \`abstand > max\`? +→ Den Rekord merken +- [ ] \`max = 0\` +- [ ] \`max = abstand\` +- [x] Nichts, der alte Rekord bleibt. +? Wann ändert sich \`richtung\`? +→ Jetzt in Java: Die Richtung merken +- [ ] In jedem Durchgang +- [x] Nur wenn es einen neuen Rekord gibt +- [ ] Nur in der letzten Runde +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann mit einer Variablen den bisher größten Wert merken. → Den Rekord merken +- Ich kann in einer Schleife jeden neuen Messwert mit dem bisher größten vergleichen. → Wo ist am meisten Platz? +- Ich kann mit dem mBot2 herausfinden, in welcher Richtung am meisten Platz ist. → Jetzt in Java: Die Richtung merken +::: +`,E9=`--- titel: Fallauswahl mit Farben bereich: Sensoren und Entscheidungen kurz: Je nach Farbe oder Linie etwas anderes tun, mit einer Fallauswahl statt vieler Verzweigungen. @@ -42324,7 +42979,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine Fallauswahl mit Zahlen in Java schreiben. → Jetzt in Java: Linienmuster - Ich kann je nach Zahl einen anderen Text auf dem Bildschirm zeigen. → Jetzt in Java: Startsignal ::: -`,Z9=`--- +`,N9=`--- titel: Tasten und Joystick bereich: Sensoren und Entscheidungen kurz: Der mBot2 wartet auf dich und lässt sich fernsteuern. @@ -42426,7 +43081,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann auf eine Taste warten. → Warten auf Taste A im Struktogramm - Ich kann den mBot2 mit dem Joystick steuern. → Jetzt in Java: Fernsteuerung ::: -`,L9=`--- +`,F9=`--- titel: Notbremse mit break bereich: Sensoren und Entscheidungen kurz: Eine Endlosschleife mit Aussprung: Der mBot2 fährt immer weiter, bis die Notbremse greift. @@ -42526,7 +43181,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann erklären, warum der Aussprung in einer Verzweigung steht. → Endlosschleife mit Aussprung - Ich kann in Java eine Schleife mit \`while (true)\` und \`break\` schreiben. → Jetzt in Java: Stopp mit Taste A ::: -`,W9=`--- +`,J9=`--- titel: Der Lichtsensor bereich: Sensoren und Entscheidungen kurz: Hell oder dunkel? Der mBot2 wird zum Nachtlicht. @@ -42618,7 +43273,158 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann mit einer Verzweigung die LEDs schalten. → Nachtlicht im Struktogramm - Ich kann mehrere Befehle in einen Zweig schreiben. → Jetzt in Java: Nachtlicht mit Ton ::: -`,E9=`--- +`,R9=`--- +titel: Ein Merker mit boolean +bereich: Sensoren und Entscheidungen +kurz: Mit einer Variablen vom Typ boolean festhalten, ob etwas passiert ist. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- eine Variable vom Typ \`boolean\` anlegen +- mit einem Merker festhalten, ob etwas passiert ist +- einen Merker nach der Schleife in einer Bedingung abfragen +::: + +## Wahr oder falsch + +Eine Variable vom Typ \`boolean\` kennt nur zwei Werte: \`true\` (wahr) und \`false\` (falsch). Du kennst das schon von den Sensoren: \`mbot.isButtonA()\` liefert \`true\` oder \`false\`. Auch ein Vergleich wie \`mbot.getDistance() < 10\` ist am Ende \`true\` oder \`false\`. + +| Anlegen | Bedeutung | +|---|---| +| \`boolean dunkel = false\` | Es war noch nicht dunkel. | +| \`dunkel = true\` | Jetzt war es dunkel. | +| \`if (dunkel)\` | Ist \`dunkel\` wahr? | + +Bei \`if (dunkel)\` brauchst du kein \`== true\`. Die Variable ist ja selbst schon wahr oder falsch. + +## Der Merker + +Der mBot2 soll drei Sekunden lang Wache halten. Er misst immer wieder die Helligkeit. Danach soll er sagen, ob es **irgendwann** dunkel war. + +Dafür nimmst du einen **Merker**: eine \`boolean\`-Variable, die mit \`false\` anfängt. Wird es dunkel, setzt du sie auf \`true\`. Danach setzt sie niemand mehr zurück. Nach der Schleife weißt du also: War es auch nur ein einziges Mal dunkel? + +::: übung vb-wurde-es-dunkel +titel: Wurde es dunkel? +auftrag: Baue ein Struktogramm: Lege \`boolean dunkel = false\` an. Prüfe in einer For-Schleife 30-mal: Ist die Helligkeit kleiner als 20, wird \`dunkel\` wahr. Warte in jedem Durchgang 100 ms. Zeige danach **Es war dunkel** oder **Immer hell**. +messwerte: getBrightness=80/10/80 -> none, screen "Es war dunkel" +messwerte: getBrightness=80 -> none, screen "Immer hell" +braucht: forSchleife, verzweigung +tipp: In der Schleife steht eine Verzweigung mit \`mbot.getBrightness() < 20\`. Im Ja-Zweig steht \`dunkel = true\`, der Nein-Zweig bleibt leer. Danach kommt \`mbot.pause(100)\`. +tipp: Nach der Schleife kommt eine zweite Verzweigung mit der Bedingung \`dunkel\`. Ja: \`mbot.showText("Es war dunkel")\`, Nein: \`mbot.showText("Immer hell")\`. +lösung: vb-wurde-es-dunkel-loesung.visustruct +::: + +> Beim Prüfen wird es in der Mitte der Wache kurz dunkel und dann wieder hell. Zeigt dein mBot2 trotzdem **Es war dunkel**? + +## Jetzt in Java: Wurde geklatscht? + +In Java sieht der Merker so aus: + +\`\`\`java +boolean laut = false; +for (int i = 0; i < 30; i++) { + if (mbot.getLoudness() > 60) { + laut = true; + } + mbot.pause(100); +} +\`\`\` + +\`true\` und \`false\` schreibst du in Java immer klein. + +::: übung vb-java-klatsch-merker +titel: Wurde geklatscht? +code: java +auftrag: Schreibe in Java: Der mBot2 hört drei Sekunden lang zu (30-mal mit 100 ms Pause). Ist die Lautstärke einmal größer als 60, merkt er sich das in \`boolean laut\`. Danach zeigt er **Geklatscht!** oder **Alles still**. +messwerte: getLoudness=0/90/0 -> none, screen "Geklatscht!" +messwerte: getLoudness=0 -> none, screen "Alles still" +braucht: forSchleife, verzweigung +tipp: Nimm den Code oben und schreibe danach \`if (laut) { … } else { … }\`. +tipp: In die Zweige kommen \`mbot.showText("Geklatscht!");\` und \`mbot.showText("Alles still");\`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +::: übung vb-fehler-11-merker-boolean +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Wurde geklatscht?“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-11-merker-boolean-start.visustruct +messwerte: getLoudness=0/90/0 -> none, screen "Geklatscht!" +messwerte: getLoudness=0 -> none, screen "Alles still" +tipp: Die Fehlermeldung nennt eine unbekannte Variable. Wie schreibt man wahr und falsch in Java? Java unterscheidet Groß- und Kleinschreibung. +tipp: Richtig heißt es \`laut = true\`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +## Spiel: true oder false? + +::: spiel frage +titel: Spiel: true oder false? +intro: Ludwig fragt, was in der Bedingung herauskommt. Sechs Runden. +frage: Ist es true oder false? +antworten: true | false + +runde: +frage: \`mbot.getDistance() < 10\`, der Abstand ist 25 cm. +richtig: false +> 25 ist nicht kleiner als 10. + +runde: +frage: \`mbot.isButtonA()\`, und du drückst gerade Taste A. +richtig: true +> Der Sensor meldet: gedrückt. + +runde: +frage: \`boolean dunkel = false\`. In der Schleife wird es nie dunkel. Was ist \`dunkel\` danach? +richtig: false +> Niemand hat den Merker auf \`true\` gesetzt. + +runde: +frage: \`boolean dunkel = false\`. In der Schleife wird es einmal dunkel, danach wieder hell. Was ist \`dunkel\` danach? +richtig: true +> Ein Merker bleibt \`true\`, wenn er einmal gesetzt wurde. + +runde: +frage: \`mbot.getBrightness() > 50\`, die Helligkeit ist 50. +richtig: false +> 50 ist nicht größer als 50. + +runde: +frage: \`!mbot.isButtonA()\`, und du drückst Taste A nicht. +richtig: true +> Taste A ist nicht gedrückt, also \`false\`. Das \`!\` dreht es um: \`true\`. +::: + +::: quiz +? Welche Werte kann eine Variable vom Typ \`boolean\` haben? +→ Wahr oder falsch +- [ ] Jede ganze Zahl +- [x] Nur \`true\` und \`false\` +- [ ] Nur 0 und 1 +? Womit fängt ein Merker an? +→ Der Merker +- [x] Mit \`false\`, weil noch nichts passiert ist +- [ ] Mit \`true\` +- [ ] Mit dem ersten Messwert +> Erst wenn das Ereignis passiert, wird er \`true\`. +? Wie fragst du in Java ab, ob der Merker \`laut\` wahr ist? +→ Jetzt in Java: Wurde geklatscht? +- [x] \`if (laut)\` +- [ ] \`if (laut = true)\` +- [ ] \`if laut\` +> \`laut\` ist selbst schon wahr oder falsch. Ein einzelnes \`=\` wäre eine Zuweisung. +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann eine Variable vom Typ \`boolean\` anlegen. → Wahr oder falsch +- Ich kann mit einem Merker festhalten, ob etwas passiert ist. → Der Merker +- Ich kann einen Merker nach der Schleife in einer Bedingung abfragen. → Jetzt in Java: Wurde geklatscht? +::: +`,G9=`--- titel: Das Mikrofon bereich: Sensoren und Entscheidungen kurz: Klatschen zum Losfahren und eine Lärmampel für das Klassenzimmer. @@ -42707,7 +43513,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann warten, bis etwas passiert. → Klatschen zum Losfahren im Struktogramm - Ich kann eine Lärmampel in Java schreiben. → Jetzt in Java: Lärmampel ::: -`,N9=`--- +`,H9=`--- titel: Der Lagesensor bereich: Sensoren und Entscheidungen kurz: Neigung messen und Schütteln erkennen. @@ -42806,7 +43612,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann zwei Bedingungen mit „oder“ verbinden. → Schräglage-Warnung im Struktogramm - Ich kann mehrere Bedingungen mit „und“ verbinden. → Jetzt in Java: Wasserwaage ::: -`,F9=`--- +`,V9=`--- titel: Die LEDs bereich: Licht, Ton und Bildschirm kurz: Farben mischen, eine Ampel bauen und blinken lassen. @@ -42904,7 +43710,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Farben mit Pausen nacheinander zeigen. → Ampel im Struktogramm - Ich kann die LEDs in Java blinken lassen. → Jetzt in Java: Blaulicht ::: -`,J9=`--- +`,q9=`--- titel: Einzelne LEDs bereich: Licht, Ton und Bildschirm kurz: Jede der fünf LEDs bekommt ihre eigene Farbe, bis zum Lauflicht. @@ -43002,7 +43808,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann einzelne LEDs in verschiedenen Farben leuchten lassen. → Drei Lichter im Struktogramm - Ich kann mit einer Schleife ein Lauflicht bauen. → Jetzt in Java: Lauflicht ::: -`,R9=`--- +`,U9=`--- titel: Der Lautsprecher bereich: Licht, Ton und Bildschirm kurz: Töne, eine Tonleiter und eine Sirene. @@ -43117,7 +43923,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann in Java mit der Zählvariable rechnen. → Jetzt in Java: immer höher - Ich kann den mBot2 ein Gefühl zeigen lassen. → Gefühle zeigen ::: -`,G9=`--- +`,Q9=`--- titel: Arrays und Melodien bereich: Licht, Ton und Bildschirm kurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten. @@ -43245,7 +44051,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen - Ich kann Messwerte in einem Array sammeln und den Mittelwert ausrechnen. → Jetzt in Java: Messreihe ::: -`,H9=`--- +`,Y9=`--- titel: Der Bildschirm bereich: Licht, Ton und Bildschirm kurz: Text, Zahlen und Messwerte auf dem CyberPi anzeigen. @@ -43344,7 +44150,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Zahlen und Messwerte anzeigen. → Zahlen und Messwerte - Ich kann einen Countdown in Java schreiben. → Jetzt in Java: Countdown ::: -`,V9=`--- +`,$9=`--- titel: Zeichenketten bereich: Licht, Ton und Bildschirm kurz: Mit Texten rechnen, Buchstaben herausholen und auf dem Bildschirm zeigen. @@ -43459,7 +44265,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann Texte und Zahlen mit \`+\` verbinden. → Jetzt in Java: Text und Länge - Ich kann mit \`charAt(…)\` einzelne Zeichen holen. → Jetzt in Java: Laufschrift ::: -`,Q9=`--- +`,X9=`--- titel: Motoren und Geschwindigkeit bereich: Motoren und Methoden kurz: Gas geben, lenken und einer Linie folgen. @@ -43572,7 +44378,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann fahren, bis ein Sensor etwas meldet. → Gas geben bis zur Wand im Struktogramm - Ich kann einen Linienfolger in Java schreiben. → Jetzt in Java: Linienfolger ::: -`,q9=`--- +`,K9=`--- titel: Stoppuhr und Akku bereich: Motoren und Methoden kurz: Zeit messen und den Akku im Blick behalten. @@ -43675,7 +44481,163 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine bestimmte Zeit lang fahren. → Zwei Sekunden fahren im Struktogramm - Ich kann den Akkustand anzeigen. → Jetzt in Java: Akku-Anzeige ::: -`,U9=`--- +`,ew=`--- +titel: Zustände: Was mache ich gerade? +bereich: Motoren und Methoden +kurz: Mit einer Zustandsvariablen und einer Fallauswahl eine Robo-Ampel weiterschalten. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- erklären, was ein Zustand ist +- mit einer Fallauswahl je nach Zustand handeln und in den nächsten Zustand wechseln +- Zustände in Java mit Namen und \`.equals\` unterscheiden +::: + +## Was ist ein Zustand? + +Eine Ampel ist immer in genau einem **Zustand**: rot, grün oder gelb. In jedem Zustand weiß sie zwei Dinge: Was zeige ich? Und was kommt danach? + +Unsere Robo-Ampel hat drei Zustände. Jeder bekommt eine Nummer: + +| Zustand | LEDs | danach | +|---|---|---| +| 0 | rot | 1 | +| 1 | grün | 2 | +| 2 | gelb | 0 | + +Den aktuellen Zustand speicherst du in einer Variablen: \`int zustand = 0\`. So eine Variable heißt **Zustandsvariable**. Ein Programm, das so von Zustand zu Zustand springt, heißt **Zustandsautomat**. + +> Eine echte Ampel in Deutschland hat vier Zustände: rot, rot-gelb, grün, gelb. Unsere Robo-Ampel lässt rot-gelb weg. + +::: angeberwissen +Auch ein Saugroboter ist ein Zustandsautomat: saugen, ausweichen, zur Ladestation fahren. Ich habe nur zwei Zustände: fressen und schlafen. +::: + +## Die Robo-Ampel im Struktogramm + +Die Fallauswahl passt perfekt: Für jeden Zustand gibt es einen Fall. In jedem Fall stehen zwei Kästen: Was tue ich? Und welcher Zustand kommt als Nächstes? + +::: übung vb-ampel-zustand +titel: Robo-Ampel +auftrag: Baue ein Struktogramm: Lege \`int zustand = 0\` an. Eine For-Schleife läuft sechsmal. In ihr steht eine Fallauswahl über \`zustand\`. Fall 0: LEDs rot, \`zustand = 1\`. Fall 1: LEDs grün, \`zustand = 2\`. Sonst: LEDs gelb, \`zustand = 0\`. Nach der Fallauswahl wartet der mBot2 eine Sekunde. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, fallauswahl +tipp: Die Fallauswahl findest du bei den Elementen. Schreib \`zustand\` hinein. Die Fälle heißen 0, 1 und sonst (default). +tipp: Die Farben sind \`mbot.setLed(255, 0, 0)\` für rot, \`mbot.setLed(0, 255, 0)\` für grün und \`mbot.setLed(255, 200, 0)\` für gelb. Unter der Fallauswahl, noch in der Schleife, steht \`mbot.pause(1000)\`. +lösung: vb-ampel-zustand-loesung.visustruct +::: + +> 📘 **Mehr dazu ohne Roboter:** In VisuStruct gibt es die Lektion [„Fallauswahl“](?visustruct&lektion=10-fallauswahl). Sie öffnet sich in einem neuen Fenster. + +## Jetzt in Java: Zustände mit Namen + +Nummern sind schnell vergessen. Was war noch mal Zustand 2? Lesbarer sind Namen. Dann ist der Zustand ein Text: + +\`\`\`java +String zustand = "rot"; +... +if (zustand.equals("rot")) { + mbot.setLed(255, 0, 0); + zustand = "grün"; +} else if (zustand.equals("grün")) { + ... +\`\`\` + +Texte vergleichst du in Java mit \`.equals("…")\`, nicht mit \`==\`. + +::: übung vb-java-ampel-text +titel: Ampel mit Namen +code: java +auftrag: Schreibe die Robo-Ampel in Java mit \`String zustand = "rot";\`. Prüfe mit \`if\` und \`else if\`, in welchem Zustand die Ampel ist: rot, dann grün, dann gelb, dann wieder rot. Die Schleife läuft sechsmal, nach jedem Durchgang 1 Sekunde Pause. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, verzweigung +tipp: In der Schleife: \`if (zustand.equals("rot")) { … } else if (zustand.equals("grün")) { … } else { … }\` und danach \`mbot.pause(1000);\`. +tipp: Im Fall rot stehen \`mbot.setLed(255, 0, 0);\` und \`zustand = "grün";\`. Grün schaltet auf \`"gelb"\`, gelb wieder auf \`"rot"\`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +::: übung vb-fehler-21-zustaende +titel: Warum läuft das nicht? +code: java +auftrag: Ludwig hat „Ampel mit Namen“ abgetippt, aber das Programm läuft nicht. „Im Editor öffnen“ zeigt den Code im Bereich Code. Klicke auf „Ausführen“ und lies die Fehlermeldung. Repariere den Fehler und klicke auf Prüfen. +start: vb-fehler-21-zustaende-start.visustruct +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +tipp: Ein Text gehört in Anführungszeichen. Ohne sie sucht Java eine Variable mit diesem Namen. +tipp: Richtig heißt es \`zustand = "grün"\`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +## Zustände beim Fahren + +Mit Zuständen kann der mBot2 auch fahren. Im Zustand **fahren** fährt er vor. Sieht er eine Wand, wechselt er in den Zustand **drehen**. Dort dreht er sich einmal und wechselt zurück zu **fahren**. + +::: diagramm vb-l21z-ausweichen.visustruct +Fahren und Ausweichen mit zwei Zuständen. Öffne das Diagramm im Editor und probiere es in einer Welt aus. +::: + +## Spiel: Welcher Zustand kommt jetzt? + +::: spiel frage +titel: Spiel: Welcher Zustand kommt jetzt? +intro: Die Robo-Ampel schaltet: 0 rot → 1 grün → 2 gelb → 0 rot. Welcher Zustand kommt als Nächstes? Fünf Runden. +frage: Welcher Zustand kommt danach? +antworten: 0 | 1 | 2 + +runde: +frage: Die Ampel ist gerade in Zustand **0** (rot). +richtig: 1 +> Nach rot kommt grün. + +runde: +frage: Die Ampel ist gerade in Zustand **2** (gelb). +richtig: 0 +> Nach gelb geht es wieder von vorn los. + +runde: +frage: Die Ampel ist gerade in Zustand **1** (grün). +richtig: 2 +> Nach grün kommt gelb. + +runde: +frage: Die Ampel startet in Zustand 0 und schaltet **zweimal** weiter. +richtig: 2 +> 0 → 1 → 2. + +runde: +frage: Die Ampel startet in Zustand 0 und schaltet **dreimal** weiter. +richtig: 0 +> 0 → 1 → 2 → 0. Nach drei Schritten ist sie wieder am Anfang. +::: + +::: quiz +? Was speichert eine Zustandsvariable? +→ Was ist ein Zustand? +- [ ] Wie oft die Schleife gelaufen ist +- [x] Was das Programm gerade macht, zum Beispiel rot oder grün +- [ ] Den größten Messwert +? Was steht in jedem Fall der Fallauswahl? +→ Die Robo-Ampel im Struktogramm +- [x] Was zu tun ist und welcher Zustand als Nächstes kommt +- [ ] Nur eine Pause +- [ ] Eine neue Schleife +? Wie prüfst du in Java, ob \`zustand\` den Text \`"rot"\` enthält? +→ Jetzt in Java: Zustände mit Namen +- [ ] \`zustand == rot\` +- [x] \`zustand.equals("rot")\` +- [ ] \`zustand = "rot"\` +> Texte vergleichst du mit \`.equals\`. Ein einzelnes \`=\` würde \`"rot"\` zuweisen. +::: + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann erklären, was ein Zustand ist. → Was ist ein Zustand? +- Ich kann mit einer Fallauswahl je nach Zustand handeln und in den nächsten Zustand wechseln. → Die Robo-Ampel im Struktogramm +- Ich kann Zustände in Java mit Namen und \`.equals\` unterscheiden. → Jetzt in Java: Zustände mit Namen +::: +`,tw=`--- titel: Eigene Methoden bereich: Motoren und Methoden kurz: Eigene Befehle mit Parametern und Rückgabewert schreiben und aufrufen. @@ -43852,7 +44814,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine überladene Methode erkennen und aufrufen. → Gleicher Name, andere Parameter: Überladung - Ich kann eine Methode mit Rückgabewert schreiben. → Methode mit Rückgabe ::: -`,Y9=`## 🤖 mBot2-Befehle +`,nw=`## 🤖 mBot2-Befehle Ein Befehl sagt dem mBot2, was er **tun** soll. Jeder Befehl beginnt mit \`mbot.\` und endet mit Klammern. In die Klammern schreibst du oft eine Zahl. @@ -44020,7 +44982,7 @@ Mit **🔌 mBot2** neben „Simulation starten“ verbindest du den echten Robot ### Ohne Kabel fahren Mit **⬆ Übertragen** speicherst du dein Programm fest auf dem mBot2. Danach Kabel ab, mBot2 an den Start und **Taste A** drücken: Er fährt dein Programm allein. Es bleibt gespeichert, bis du ein neues überträgst. Eingaben mit der Tastatur gehen am mBot2 nicht. -`,$9=`--- +`,iw=`--- titel: Structure chart and editor bereich: Getting started kurz: What a structure chart is, how to use the editor and how to save your programs. @@ -44135,7 +45097,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can insert, move and delete elements in the editor. → The editor - I can save a structure chart and open it again. → Saving and opening ::: -`,X9=`--- +`,aw=`--- titel: The mBot2 bereich: Getting started kurz: Get to know the robot you are about to program. @@ -44467,7 +45429,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can connect the real mBot2 with USB-C and disconnect it again. → Connecting the real mBot2 - I can check that all sensors and actuators work. → Testing the mBot2 ::: -`,K9=`--- +`,sw=`--- titel: The square bereich: Getting started kurz: From a long structure chart to a triple nested loop. @@ -44606,7 +45568,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can nest three loops. → Four squares - I can upload my program to the mBot2 and start it with button A without a cable. → Driving without a cable ::: -`,ew='---\ntitel: Variables and output\nbereich: Getting started\nkurz: Store values in variables, drive the mBot2 with them and show results on the screen.\n---\n\n## Skills I will gain now\n\n::: kompetenzen\n- create and use a variable\n- tell the data types `int`, `double`, `String` and `boolean` apart\n- drive a rectangle in Java with two variables\n- show a result on the screen with `mbot.showText`\n:::\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double wheelCircumference = 20.4;` |\n| `String` | text in quotation marks | `String name = "Ludwig";` |\n| `boolean` | true or false | `boolean wallNear = mbot.getDistance() < 20;` |\n\nOne wheel rotation takes the mBot2 about 20.4 cm, which is a decimal number. `wallNear` holds `true` if the wall is closer than 20 cm. You will meet the distance sensor in Lesson 4.\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Result on the screen\n\nThe mBot2 can do more than drive, it can also show you something. With `mbot.showText(…)` a text appears on the CyberPi\'s [screen]{teil=screen}. With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nmbot.showText("Distance: " + distance + " cm");\n```\n\nThe screen then shows **Distance: 120 cm**. You will learn more about the screen in Lesson 18.\n\n::: übung vb-strecke-anzeigen\ntitel: How far does it drive?\ncode: java\nauftrag: Create `int length = 60` and `int width = 30` and drive the rectangle as before. Then work out in a variable `distance` how far the mBot2 drove all the way round, and show **Distance: 180 cm** on the screen.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbefehle: showText "Distance: 180 cm"\nbraucht: forSchleife\ntipp: All the way round is twice the length and twice the width: `int distance = 2 * length + 2 * width;`\ntipp: After the loop: `mbot.showText("Distance: " + distance + " cm");`\nlösung: vb-strecke-anzeigen-loesung.visustruct\n:::\n\n> 📘 **More without the robot:** VisuStruct has the lesson ["Input and output"](?visustruct&lektion=06-eingabe-und-ausgabe). It opens in a new window. There you print results to the console with `System.out.println`.\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n→ A variable for the side\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Ludwig"`?\n→ Which data types are there?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `mbot.showText("Side: " + 30);` show on the screen?\n→ Result on the screen\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\nRate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right.\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I can tell the data types `int`, `double`, `String` and `boolean` apart. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can show a result on the screen with `mbot.showText`. → Result on the screen\n:::\n',tw=`--- +`,rw='---\ntitel: Variables and output\nbereich: Getting started\nkurz: Store values in variables, drive the mBot2 with them and show results on the screen.\n---\n\n## Skills I will gain now\n\n::: kompetenzen\n- create and use a variable\n- tell the data types `int`, `double`, `String` and `boolean` apart\n- drive a rectangle in Java with two variables\n- show a result on the screen with `mbot.showText`\n:::\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double wheelCircumference = 20.4;` |\n| `String` | text in quotation marks | `String name = "Ludwig";` |\n| `boolean` | true or false | `boolean wallNear = mbot.getDistance() < 20;` |\n\nOne wheel rotation takes the mBot2 about 20.4 cm, which is a decimal number. `wallNear` holds `true` if the wall is closer than 20 cm. You will meet the distance sensor in Lesson 4.\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Result on the screen\n\nThe mBot2 can do more than drive, it can also show you something. With `mbot.showText(…)` a text appears on the CyberPi\'s [screen]{teil=screen}. With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nmbot.showText("Distance: " + distance + " cm");\n```\n\nThe screen then shows **Distance: 120 cm**. You will learn more about the screen in Lesson 18.\n\n::: übung vb-strecke-anzeigen\ntitel: How far does it drive?\ncode: java\nauftrag: Create `int length = 60` and `int width = 30` and drive the rectangle as before. Then work out in a variable `distance` how far the mBot2 drove all the way round, and show **Distance: 180 cm** on the screen.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbefehle: showText "Distance: 180 cm"\nbraucht: forSchleife\ntipp: All the way round is twice the length and twice the width: `int distance = 2 * length + 2 * width;`\ntipp: After the loop: `mbot.showText("Distance: " + distance + " cm");`\nlösung: vb-strecke-anzeigen-loesung.visustruct\n:::\n\n> 📘 **More without the robot:** VisuStruct has the lesson ["Input and output"](?visustruct&lektion=06-eingabe-und-ausgabe). It opens in a new window. There you print results to the console with `System.out.println`.\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n→ A variable for the side\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Ludwig"`?\n→ Which data types are there?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `mbot.showText("Side: " + 30);` show on the screen?\n→ Result on the screen\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\nRate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right.\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I can tell the data types `int`, `double`, `String` and `boolean` apart. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can show a result on the screen with `mbot.showText`. → Result on the screen\n:::\n',ow=`--- titel: Testing step by step bereich: Getting started kurz: Use the simulation and a desk check to find out what your program really does. @@ -44701,7 +45663,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can do a desk check with a table. → The desk check - I can find and fix a mistake with the simulation. → Finding mistakes with the simulation ::: -`,nw=`--- +`,lw=`--- titel: Reading sensors bereich: Sensors and decisions kurz: The mBot2 measures something, and your program decides. @@ -44796,7 +45758,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can explain the difference between a command and a sensor. → Commands and sensors - I can build a sensor into a condition. → Wall ahead? ::: -`,iw=`--- +`,uw=`--- titel: Up to the wall bereich: Sensors and decisions kurz: The mBot2 measures the distance and stops in time. @@ -44896,7 +45858,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can decide when to use a while loop instead of a for loop. → Three worlds, one program - I can find a goal with the line sensor. → To the goal ::: -`,aw=`--- +`,mw=`--- titel: Drive first, then check bereich: Sensors and decisions kurz: The do-while loop always drives at least once and only checks afterwards. @@ -45004,7 +45966,157 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can compare a while loop and a do-while loop. → Drive first, then check - I can write a do-while loop in Java. → Now in Java: counting steps ::: -`,sw=`--- +`,cw=`--- +titel: Counting and adding up +bereich: Sensors and decisions +kurz: Count along with a variable and add values together. +--- + +## Skills I will gain now + +::: kompetenzen +- create a counter variable and count it up in a loop +- build a sum in a loop +- show the result on the screen after the loop +::: + +## Counting along + +How many steps does the mBot2 drive to the wall? You don't know in advance, the world is different every time. So the mBot2 should **count along**. You need three boxes for that: + +1. **Before** the loop: \`int steps = 0\`. At the start nothing has been counted yet. +2. **Inside** the loop: \`steps = steps + 1\`. One more after every step. +3. **After** the loop: show the result, for example with \`mbot.showText("Steps: " + steps)\`. + +Read \`steps = steps + 1\` from right to left: take the old value of \`steps\`, add 1 and store the result in \`steps\` again. A variable like this is called a **counter variable**, or counter for short. + +> Careful: if \`int steps = 0\` is **inside** the loop, the counter starts again at 0 in every pass. Then the result is always 1. + +::: angeberwissen +Your phone counts your steps exactly like this: with every step it calculates \`steps = steps + 1\`. I prefer counting my blades of grass. I'm at 4 million. +::: + +::: übung vb-schritte-welt +titel: Steps to the wall +auftrag: Build a structure chart: the mBot2 drives forward as long as the distance is greater than 15. It counts its steps along the way. Then it shows, for example, **Steps: 3** on the screen. There are three worlds. +welt: wand-kurz -> screen "Steps: 3" +welt: wand-mittel -> screen "Steps: 7" +welt: wand-lang -> screen "Steps: 12" +braucht: whileSchleife +tipp: The first box is \`int steps = 0\`. Then comes the while loop with \`mbot.getDistance() > 15\`. +tipp: Inside the loop are **drive forward** and \`steps = steps + 1\`. After the loop is \`mbot.showText("Steps: " + steps)\`. +lösung: vb-schritte-welt-loesung.visustruct +::: + +## Adding up + +A counter always grows by 1. A **sum** grows by different values. The mBot2 drives a spiral: first 10 cm, then 20, then 30, then 40. How far has it driven in total? + +| Pass | \`side\` | \`total\` afterwards | +|---|---|---| +| before | 10 | 0 | +| 1 | 10 | 0 + 10 = 10 | +| 2 | 20 | 10 + 20 = 30 | +| 3 | 30 | 30 + 30 = 60 | +| 4 | 40 | 60 + 40 = 100 | + +The pattern is the same as for counting. Only instead of 1 you now add the value that comes in: \`total = total + side\`. + +## Now in Java: spiral with distance + +::: übung vb-java-spirale-strecke +titel: Spiral with distance +code: java +auftrag: Write in Java: create \`int side = 10\` and \`int total = 0\`. Four times: drive \`side\` cm forward, turn right, add \`side\` to \`total\`, make \`side\` 10 bigger. Then show **Distance: 100 cm** on the screen. +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Distance: 100 cm" +braucht: forSchleife +tipp: The for loop has four lines: \`mbot.forward(side);\`, \`mbot.turnRight();\`, \`total = total + side;\` and \`side = side + 10;\`. +tipp: After the loop comes \`mbot.showText("Distance: " + total + " cm");\`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +::: übung vb-fehler-05-zaehlen-und-summieren +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Spiral with distance", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-05-zaehlen-und-summieren-start.visustruct +fahrt: forward 10, turnRight, forward 20, turnRight, forward 30, turnRight, forward 40, turnRight +befehle: showText "Distance: 100 cm" +tipp: The error message names an unknown variable. What is the variable called where it is created? Java is case-sensitive. +tipp: It should be \`total = total + side\`. +lösung: vb-java-spirale-strecke-loesung.visustruct +::: + +## Game: what is in the variable at the end? + +::: spiel frage +titel: Game: what is in the variable at the end? +intro: Ludwig has written small programs. Work them out in your head. Five rounds. + +runde: +frage: \`int z = 0\`, then three times \`z = z + 1\`. What is \`z\`? +- 1 +- [x] 3 +- 0 +> Each pass adds 1: 1, 2, 3. + +runde: +frage: \`int sum = 0\`, then \`sum = sum + 5\` and \`sum = sum + 7\`. What is \`sum\`? +- 7 +- [x] 12 +- 5 +> 0 + 5 = 5, then 5 + 7 = 12. + +runde: +frage: A loop runs four times. Inside it are \`int z = 0\` and \`z = z + 1\`. What is \`z\` at the end? +- 4 +- [x] 1 +- 0 +> The counter is set back to 0 in every pass. It belongs before the loop. + +runde: +frage: \`int total = 0\`. The mBot2 drives 20, 20 and 30 cm and adds each one. What is \`total\`? +- 30 +- 20 +- [x] 70 +> 20 + 20 + 30 = 70. + +runde: +frage: \`int steps = 10\`, then twice \`steps = steps + 1\`. What is \`steps\`? +- 2 +- [x] 12 +- 11 +> Here the counter starts at 10, not at 0. +::: + +::: quiz +? Where do you create the counter variable \`int steps = 0\`? +→ Counting along +- [x] Before the loop +- [ ] Inside the loop +- [ ] After the loop +> Inside the loop it would become 0 again in every pass. +? What does \`steps = steps + 1\` do? +→ Counting along +- [ ] It compares steps with steps + 1. +- [x] It takes the old value, adds 1 and stores the result. +- [ ] It sets steps to 1. +? How do you add the side length \`side\` to the sum \`total\`? +→ Adding up +- [ ] \`total = side\` +- [ ] \`side = total + side\` +- [x] \`total = total + side\` +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can create a counter variable and count it up in a loop. → Counting along +- I can build a sum in a loop. → Adding up +- I can show the result on the screen after the loop. → Now in Java: spiral with distance +::: +`,dw=`--- titel: The ultrasonic sensor bereich: Sensors and decisions kurz: Measure the distance, keep your distance, and do it all in Java. @@ -45115,7 +46227,339 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can put one branch inside another. → Keep your distance in the structure chart - I can write a while loop with the distance in Java. → Now in Java ::: -`,rw=`--- +`,hw=`--- +titel: Fixed values with final +bereich: Sensors and decisions +kurz: Create a constant so that an important number appears in only one place. +--- + +## Skills I will gain now + +::: kompetenzen +- explain what a constant is +- create a constant in the structure chart and in Java +- use a constant in a condition and in a command +::: + +## One number in many places + +Ludwig has written a program for the hallway: the mBot2 drives up to 20 cm from the wall, turns around and drives up to 20 cm from the other wall. + +::: diagramm vb-l06k-ohne.visustruct +There and back. The number 20 appears in two places. +::: + +Now the mBot2 should stop at 30 cm instead. Ludwig has to find and change every 20. If he forgets one, the mBot2 stops once at 30 and once at 20 cm. In long programs this happens quickly. + +::: angeberwissen +Professionals call a number that just sits in the program a **magic number**. Magic, because nobody remembers what it means. The only magic I like is magic grass. +::: + +## Creating a constant + +A **constant** is better. It is a variable whose value stays the same once it is set. You create it once at the very top and after that you only use its name. + +| | Structure chart | Java | +|---|---|---| +| create | \`const int DISTANCE = 20\` | \`final int DISTANCE = 20;\` | +| use | \`mbot.getDistance() > DISTANCE\` | \`mbot.getDistance() > DISTANCE\` | + +In the structure chart you write \`const\` in front, in Java \`final\`. Both mean: this value does not change any more. Names of constants are written in **capital letters**, so you can spot them right away. + +::: diagramm vb-l06k-mit.visustruct +The same program with the constant DISTANCE. For 30 cm you only change the first line. +::: + +::: übung vb-konstante-wand +titel: Wall with a constant +auftrag: Create the constant \`DISTANCE\` with the value 20. The mBot2 drives forward as long as the distance is greater than \`DISTANCE\`. Then it plays a tone. There are three worlds. +welt: wand-kurz -> tone +welt: wand-mittel -> tone +welt: wand-lang -> tone +braucht: whileSchleife +tipp: The first box is a statement with \`const int DISTANCE = 20\`. Below it comes a while loop. +tipp: The loop condition is \`mbot.getDistance() > DISTANCE\`. Inside the loop is **drive forward**, after the loop **play tone**. +lösung: vb-konstante-wand-loesung.visustruct +::: + +## Now in Java: square with a constant + +A constant also fits into a command. With \`final int SIDE = 30;\`, \`mbot.forward(SIDE);\` drives exactly 30 cm. If the square should get bigger, you only change that one line. + +::: übung vb-java-konstante-seite +titel: Square with a constant +code: java +auftrag: Write in Java: create the constant \`SIDE\` with the value 30. Then use a for loop to drive a square with side length \`SIDE\`. +fahrt: 4 x (forward 30, turnRight) +braucht: forSchleife +tipp: The first line is \`final int SIDE = 30;\`. Then comes \`for (int i = 0; i < 4; i++) { … }\`. +tipp: Inside the loop are \`mbot.forward(SIDE);\` and \`mbot.turnRight();\`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +::: übung vb-fehler-06-konstanten-final +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Square with a constant", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-06-konstanten-final-start.visustruct +fahrt: 4 x (forward 30, turnRight) +tipp: The error message names an unknown variable. What is the constant called where it is created? Constants are written in capital letters. +tipp: It should be \`mbot.forward(SIDE)\`. +lösung: vb-java-konstante-seite-loesung.visustruct +::: + +## Game: constant or variable? + +::: spiel frage +titel: Game: constant or variable? +intro: Ludwig is sorting values. If the value stays the same in the whole program, it is a constant. If it changes, it is a variable. Six rounds. +frage: Constant or variable? +antworten: Constant | Variable + +runde: +frage: The number of corners of a square +richtig: Constant +> A square always has four corners. + +runde: +frage: The distance the ultrasonic sensor is measuring right now +richtig: Variable +> When the mBot2 drives, the distance changes all the time. + +runde: +frage: The minimum distance at which the mBot2 should always stop +richtig: Constant +> You set it once, for example \`final int DISTANCE = 20;\`. + +runde: +frage: The number of steps the mBot2 has already driven +richtig: Variable +> It grows by 1 after every step. + +runde: +frage: The pitch of the warning tone, always 440 Hz +richtig: Constant +> The warning tone always sounds the same. + +runde: +frage: The battery level in percent +richtig: Variable +> The battery slowly runs down while driving. +::: + +::: quiz +? What is a constant? +→ Creating a constant +- [ ] A variable that changes in every pass +- [x] A variable whose value stays the same once it is set +- [ ] A sensor that always measures the same value +> You set a constant once. After that you only use its name. +? How do you create the constant \`DISTANCE\` with the value 20 in Java? +→ Creating a constant +- [ ] \`const DISTANCE = 20;\` +- [x] \`final int DISTANCE = 20;\` +- [ ] \`int final = 20;\` +> In Java, \`final\` comes before the data type. In the structure chart you write \`const\`. +? Why is a constant better than the number 20 in many places? +→ Creating a constant +- [ ] Because the program drives faster +- [x] Because you only have to change the value in one place +- [ ] Because the sensor measures more precisely +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can explain what a constant is. → Creating a constant +- I can create a constant in the structure chart and in Java. → Creating a constant +- I can use a constant in a condition and in a command. → Now in Java: square with a constant +::: +`,gw=`--- +titel: Near, medium or far? +bereich: Sensors and decisions +kurz: Build a branch with three cases and write it in Java with else if. +--- + +## Skills I will gain now + +::: kompetenzen +- build a branch with three cases +- read and write \`else if\` in Java +- check the conditions in the right order +::: + +## Three cases instead of two + +Many cars have a **parking aid**. If the wall is far away, everything is free. When it gets closer, it says: slow. When it is very close: stop! + +A branch has only two branches, yes and no. For three cases you put a second branch into the no branch of the first one: + +1. Is the distance less than 10? Then **Stop**. +2. Otherwise: is the distance less than 30? Then **Slow**. +3. Otherwise: **Free**. + +::: diagramm vb-l06n-einparkhilfe.visustruct +The parking aid. The second question is only asked if the answer to the first one was no. +::: + +Try it in the [simulation](#zeige-simulation): open the diagram in the editor and set the distance to 5, 20 and 50 cm. + +> 📘 **More without the robot:** VisuStruct has the lesson ["Branch"](?visustruct&lektion=08-verzweigung). It opens in a new window. + +## Speed by distance in the structure chart + +::: übung vb-tempo-abstand +titel: Speed by distance +auftrag: Build a structure chart with three cases: if the distance is less than 10, the mBot2 drives 5 cm backward. Otherwise: if the distance is less than 30, it drives 5 cm forward. Otherwise it drives 20 cm forward. +messwerte: getDistance=5 -> backward 5 +messwerte: getDistance=20 -> forward 5 +messwerte: getDistance=50 -> forward 20 +braucht: verzweigung +tipp: Build it like the parking aid: a branch with \`mbot.getDistance() < 10\` and in its no branch a second one with \`mbot.getDistance() < 30\`. +tipp: The commands are \`mbot.backward(5)\`, \`mbot.forward(5)\` and \`mbot.forward(20)\`. The last one goes into the no branch of the second branch. +lösung: vb-tempo-abstand-loesung.visustruct +::: + +> When checking, VisuStruct sets the distance to 5, 20 and 50 cm one after the other. + +## Now in Java: else if + +Look at the [Code](#zeige-codelive) area. The branch inside the no branch looks like this: + +\`\`\`java +if (mbot.getDistance() < 10) { + mbot.showText("Stop"); +} else { + if (mbot.getDistance() < 30) { + mbot.showText("Slow"); + } else { + mbot.showText("Free"); + } +} +\`\`\` + +In Java you may write this more briefly. The \`if\` moves right behind the \`else\`: + +\`\`\`java +if (mbot.getDistance() < 10) { + mbot.showText("Stop"); +} else if (mbot.getDistance() < 30) { + mbot.showText("Slow"); +} else { + mbot.showText("Free"); +} +\`\`\` + +Both mean exactly the same. With \`else if\` it is easier to read, though. You still always write the curly brackets \`{ }\`. + +::: übung vb-java-tageszeit +titel: Day or night? +code: java +auftrag: Write in Java with \`else if\`: if the brightness is less than 20, the mBot2 shows **Night**. Otherwise: if it is less than 60, it shows **Dusk**. Otherwise it shows **Day**. +messwerte: getBrightness=10 -> none, screen "Night" +messwerte: getBrightness=40 -> none, screen "Dusk" +messwerte: getBrightness=80 -> none, screen "Day" +braucht: verzweigung +tipp: You read the brightness with \`mbot.getBrightness()\`. The first condition is \`mbot.getBrightness() < 20\`. +tipp: \`if (…) { mbot.showText("Night"); } else if (mbot.getBrightness() < 60) { mbot.showText("Dusk"); } else { mbot.showText("Day"); }\` +lösung: vb-java-tageszeit-loesung.visustruct +::: + +::: übung vb-fehler-06-nah-mittel-weit +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Day or night?", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-06-nah-mittel-weit-start.visustruct +messwerte: getBrightness=10 -> none, screen "Night" +messwerte: getBrightness=40 -> none, screen "Dusk" +messwerte: getBrightness=80 -> none, screen "Day" +tipp: A text belongs in quotation marks. Without them Java looks for a variable with that name. +tipp: It should be \`mbot.showText("Night")\`. +lösung: vb-java-tageszeit-loesung.visustruct +::: + +## The order matters + +Ludwig rebuilt the parking aid and swapped the questions: + +\`\`\`java +if (mbot.getDistance() < 30) { + mbot.showText("Slow"); +} else if (mbot.getDistance() < 10) { + mbot.showText("Stop"); +} +\`\`\` + +At 5 cm his mBot2 shows **Slow** instead of **Stop**. That is because 5 is also less than 30. The first condition is already true, so the second one is never checked. **Stop** never appears. + +> Remember: with \`<\`, check the smallest value first, then the next bigger one. + +::: spiel frage +titel: Game: what does the parking aid show? +intro: Ludwig's parking aid from above: under 10 cm **Stop**, under 30 cm **Slow**, otherwise **Free**. What does it show? Six rounds. +frage: What does the parking aid show? +antworten: Stop | Slow | Free + +runde: +frage: The distance is **5 cm**. +richtig: Stop +> 5 is less than 10. The very first question is true. + +runde: +frage: The distance is **25 cm**. +richtig: Slow +> 25 is not less than 10, but it is less than 30. + +runde: +frage: The distance is **80 cm**. +richtig: Free +> Both questions are false, so the last no branch is left. + +runde: +frage: The distance is exactly **10 cm**. +richtig: Slow +> 10 is not less than 10. The first question is false, the second true. + +runde: +frage: The distance is exactly **30 cm**. +richtig: Free +> 30 is not less than 30. Both questions are false. + +runde: +frage: The distance is **9 cm**. +richtig: Stop +> 9 is less than 10. +::: + +::: quiz +? How many branches do you need in the structure chart for three cases? +→ Three cases instead of two +- [ ] One +- [x] Two, the second in the no branch of the first +- [ ] Three side by side +> Each branch splits into two. The second one splits the no branch again. +? What does \`else if\` mean in Java? +→ Now in Java: else if +- [x] Otherwise, check another condition +- [ ] Repeat the condition +- [ ] Check both conditions at the same time +> \`else if\` is the short way of writing an \`if\` inside the \`else\` branch. +? Ludwig checks \`< 30\` first and then \`< 10\`. What happens at 5 cm? +→ The order matters +- [ ] Stop appears. +- [x] Slow appears. +- [ ] Nothing appears. +> 5 is also less than 30. The second condition is no longer checked. +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can build a branch with three cases. → Three cases instead of two +- I can read and write \`else if\` in Java. → Now in Java: else if +- I can check the conditions in the right order. → The order matters +::: +`,pw=`--- titel: The line sensor bereich: Sensors and decisions kurz: Detect dark lines on the floor and don't fall off the table. @@ -45221,7 +46665,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive up to a line. → Turn round at the edge in the structure chart - I can count steps with a variable in Java. → Now in Java: there and back ::: -`,ow=`--- +`,fw=`--- titel: And, or, not bereich: Sensors and decisions kurz: Check two sensors in one condition: and, or, not. @@ -45372,7 +46816,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can turn a condition around with \`!\` (not). → Not: the opposite - I can write a combined condition in a Java loop. → Now in Java: drive safely ::: -`,lw=`--- +`,xw=`--- titel: Recognising colours bereich: Sensors and decisions kurz: The quad RGB sensor tells you which colour the mBot2 is standing on. @@ -45474,7 +46918,165 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can turn a condition round with \`!\`. → Drive to red in the structure chart - I can put a branch inside a loop. → Now in Java: beep on green ::: -`,uw=`--- +`,bw=`--- +titel: The biggest value +bereich: Sensors and decisions +kurz: Measure all around and remember the biggest value: where is the most space? +--- + +## Skills I will gain now + +::: kompetenzen +- remember the biggest value so far in a variable +- compare every new reading with the biggest so far in a loop +- find out with the mBot2 in which direction there is the most space +::: + +## Remembering the record + +In the long jump there is a board showing the **record**. After every jump the referee checks: is the new jump longer than the record? Then it goes on the board. Otherwise the old record stays. + +A program finds the biggest value in exactly the same way. The board is a variable \`max\`: + +1. **Before** the loop: \`int max = 0\`. Nothing is on the board yet. +2. **Inside** the loop: is the new value bigger than \`max\`? Then \`max = value\`. +3. **After** the loop, \`max\` holds the biggest value. + +The mBot2 turns four times and measures the distance each time. This is how it looks in a desk check: + +| Direction | measured | bigger than \`max\`? | \`max\` afterwards | +|---|---|---|---| +| before | | | 0 | +| ahead | 16 | yes | 16 | +| right | 36 | yes | 36 | +| behind | 6 | no | 36 | +| left | 26 | no | 36 | + +> Important: the branch only has a yes branch. If the value is not bigger, nothing happens. The old record stays. + +## Where is the most space? + +::: übung vb-meister-platz +titel: Where is the most space? +auftrag: Build a structure chart: create \`int max = 0\`. The mBot2 measures the distance four times and turns right after each one. If a distance is bigger than \`max\`, it remembers it in \`max\`. At the end it shows, for example, **Farthest: 36 cm**. There are two worlds. +welt: platz-1 -> screen "Farthest: 36 cm" +welt: platz-2 -> screen "Farthest: 46 cm" +braucht: forSchleife, verzweigung +tipp: The for loop runs four times. It contains three boxes: \`int distance = mbot.getDistance()\`, a branch and **turn right**. +tipp: The branch checks \`distance > max\`. The yes branch has \`max = distance\`, the no branch stays empty. After the loop: \`mbot.showText("Farthest: " + max + " cm")\`. +lösung: vb-meister-platz-loesung.visustruct +::: + +::: angeberwissen +Many robot vacuums have a small tower with a laser on top. It spins and measures the distances all around. That way the robot draws a map of the home. Nobody measures anything at my place. I just eat my way through. +::: + +## Now in Java: remembering the direction + +Now the mBot2 knows **how much** space there is at most. But **where**? For that it also remembers the direction in a second variable. The counter variable \`i\` tells you which measurement it was: 0 is ahead, 1 is right, 2 is behind and 3 is left. + +\`\`\`java +if (distance > max) { + max = distance; + direction = i; +} +\`\`\` + +Both lines are in the yes branch. The direction only changes when there is a new record. + +::: übung vb-java-richtung +titel: Remembering the direction +code: java +auftrag: Write "Where is the most space?" in Java. Also remember in \`int direction = 0\` the number of the measurement with the biggest distance. At the end show, for example, **Direction: 1**. +welt: platz-1 -> screen "Direction: 1" +welt: platz-2 -> screen "Direction: 0" +braucht: forSchleife, verzweigung +tipp: Before the loop are \`int max = 0;\` and \`int direction = 0;\`. Inside the loop: \`int distance = mbot.getDistance();\`, the branch and \`mbot.turnRight();\`. +tipp: The yes branch has \`max = distance;\` and \`direction = i;\`. After the loop: \`mbot.showText("Direction: " + direction);\` +lösung: vb-java-richtung-loesung.visustruct +::: + +::: übung vb-fehler-08-groesster-wert +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Remembering the direction", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-08-groesster-wert-start.visustruct +welt: platz-1 -> screen "Direction: 1" +welt: platz-2 -> screen "Direction: 0" +tipp: The error message names an unknown variable. What is the variable called where it is created? Java is case-sensitive. +tipp: It should be \`direction = i\`. +lösung: vb-java-richtung-loesung.visustruct +::: + +## Game: new record? + +::: spiel frage +titel: Game: new record? +intro: The mBot2 measures several distances one after the other. What is in \`max\` at the end? Five rounds. + +runde: +frage: Measured: 20, 50, 30 +- 30 +- [x] 50 +- 100 +> 50 is the biggest value. The 30 after it is not a new record. + +runde: +frage: Measured: 10, 20, 30, 40 +- 10 +- [x] 40 +- 100 +> Every value is a new record. At the end the last one is there. + +runde: +frage: Measured: 90, 10, 20, 30 +- 30 +- [x] 90 +- 10 +> The record comes right at the start. After that no value is bigger. + +runde: +frage: Measured: 15, 15, 15 +- 45 +- 0 +- [x] 15 +> 15 is not bigger than 15. \`max\` stays 15. + +runde: +frage: Measured: 25, 60, 60, 5. In which direction (\`i\`) is the record? +- 0 +- [x] 1 +- 2 +> At \`i = 1\` the 60 comes. The second 60 is not **bigger**, so \`direction\` stays at 1. +::: + +::: quiz +? What does \`max\` start with before the loop? +→ Remembering the record +- [x] With 0, because nothing has been measured yet +- [ ] With the biggest value +- [ ] With 100 +> Every distance is bigger than 0, so the very first reading becomes the record. +? What is in the no branch of the branch \`distance > max\`? +→ Remembering the record +- [ ] \`max = 0\` +- [ ] \`max = distance\` +- [x] Nothing, the old record stays. +? When does \`direction\` change? +→ Now in Java: remembering the direction +- [ ] In every pass +- [x] Only when there is a new record +- [ ] Only in the last round +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can remember the biggest value so far in a variable. → Remembering the record +- I can compare every new reading with the biggest so far in a loop. → Where is the most space? +- I can find out with the mBot2 in which direction there is the most space. → Now in Java: remembering the direction +::: +`,vw=`--- titel: Case selection with colours bereich: Sensors and decisions kurz: Do something different for each colour or line, with one case selection instead of many branches. @@ -45615,7 +47217,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can write a case selection with numbers in Java. → Now in Java: line patterns - I can show a different text on the screen depending on a number. → Now in Java: start signal ::: -`,mw=`--- +`,yw=`--- titel: Buttons and joystick bereich: Sensors and decisions kurz: The mBot2 waits for you and can be remote controlled. @@ -45717,7 +47319,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can wait for a button. → Waiting for button A in the structure chart - I can steer the mBot2 with the joystick. → Now in Java: remote control ::: -`,cw=`--- +`,ww=`--- titel: Emergency brake with break bereich: Sensors and decisions kurz: An endless loop with a Break: the mBot2 keeps driving until the emergency brake kicks in. @@ -45817,7 +47419,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can explain why the Break sits inside a branch. → Endless loop with a Break - I can write a loop with \`while (true)\` and \`break\` in Java. → Now in Java: stop with button A ::: -`,dw=`--- +`,zw=`--- titel: The light sensor bereich: Sensors and decisions kurz: Bright or dark? The mBot2 becomes a night light. @@ -45909,7 +47511,158 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can switch the LEDs with a branch. → Night light in the structure chart - I can write several commands in one branch. → Now in Java: night light with sound ::: -`,hw=`--- +`,Iw=`--- +titel: A flag with boolean +bereich: Sensors and decisions +kurz: Use a variable of type boolean to remember whether something happened. +--- + +## Skills I will gain now + +::: kompetenzen +- create a variable of type \`boolean\` +- use a flag to remember whether something happened +- check a flag in a condition after the loop +::: + +## True or false + +A variable of type \`boolean\` knows only two values: \`true\` and \`false\`. You already know this from the sensors: \`mbot.isButtonA()\` gives you \`true\` or \`false\`. A comparison like \`mbot.getDistance() < 10\` is also \`true\` or \`false\` in the end. + +| Code | Meaning | +|---|---| +| \`boolean dark = false\` | It has not been dark yet. | +| \`dark = true\` | Now it has been dark. | +| \`if (dark)\` | Is \`dark\` true? | + +With \`if (dark)\` you don't need \`== true\`. The variable itself is already true or false. + +## The flag + +The mBot2 should keep watch for three seconds. It measures the brightness again and again. Afterwards it should say whether it was dark **at any point**. + +For this you use a **flag**: a \`boolean\` variable that starts with \`false\`. When it gets dark, you set it to \`true\`. After that nobody sets it back. So after the loop you know: was it dark even just once? + +::: übung vb-wurde-es-dunkel +titel: Did it get dark? +auftrag: Build a structure chart: create \`boolean dark = false\`. In a for loop, check 30 times: if the brightness is less than 20, \`dark\` becomes true. Wait 100 ms in every pass. Then show **It was dark** or **Always bright**. +messwerte: getBrightness=80/10/80 -> none, screen "It was dark" +messwerte: getBrightness=80 -> none, screen "Always bright" +braucht: forSchleife, verzweigung +tipp: Inside the loop is a branch with \`mbot.getBrightness() < 20\`. The yes branch has \`dark = true\`, the no branch stays empty. Then comes \`mbot.pause(100)\`. +tipp: After the loop comes a second branch with the condition \`dark\`. Yes: \`mbot.showText("It was dark")\`, no: \`mbot.showText("Always bright")\`. +lösung: vb-wurde-es-dunkel-loesung.visustruct +::: + +> When checking, it gets dark for a moment in the middle of the watch and then bright again. Does your mBot2 still show **It was dark**? + +## Now in Java: was there a clap? + +In Java the flag looks like this: + +\`\`\`java +boolean loud = false; +for (int i = 0; i < 30; i++) { + if (mbot.getLoudness() > 60) { + loud = true; + } + mbot.pause(100); +} +\`\`\` + +In Java you always write \`true\` and \`false\` in lower case. + +::: übung vb-java-klatsch-merker +titel: Was there a clap? +code: java +auftrag: Write in Java: the mBot2 listens for three seconds (30 times with a 100 ms pause). If the loudness is ever greater than 60, it remembers this in \`boolean loud\`. Then it shows **Clap!** or **All quiet**. +messwerte: getLoudness=0/90/0 -> none, screen "Clap!" +messwerte: getLoudness=0 -> none, screen "All quiet" +braucht: forSchleife, verzweigung +tipp: Take the code above and then write \`if (loud) { … } else { … }\`. +tipp: The branches get \`mbot.showText("Clap!");\` and \`mbot.showText("All quiet");\`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +::: übung vb-fehler-11-merker-boolean +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Was there a clap?", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-11-merker-boolean-start.visustruct +messwerte: getLoudness=0/90/0 -> none, screen "Clap!" +messwerte: getLoudness=0 -> none, screen "All quiet" +tipp: The error message names an unknown variable. How do you write true and false in Java? Java is case-sensitive. +tipp: It should be \`loud = true\`. +lösung: vb-java-klatsch-merker-loesung.visustruct +::: + +## Game: true or false? + +::: spiel frage +titel: Game: true or false? +intro: Ludwig asks what the condition comes out as. Six rounds. +frage: Is it true or false? +antworten: true | false + +runde: +frage: \`mbot.getDistance() < 10\`, the distance is 25 cm. +richtig: false +> 25 is not less than 10. + +runde: +frage: \`mbot.isButtonA()\`, and you are pressing button A right now. +richtig: true +> The sensor reports: pressed. + +runde: +frage: \`boolean dark = false\`. It never gets dark in the loop. What is \`dark\` afterwards? +richtig: false +> Nobody set the flag to \`true\`. + +runde: +frage: \`boolean dark = false\`. It gets dark once in the loop, then bright again. What is \`dark\` afterwards? +richtig: true +> A flag stays \`true\` once it has been set. + +runde: +frage: \`mbot.getBrightness() > 50\`, the brightness is 50. +richtig: false +> 50 is not greater than 50. + +runde: +frage: \`!mbot.isButtonA()\`, and you are not pressing button A. +richtig: true +> Button A is not pressed, so \`false\`. The \`!\` turns it around: \`true\`. +::: + +::: quiz +? Which values can a variable of type \`boolean\` have? +→ True or false +- [ ] Any whole number +- [x] Only \`true\` and \`false\` +- [ ] Only 0 and 1 +? What does a flag start with? +→ The flag +- [x] With \`false\`, because nothing has happened yet +- [ ] With \`true\` +- [ ] With the first reading +> Only when the event happens does it become \`true\`. +? How do you check in Java whether the flag \`loud\` is true? +→ Now in Java: was there a clap? +- [x] \`if (loud)\` +- [ ] \`if (loud = true)\` +- [ ] \`if loud\` +> \`loud\` itself is already true or false. A single \`=\` would be an assignment. +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can create a variable of type \`boolean\`. → True or false +- I can use a flag to remember whether something happened. → The flag +- I can check a flag in a condition after the loop. → Now in Java: was there a clap? +::: +`,kw=`--- titel: The microphone bereich: Sensors and decisions kurz: Clap to start, and a noise light for the classroom. @@ -45998,7 +47751,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can wait until something happens. → Clap to start in the structure chart - I can write a noise light in Java. → Now in Java: noise light ::: -`,gw=`--- +`,Sw=`--- titel: The motion sensor bereich: Sensors and decisions kurz: Measure tilt and detect shaking. @@ -46097,7 +47850,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can join two conditions with “or”. → Tilt warning in the structure chart - I can join several conditions with “and”. → Now in Java: spirit level ::: -`,pw=`--- +`,Tw=`--- titel: The LEDs bereich: Light, sound and screen kurz: Mix colours, build a traffic light and make it blink. @@ -46195,7 +47948,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can show colours one after the other with pauses. → Traffic light in the structure chart - I can make the LEDs blink in Java. → Now in Java: blue light ::: -`,fw=`--- +`,_w=`--- titel: Single LEDs bereich: Light, sound and screen kurz: Each of the five LEDs gets its own colour, all the way to a running light. @@ -46293,7 +48046,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can make single LEDs light up in different colours. → Three lights in the structogram - I can build a running light with a loop. → Now in Java: running light ::: -`,xw=`--- +`,jw=`--- titel: The speaker bereich: Light, sound and screen kurz: Tones, a scale and a siren. @@ -46408,7 +48161,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can calculate with the counting variable in Java. → Now in Java: higher and higher - I can make the mBot2 show a feeling. → Showing feelings ::: -`,bw=`--- +`,Cw=`--- titel: Arrays and melodies bereich: Light, sound and screen kurz: Store many values in one array and work through them with a loop. @@ -46536,7 +48289,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can use an array of texts in Java. → Now in Java: rainbow - I can collect measurements in an array and work out the average. → Now in Java: measurement series ::: -`,vw=`--- +`,Aw=`--- titel: The screen bereich: Light, sound and screen kurz: Show text, numbers and sensor values on the CyberPi. @@ -46635,7 +48388,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can show numbers and sensor values. → Numbers and sensor values - I can write a countdown in Java. → Now in Java: countdown ::: -`,yw=`--- +`,Pw=`--- titel: Strings bereich: Light, sound and screen kurz: Work with texts, pick out letters and show them on the screen. @@ -46750,7 +48503,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can join texts and numbers with \`+\`. → Now in Java: text and length - I can get single characters with \`charAt(…)\`. → Now in Java: scrolling text ::: -`,ww=`--- +`,Ow=`--- titel: Motors and speed bereich: Motors and methods kurz: Step on the gas, steer and follow a line. @@ -46863,7 +48616,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive until a sensor reports something. → Full speed to the wall in the structure chart - I can write a line follower in Java. → Now in Java: line follower ::: -`,zw=`--- +`,Dw=`--- titel: Stopwatch and battery bereich: Motors and methods kurz: Measure time and keep an eye on the battery. @@ -46966,7 +48719,163 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can drive for a certain time. → Driving two seconds in the structure chart - I can show the battery level. → Now in Java: battery display ::: -`,Iw=`--- +`,Bw=`--- +titel: States: what am I doing right now? +bereich: Motors and methods +kurz: Switch a robo traffic light on with a state variable and a switch. +--- + +## Skills I will gain now + +::: kompetenzen +- explain what a state is +- act depending on the state with a switch and change to the next state +- tell states apart in Java with names and \`.equals\` +::: + +## What is a state? + +A traffic light is always in exactly one **state**: red, green or yellow. In each state it knows two things: what do I show? And what comes next? + +Our robo traffic light has three states. Each gets a number: + +| State | LEDs | next | +|---|---|---| +| 0 | red | 1 | +| 1 | green | 2 | +| 2 | yellow | 0 | + +You store the current state in a variable: \`int state = 0\`. A variable like this is called a **state variable**. A program that jumps from state to state like this is called a **state machine**. + +> A real traffic light in Germany has four states: red, red-yellow, green, yellow. Our robo traffic light leaves out red-yellow. + +::: angeberwissen +A robot vacuum is a state machine too: vacuuming, avoiding, driving back to the charging station. I only have two states: eating and sleeping. +::: + +## The robo traffic light in the structure chart + +The switch fits perfectly: there is one case for each state. Each case has two boxes: what do I do? And which state comes next? + +::: übung vb-ampel-zustand +titel: Robo traffic light +auftrag: Build a structure chart: create \`int state = 0\`. A for loop runs six times. Inside it is a switch on \`state\`. Case 0: LEDs red, \`state = 1\`. Case 1: LEDs green, \`state = 2\`. Otherwise: LEDs yellow, \`state = 0\`. After the switch the mBot2 waits one second. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, fallauswahl +tipp: You will find the switch among the Elements. Write \`state\` into it. The cases are called 0, 1 and default. +tipp: The colours are \`mbot.setLed(255, 0, 0)\` for red, \`mbot.setLed(0, 255, 0)\` for green and \`mbot.setLed(255, 200, 0)\` for yellow. Below the switch, still inside the loop, is \`mbot.pause(1000)\`. +lösung: vb-ampel-zustand-loesung.visustruct +::: + +> 📘 **More without the robot:** VisuStruct has the lesson ["Switch"](?visustruct&lektion=10-fallauswahl). It opens in a new window. + +## Now in Java: states with names + +Numbers are easy to forget. What was state 2 again? Names are easier to read. Then the state is a text: + +\`\`\`java +String state = "red"; +... +if (state.equals("red")) { + mbot.setLed(255, 0, 0); + state = "green"; +} else if (state.equals("green")) { + ... +\`\`\` + +In Java you compare texts with \`.equals("…")\`, not with \`==\`. + +::: übung vb-java-ampel-text +titel: Traffic light with names +code: java +auftrag: Write the robo traffic light in Java with \`String state = "red";\`. Use \`if\` and \`else if\` to check which state the light is in: red, then green, then yellow, then red again. The loop runs six times, with a 1 second pause after each pass. +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +braucht: forSchleife, verzweigung +tipp: Inside the loop: \`if (state.equals("red")) { … } else if (state.equals("green")) { … } else { … }\` and then \`mbot.pause(1000);\`. +tipp: In the red case are \`mbot.setLed(255, 0, 0);\` and \`state = "green";\`. Green switches to \`"yellow"\`, yellow back to \`"red"\`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +::: übung vb-fehler-21-zustaende +titel: Why doesn't it run? +code: java +auftrag: Ludwig typed in "Traffic light with names", but the program does not run. "Open in editor" shows the code in the Code area. Click "Run" and read the error message. Fix the mistake and click Check. +start: vb-fehler-21-zustaende-start.visustruct +befehle: 2 x (setLed 255 0 0, pause 1000, setLed 0 255 0, pause 1000, setLed 255 200 0, pause 1000) +tipp: A text belongs in quotation marks. Without them Java looks for a variable with that name. +tipp: It should be \`state = "green"\`. +lösung: vb-java-ampel-text-loesung.visustruct +::: + +## States while driving + +The mBot2 can also drive with states. In the state **drive** it drives forward. When it sees a wall, it changes to the state **turn**. There it turns once and changes back to **drive**. + +::: diagramm vb-l21z-ausweichen.visustruct +Driving and avoiding with two states. Open the diagram in the editor and try it out in a world. +::: + +## Game: which state comes now? + +::: spiel frage +titel: Game: which state comes now? +intro: The robo traffic light switches: 0 red → 1 green → 2 yellow → 0 red. Which state comes next? Five rounds. +frage: Which state comes next? +antworten: 0 | 1 | 2 + +runde: +frage: The light is in state **0** (red) right now. +richtig: 1 +> After red comes green. + +runde: +frage: The light is in state **2** (yellow) right now. +richtig: 0 +> After yellow it starts all over again. + +runde: +frage: The light is in state **1** (green) right now. +richtig: 2 +> After green comes yellow. + +runde: +frage: The light starts in state 0 and switches on **twice**. +richtig: 2 +> 0 → 1 → 2. + +runde: +frage: The light starts in state 0 and switches on **three times**. +richtig: 0 +> 0 → 1 → 2 → 0. After three steps it is back at the start. +::: + +::: quiz +? What does a state variable store? +→ What is a state? +- [ ] How often the loop has run +- [x] What the program is doing right now, for example red or green +- [ ] The biggest reading +? What is in each case of the switch? +→ The robo traffic light in the structure chart +- [x] What to do and which state comes next +- [ ] Only a pause +- [ ] A new loop +? How do you check in Java whether \`state\` contains the text \`"red"\`? +→ Now in Java: states with names +- [ ] \`state == red\` +- [x] \`state.equals("red")\` +- [ ] \`state = "red"\` +> You compare texts with \`.equals\`. A single \`=\` would assign \`"red"\`. +::: + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can explain what a state is. → What is a state? +- I can act depending on the state with a switch and change to the next state. → The robo traffic light in the structure chart +- I can tell states apart in Java with names and \`.equals\`. → Now in Java: states with names +::: +`,Mw=`--- titel: Your own methods bereich: Motors and methods kurz: Write and call your own commands with parameters and return values. @@ -47143,7 +49052,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can recognise and call an overloaded method. → Same name, different parameters: overloading - I can write a method with a return value. → A method with a return value ::: -`,kw=`## 🤖 mBot2 commands +`,Zw=`## 🤖 mBot2 commands A command tells the mBot2 what to **do**. Every command starts with \`mbot.\` and ends with brackets. Often you write a number in the brackets. @@ -47311,7 +49220,7 @@ With **🔌 mBot2** next to "Start simulation" you connect the real robot with t ### Driving without a cable With **⬆ Upload** you save your program on the mBot2. Then unplug the cable, put the mBot2 at the start and press **button A**: it drives your program on its own. It stays saved until you upload a new one. Keyboard inputs do not work on the mBot2. -`,Sw=`--- +`,Lw=`--- titel: Die Alarmanlage nach: 16 stufe: 2 @@ -47330,7 +49239,7 @@ tipp: Außen steht eine While-Schleife mit \`!mbot.isButtonB()\`. Darin eine Ver tipp: Die Bedingung der Verzweigung: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. Im Ja-Zweig \`mbot.setLed(255, 0, 0)\` und \`mbot.playTone(880, 200)\`, im Nein-Zweig \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,Tw=`--- +`,Ww=`--- titel: Labyrinth mit Ausgängen nach: 5 stufe: 3 @@ -47349,7 +49258,7 @@ tipp: In jedem Durchlauf dreht sich der mBot2 zuerst nach links und misst. Ist o tipp: Durch die Lücke sind es zwei Felder bis in den nächsten Gang. Danach soll er wieder nach rechts schauen. Ist oben eine Wand, dreht er sich zurück und fährt ein Feld weiter. lösung: vb-ausgang-loesung.visustruct ::: -`,_w=`--- +`,Ew=`--- titel: Binär zählen nach: 15 stufe: 3 @@ -47374,7 +49283,7 @@ tipp: Ob LED 0 an ist, verrät der Rest beim Teilen durch 2: \`zahl % 2 == 1\`. tipp: In der Schleife stehen drei Verzweigungen und danach **kurz warten**. Im Ja-Zweig zum Beispiel \`mbot.led(0).setColor("grün")\`, im Nein-Zweig \`mbot.led(0).setColor("aus")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,jw=`--- +`,Nw=`--- titel: Das Dreieck nach: 2 stufe: 1 @@ -47397,7 +49306,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen Die Idee, mit einem fahrenden Roboter Figuren zu zeichnen, ist über 50 Jahre alt: Ende der 1960er-Jahre entstand die Sprache **Logo**. Kinder steuerten damit eine „Schildkröte“, die mit einem Stift über das Papier fuhr. ::: -`,Cw=`--- +`,Fw=`--- titel: Rückwärts einparken nach: 16 stufe: 2 @@ -47417,7 +49326,7 @@ tipp: Zwei While-Schleifen hintereinander: erst \`!mbot.getColor().equals("blau" tipp: Am Ende: \`mbot.setLed(0, 255, 0)\` und \`mbot.showText("Geparkt!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,Aw='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',Pw=`--- +`,Jw='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',Rw=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -47434,7 +49343,7 @@ tipp: Die erste Schleife zählt \`i\` von 0 bis 4 hoch. Die zweite startet bei 3 tipp: In beiden Schleifen: \`mbot.led(i).setColor("rot")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("aus")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,Ow=`--- +`,Gw=`--- titel: Das Labyrinth nach: 5 stufe: 2 @@ -47459,7 +49368,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen Mit der Regel „Hand immer an der Wand“ findet man aus jedem Labyrinth, dessen Wände alle zusammenhängen. Schon die Griechen erzählten von Theseus, der sich im Labyrinth des Minotaurus mit einem Wollfaden half. ::: -`,Mw='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',Dw=`--- +`,Hw='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',Vw=`--- titel: Morsen nach: 15 stufe: 2 @@ -47476,7 +49385,7 @@ tipp: Drei For-Schleifen hintereinander, jede läuft dreimal. Dazwischen steht j tipp: In der ersten und dritten Schleife: \`mbot.led(2).setColor("weiß")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("aus")\`, \`mbot.pause(200)\`. In der mittleren wartet er nach dem Einschalten 600. lösung: vb-morsen-loesung.visustruct ::: -`,Bw=`--- +`,qw=`--- titel: Der Nachtwächter nach: 18 stufe: 1 @@ -47494,7 +49403,7 @@ tipp: Eine While-Schleife mit \`mbot.getBrightness() < 20\`. Darin \`mbot.forwar tipp: Nach der Schleife steht \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,Zw=`--- +`,Uw=`--- titel: Slalom nach: 2 stufe: 2 @@ -47513,7 +49422,7 @@ tipp: Überlege zuerst, wie der mBot2 oben um einen einzigen Pylon herumfährt: tipp: Unten herum geht genauso, nur mit links und rechts vertauscht. „Oben herum, dann unten herum“ wiederholt sich zweimal. lösung: vb-slalom-loesung.visustruct ::: -`,Lw=`--- +`,Qw=`--- titel: Die Spirale nach: 2 stufe: 2 @@ -47532,7 +49441,7 @@ tipp: Lass die Zählvariable von 1 bis 8 laufen. Wie lang ist dann die Seite in tipp: In der Klammer von **fahre vor** steht eine Rechnung mit der Zählvariable. lösung: vb-spirale-loesung.visustruct ::: -`,Ww=`--- +`,Yw=`--- titel: Die Treppe nach: 2 stufe: 1 @@ -47549,7 +49458,7 @@ tipp: Schreib zuerst eine Stufe auf. Dann packst du sie in eine For-Schleife, di tipp: In der Schleife: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,Ew=`--- +`,$w=`--- titel: Der Tunnelsucher nach: 5 stufe: 3 @@ -47570,7 +49479,7 @@ tipp: In jedem Durchlauf fährt der mBot2 ein Feld vor und schaut sich dann nach tipp: Hier passt eine Schleife, die erst fährt und danach prüft. Sie läuft weiter, solange links **oder** rechts mindestens 20 cm frei ist: \`links >= 20 || rechts >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,Nw=`--- +`,Xw=`--- titel: Kleeblatt im Wald nach: 5 stufe: 2 @@ -47589,7 +49498,7 @@ tipp: Wie bei „Fahre bis zum Ziel“ läuft außen eine Schleife, bis der Lini tipp: Um einen Baum herum: nach links drehen, ein Feld vor, nach rechts drehen, zwei Felder vor, nach rechts drehen, ein Feld vor, nach links drehen. lösung: vb-wald-loesung.visustruct ::: -`,Fw=`--- +`,Kw=`--- titel: The alarm system nach: 16 stufe: 2 @@ -47608,7 +49517,7 @@ tipp: On the outside is a while loop with \`!mbot.isButtonB()\`. Inside a branch tipp: The condition of the branch: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. In the yes branch \`mbot.setLed(255, 0, 0)\` and \`mbot.playTone(880, 200)\`, in the no branch \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,Jw=`--- +`,e5=`--- titel: Maze with exits nach: 5 stufe: 3 @@ -47627,7 +49536,7 @@ tipp: In each pass the mBot2 first turns left and measures. If the way up is fre tipp: Through the gap it is two squares into the next corridor. Afterwards it should face right again. If there is a wall above, it turns back and drives one square further. lösung: vb-ausgang-loesung.visustruct ::: -`,Rw=`--- +`,t5=`--- titel: Counting in binary nach: 15 stufe: 3 @@ -47652,7 +49561,7 @@ tipp: Whether LED 0 is on is given by the remainder when dividing by 2: \`number tipp: The loop contains three branches and then **wait a moment**. In the yes branch, for example, \`mbot.led(0).setColor("green")\`, in the no branch \`mbot.led(0).setColor("off")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,Gw=`--- +`,n5=`--- titel: The triangle nach: 2 stufe: 1 @@ -47675,7 +49584,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen The idea of drawing shapes with a driving robot is more than 50 years old: the language **Logo** was created in the late 1960s. Children used it to steer a "turtle" that rolled across paper with a pen. ::: -`,Hw=`--- +`,i5=`--- titel: Reverse parking nach: 16 stufe: 2 @@ -47695,7 +49604,7 @@ tipp: Two while loops one after the other: first \`!mbot.getColor().equals("blue tipp: At the end: \`mbot.setLed(0, 255, 0)\` and \`mbot.showText("Parked!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,Vw='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',Qw=`--- +`,a5='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',s5=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -47712,7 +49621,7 @@ tipp: The first loop counts \`i\` up from 0 to 4. The second starts at 3 and cou tipp: In both loops: \`mbot.led(i).setColor("red")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("off")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,qw=`--- +`,r5=`--- titel: The maze nach: 5 stufe: 2 @@ -47737,7 +49646,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen With the rule "always keep one hand on the wall" you get out of any maze whose walls are all connected. The ancient Greeks already told of Theseus, who found his way through the Minotaur's labyrinth with a ball of thread. ::: -`,Uw='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',Yw=`--- +`,o5='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',l5=`--- titel: Morse code nach: 15 stufe: 2 @@ -47754,7 +49663,7 @@ tipp: Three for loops one after the other, each runs three times. Between them t tipp: In the first and third loop: \`mbot.led(2).setColor("white")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("off")\`, \`mbot.pause(200)\`. In the middle one it waits 600 after switching on. lösung: vb-morsen-loesung.visustruct ::: -`,$w=`--- +`,u5=`--- titel: The night watchman nach: 18 stufe: 1 @@ -47772,7 +49681,7 @@ tipp: A while loop with \`mbot.getBrightness() < 20\`. Inside \`mbot.forward(30) tipp: After the loop is \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,Xw=`--- +`,m5=`--- titel: Slalom nach: 2 stufe: 2 @@ -47791,7 +49700,7 @@ tipp: First think about how the mBot2 drives around a single cone on the top sid tipp: Around the bottom works the same way, only with left and right swapped. "Top, then bottom" repeats twice. lösung: vb-slalom-loesung.visustruct ::: -`,Kw=`--- +`,c5=`--- titel: The spiral nach: 2 stufe: 2 @@ -47810,7 +49719,7 @@ tipp: Let the counter variable run from 1 to 8. How long is the side in each pas tipp: The brackets of **drive forward** contain a calculation with the counter variable. lösung: vb-spirale-loesung.visustruct ::: -`,e5=`--- +`,d5=`--- titel: The staircase nach: 2 stufe: 1 @@ -47827,7 +49736,7 @@ tipp: Write down one step first. Then put it into a for loop that runs three tim tipp: Inside the loop: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,t5=`--- +`,h5=`--- titel: The tunnel finder nach: 5 stufe: 3 @@ -47848,7 +49757,7 @@ tipp: In each pass the mBot2 drives one square forward and then looks left and r tipp: A loop that drives first and checks afterwards fits here. It keeps going as long as at least 20 cm are free on the left **or** on the right: \`left >= 20 || right >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,n5=`--- +`,g5=`--- titel: Clover in the forest nach: 5 stufe: 2 @@ -47867,7 +49776,7 @@ tipp: As in "Drive to the goal", a loop on the outside runs until the line senso tipp: Around a tree: turn left, one square forward, turn right, two squares forward, turn right, one square forward, turn left. lösung: vb-wald-loesung.visustruct ::: -`,i5=` +`,p5=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;34; @@ -47879,7 +49788,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;117;102;32;87;105;101;100;101;114;115;101;104;101;110;34; -`,a5=` +`,f5=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -47898,7 +49807,7 @@ lösung: vb-wald-loesung.visustruct -`,s5=` +`,x5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -47979,7 +49888,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,r5=` +`,b5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -47988,7 +49897,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,o5=` +`,v5=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -48053,7 +49962,7 @@ lösung: vb-wald-loesung.visustruct -`,l5=` +`,y5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;71;97;110;122;101;32;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -48079,7 +49988,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;101;114; -`,u5=` +`,w5=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -48133,13 +50042,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,m5=` +`,z5=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,c5=` +`,I5=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;101;108;99;104;101;115;32;87;111;114;116;32;40;110;117;114;32;71;114;111;223;98;117;99;104;115;116;97;98;101;110;41;63;34; @@ -48170,7 +50079,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,d5=` +`,k5=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;103;101;104;101;105;109;32;34;87;101;108;99;104;101;114;32;71;101;104;101;105;109;116;101;120;116;63;34; @@ -48201,7 +50110,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;107;108;97;114;116;101;120;116; -`,h5=` +`,S5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -48237,7 +50146,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101; -`,g5=` +`,T5=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;78;111;116;101;110;63;34; @@ -48265,7 +50174,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;110;105;116;116; -`,p5=` +`,_5=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;90;97;104;108;101;110;63;34; @@ -48302,7 +50211,7 @@ lösung: vb-wald-loesung.visustruct -`,f5=` +`,j5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -48321,7 +50230,7 @@ lösung: vb-wald-loesung.visustruct -`,x5=` +`,C5=` 99;111;110;115;116;32;100;111;117;98;108;101;32;77;87;83;84;32;61;32;48;46;49;57; @@ -48342,7 +50251,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;114;117;116;116;111;112;114;101;105;115; -`,b5=` +`,A5=` 105;110;116;32;112;105;110;32;61;32;48; @@ -48378,7 +50287,7 @@ lösung: vb-wald-loesung.visustruct -`,v5=` +`,P5=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -48414,7 +50323,7 @@ lösung: vb-wald-loesung.visustruct -`,y5=` +`,O5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;49;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -48458,7 +50367,7 @@ lösung: vb-wald-loesung.visustruct -`,w5=` +`,D5=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -48512,7 +50421,7 @@ lösung: vb-wald-loesung.visustruct -`,z5=` +`,B5=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -48539,7 +50448,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;115;112;97;108;116;101;110;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,I5=` +`,M5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;109;101;114;32;34;87;101;108;99;104;101;115;32;71;101;114;105;99;104;116;63;32;40;49;44;32;50;32;111;100;101;114;32;51;41;34; @@ -48568,7 +50477,7 @@ lösung: vb-wald-loesung.visustruct -`,k5=` +`,Z5=` 105;110;116;32;122;97;104;108;49;32;61;32;52; @@ -48583,7 +50492,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,S5=` +`,L5=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -48605,7 +50514,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;97;102;101;108;100;105;101;110;115;116;58;32;34;32;43;32;110;97;109;101;110;91;110;117;109;109;101;114;32;45;32;49;93; -`,T5=` +`,W5=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -48617,7 +50526,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;100;111;112;112;101;108;116;101;32;90;97;104;108;58;32;34;32;43;32;122;97;104;108; -`,_5=` +`,E5=` -1; @@ -48664,7 +50573,7 @@ lösung: vb-wald-loesung.visustruct -`,j5=` +`,N5=` @@ -48701,7 +50610,7 @@ lösung: vb-wald-loesung.visustruct -`,C5=` +`,F5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -48761,7 +50670,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;99;104;116;105;103;32;43;32;34;32;118;111;110;32;34;32;43;32;97;110;122;97;104;108;32;43;32;34;32;114;105;99;104;116;105;103;34; -`,A5=` +`,J5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -48770,7 +50679,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,P5=` +`,R5=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -48789,7 +50698,7 @@ lösung: vb-wald-loesung.visustruct -`,O5=` +`,G5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -48812,7 +50721,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,M5=` +`,H5=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -48830,7 +50739,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;104;97;116;32;105;110;32;77;97;116;104;101;32;101;105;110;101;32;34;32;43;32;109;97;116;104;101; -`,D5=` +`,V5=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;97;114;116;92;34;58;32;92;34;90;105;101;103;101;92;34;44;32;92;34;97;108;116;101;114;92;34;58;32;54;125;44;34; @@ -48848,7 +50757,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,B5=` +`,q5=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -48868,7 +50777,7 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,Z5=` +`,U5=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;34; @@ -48880,7 +50789,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;111;100;98;121;101;34; -`,L5=` +`,Q5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -48899,7 +50808,7 @@ lösung: vb-wald-loesung.visustruct -`,W5=` +`,Y5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -48980,7 +50889,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,E5=` +`,$5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -48989,7 +50898,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,N5=` +`,X5=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -49054,7 +50963,7 @@ lösung: vb-wald-loesung.visustruct -`,F5=` +`,K5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;119;104;111;108;101;32;110;117;109;98;101;114;34; @@ -49080,7 +50989,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;121; -`,J5=` +`,ez=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -49134,13 +51043,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,R5=` +`,tz=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,G5=` +`,nz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;87;104;105;99;104;32;119;111;114;100;32;40;99;97;112;105;116;97;108;32;108;101;116;116;101;114;115;32;111;110;108;121;41;63;34; @@ -49171,7 +51080,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,H5=` +`,iz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;99;114;101;116;32;34;87;104;105;99;104;32;115;101;99;114;101;116;32;116;101;120;116;63;34; @@ -49202,7 +51111,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;108;97;105;110; -`,V5=` +`,az=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;115;116;97;114;116;32;110;117;109;98;101;114;34; @@ -49238,7 +51147,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115; -`,Q5=` +`,sz=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;103;114;97;100;101;115;63;34; @@ -49266,7 +51175,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;118;101;114;97;103;101; -`,q5=` +`,rz=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;110;117;109;98;101;114;115;63;34; @@ -49303,7 +51212,7 @@ lösung: vb-wald-loesung.visustruct -`,U5=` +`,oz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -49322,7 +51231,7 @@ lösung: vb-wald-loesung.visustruct -`,Y5=` +`,lz=` 99;111;110;115;116;32;100;111;117;98;108;101;32;86;65;84;32;61;32;48;46;49;57; @@ -49343,7 +51252,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;114;111;115;115;80;114;105;99;101; -`,$5=` +`,uz=` 105;110;116;32;112;105;110;32;61;32;48; @@ -49379,7 +51288,7 @@ lösung: vb-wald-loesung.visustruct -`,X5=` +`,mz=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -49415,7 +51324,7 @@ lösung: vb-wald-loesung.visustruct -`,K5=` +`,cz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;49;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -49459,7 +51368,7 @@ lösung: vb-wald-loesung.visustruct -`,ez=` +`,dz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -49513,7 +51422,7 @@ lösung: vb-wald-loesung.visustruct -`,tz=` +`,hz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -49540,7 +51449,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;109;110;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,nz=` +`,gz=` 105;110;112;117;116;58;32;105;110;116;32;112;105;99;107;32;34;87;104;105;99;104;32;100;105;115;104;63;32;40;49;44;32;50;32;111;114;32;51;41;34; @@ -49569,7 +51478,7 @@ lösung: vb-wald-loesung.visustruct -`,iz=` +`,pz=` 105;110;116;32;110;117;109;98;101;114;49;32;61;32;52; @@ -49584,7 +51493,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,az=` +`,fz=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -49606,7 +51515,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;111;97;114;100;32;100;117;116;121;58;32;34;32;43;32;110;97;109;101;115;91;112;105;99;107;32;45;32;49;93; -`,sz=` +`,xz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -49618,7 +51527,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;111;117;98;108;101;100;32;110;117;109;98;101;114;58;32;34;32;43;32;110;117;109;98;101;114; -`,rz=` +`,bz=` -1; @@ -49665,7 +51574,7 @@ lösung: vb-wald-loesung.visustruct -`,oz=` +`,vz=` @@ -49702,7 +51611,7 @@ lösung: vb-wald-loesung.visustruct -`,lz=` +`,yz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -49762,7 +51671,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;103;104;116;32;43;32;34;32;111;102;32;34;32;43;32;99;111;117;110;116;32;43;32;34;32;114;105;103;104;116;34; -`,uz=` +`,wz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -49771,7 +51680,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,mz=` +`,zz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -49790,7 +51699,7 @@ lösung: vb-wald-loesung.visustruct -`,cz=` +`,Iz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -49813,7 +51722,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,dz=` +`,kz=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -49831,7 +51740,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;103;111;116;32;97;32;34;32;43;32;109;97;116;104;115;32;43;32;34;32;105;110;32;109;97;116;104;115;34; -`,hz=` +`,Sz=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;115;112;101;99;105;101;115;92;34;58;32;92;34;103;111;97;116;92;34;44;32;92;34;97;103;101;92;34;58;32;54;125;44;34; @@ -49849,7 +51758,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,gz=` +`,Tz=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -49869,7 +51778,7 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,pz=` +`,_z=` 105;110;116;91;93;91;93;32;116;97;98;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -49901,7 +51810,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,fz=` +`,jz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -49949,7 +51858,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;101;58;32;34;32;43;32;102;114;101;101; -`,xz=` +`,Cz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -49964,7 +51873,7 @@ lösung: vb-wald-loesung.visustruct 115;101;97;116;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,bz=` +`,Az=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -49998,7 +51907,7 @@ lösung: vb-wald-loesung.visustruct -`,vz=` +`,Pz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -50016,7 +51925,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;115;101;97;116;32;34;83;101;97;116;34; -`,yz=` +`,Oz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -50064,7 +51973,7 @@ lösung: vb-wald-loesung.visustruct -`,wz=` +`,Dz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -50088,7 +51997,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;111;119;32;49;44;32;115;101;97;116;32;50;32;115;111;108;100;63;32;34;32;43;32;115;101;97;116;115;91;49;93;91;50;93; -`,zz=` +`,Bz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -50103,7 +52012,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; -`,Iz=` +`,Mz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -50118,7 +52027,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; -`,kz=` +`,Zz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -50133,7 +52042,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,Sz=` +`,Lz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -50148,7 +52057,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,Tz=` +`,Wz=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -50160,7 +52069,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;97;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34; -`,_z=` +`,Ez=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -50172,7 +52081,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;65;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34;41; -`,jz=` +`,Nz=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -50190,7 +52099,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,Cz=` +`,Fz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -50205,7 +52114,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,Az=` +`,Jz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;50; @@ -50220,7 +52129,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,Pz=` +`,Rz=` 111;117;116;112;117;116;58;32;110;117;109;98;101;114; @@ -50235,7 +52144,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;43;32;51; -`,Oz=` +`,Gz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -50259,7 +52168,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,Mz=` +`,Hz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -50274,7 +52183,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,Dz=` +`,Vz=` 105;110;116;32;97;32;61;32;53; @@ -50298,7 +52207,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,Bz=` +`,qz=` 105;110;116;32;97;103;101;32;61;32;49;52; @@ -50316,7 +52225,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,Zz=` +`,Uz=` 105;110;116;32;109;105;110;117;116;101;115;32;61;32;49;51;53; @@ -50331,7 +52240,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;117;114;115;32;43;32;34;32;104;111;117;114;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;109;105;110;117;116;101;115;34; -`,Lz=` +`,Qz=` 105;110;116;32;99;111;117;110;116;32;61;32;51; @@ -50346,7 +52255,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108;80;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,Wz=` +`,Yz=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -50361,7 +52270,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;101;102;116;58;32;34;32;43;32;99;114;101;100;105;116; -`,Ez=` +`,$z=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -50376,7 +52285,7 @@ lösung: vb-wald-loesung.visustruct 99;114;101;100;105;116;32;61;32;99;114;101;100;105;116;32;45;32;112;114;105;99;101; -`,Nz=` +`,Xz=` 105;110;116;32;112;114;105;99;101;32;61;32;57; @@ -50391,7 +52300,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,Fz=` +`,Kz=` 105;110;116;32;115;108;105;99;101;115;32;61;32;56; @@ -50406,7 +52315,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;80;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; -`,Jz=` +`,e6=` 105;110;116;32;115;108;105;99;101;115;32;61;32;56; @@ -50421,7 +52330,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;112;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; -`,Rz=` +`,t6=` 105;110;116;32;108;101;110;103;116;104;32;61;32;55; @@ -50442,7 +52351,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;105;109;101;116;101;114;58;32;34;32;43;32;112;101;114;105;109;101;116;101;114; -`,Gz=` +`,n6=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -50457,7 +52366,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,Hz=` +`,i6=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -50466,7 +52375,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,Vz=` +`,a6=` 105;110;116;32;108;101;110;103;116;104;32;61;32;53; @@ -50481,7 +52390,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,Qz=` +`,s6=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;104;97;116;32;105;115;32;121;111;117;114;32;110;97;109;101;63;34; @@ -50490,7 +52399,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,qz=` +`,r6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -50505,7 +52414,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,Uz=` +`,o6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -50517,7 +52426,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,Yz=` +`,l6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -50529,7 +52438,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;97;32;43;32;98; -`,$z=` +`,u6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50538,7 +52447,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;97;103;101;32;43;32;49;41; -`,Xz=` +`,m6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50547,7 +52456,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;65;103;101;32;43;32;49;41; -`,Kz=` +`,c6=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;115;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50559,7 +52468,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;116;32;105;115;32;97;98;111;117;116;32;34;32;43;32;100;97;121;115;32;43;32;34;32;100;97;121;115;46;34; -`,e6=` +`,d6=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -50574,7 +52483,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;97;110;58;32;34;32;43;32;109;101;97;110; -`,t6=` +`,h6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -50595,7 +52504,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;99;116;58;32;34;32;43;32;112;114;111;100;117;99;116; -`,n6=` +`,g6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50614,7 +52523,7 @@ lösung: vb-wald-loesung.visustruct -`,i6=` +`,p6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -50636,7 +52545,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,a6=` +`,f6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -50655,7 +52564,7 @@ lösung: vb-wald-loesung.visustruct -`,s6=` +`,x6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -50673,7 +52582,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,r6=` +`,b6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -50691,7 +52600,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,o6=` +`,v6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; @@ -50706,7 +52615,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,l6=` +`,y6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; @@ -50721,7 +52630,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,u6=` +`,w6=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -50739,7 +52648,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,m6=` +`,z6=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -50757,7 +52666,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,c6=` +`,I6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -50779,7 +52688,7 @@ lösung: vb-wald-loesung.visustruct -`,d6=` +`,k6=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;105;99;101;32;34;80;114;105;99;101;32;105;110;32;101;117;114;111;115;63;34; @@ -50801,7 +52710,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;32;112;97;121;58;32;34;32;43;32;112;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,h6=` +`,S6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -50820,7 +52729,7 @@ lösung: vb-wald-loesung.visustruct -`,g6=` +`,T6=` 105;110;112;117;116;58;32;105;110;116;32;112;111;105;110;116;115;32;34;72;111;119;32;109;97;110;121;32;112;111;105;110;116;115;63;34; @@ -50839,7 +52748,7 @@ lösung: vb-wald-loesung.visustruct -`,p6=` +`,_6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50858,7 +52767,7 @@ lösung: vb-wald-loesung.visustruct -`,f6=` +`,j6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50877,7 +52786,7 @@ lösung: vb-wald-loesung.visustruct -`,x6=` +`,C6=` 105;110;116;32;97;103;101;32;61;32;49;53; @@ -50896,7 +52805,7 @@ lösung: vb-wald-loesung.visustruct -`,b6=` +`,A6=` 105;110;116;32;97;103;101;32;61;32;49;53; @@ -50915,7 +52824,7 @@ lösung: vb-wald-loesung.visustruct -`,v6=` +`,P6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -50934,7 +52843,7 @@ lösung: vb-wald-loesung.visustruct -`,y6=` +`,O6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -50953,7 +52862,7 @@ lösung: vb-wald-loesung.visustruct -`,w6=` +`,D6=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;32;34;89;101;97;114;63;34; @@ -50972,7 +52881,7 @@ lösung: vb-wald-loesung.visustruct -`,z6=` +`,B6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;68;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -50991,7 +52900,7 @@ lösung: vb-wald-loesung.visustruct -`,I6=` +`,M6=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;108;111;114;32;34;87;104;97;116;32;99;111;108;111;114;32;105;115;32;116;104;101;32;116;114;97;102;102;105;99;32;108;105;103;104;116;63;34; @@ -51020,7 +52929,7 @@ lösung: vb-wald-loesung.visustruct -`,k6=` +`,Z6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -51049,7 +52958,7 @@ lösung: vb-wald-loesung.visustruct -`,S6=` +`,L6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -51068,7 +52977,7 @@ lösung: vb-wald-loesung.visustruct -`,T6=` +`,W6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -51087,7 +52996,7 @@ lösung: vb-wald-loesung.visustruct -`,_6=` +`,E6=` 105;110;116;32;100;97;121;32;61;32;55; @@ -51106,7 +53015,7 @@ lösung: vb-wald-loesung.visustruct -`,j6=` +`,N6=` 105;110;116;32;100;97;121;32;61;32;55; @@ -51125,7 +53034,7 @@ lösung: vb-wald-loesung.visustruct -`,C6=` +`,F6=` 105;110;112;117;116;58;32;105;110;116;32;104;111;117;114;32;34;87;104;97;116;32;116;105;109;101;32;105;115;32;105;116;32;40;106;117;115;116;32;116;104;101;32;104;111;117;114;41;63;34; @@ -51144,7 +53053,7 @@ lösung: vb-wald-loesung.visustruct -`,A6=` +`,J6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;87;104;105;99;104;32;103;114;97;100;101;63;34; @@ -51188,7 +53097,7 @@ lösung: vb-wald-loesung.visustruct -`,P6=` +`,R6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -51235,7 +53144,7 @@ lösung: vb-wald-loesung.visustruct -`,O6=` +`,G6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -51274,7 +53183,7 @@ lösung: vb-wald-loesung.visustruct -`,M6=` +`,H6=` 80;117;116;32;97;32;99;117;112;32;111;110;32;116;104;101;32;116;97;98;108;101; @@ -51304,7 +53213,7 @@ lösung: vb-wald-loesung.visustruct 68;114;105;110;107;32;116;104;101;32;116;101;97; -`,D6=` +`,V6=` 71;101;116;32;117;112; @@ -51319,7 +53228,7 @@ lösung: vb-wald-loesung.visustruct 72;97;118;101;32;98;114;101;97;107;102;97;115;116; -`,B6=` +`,q6=` 70;105;108;108;32;116;104;101;32;107;101;116;116;108;101;32;119;105;116;104;32;119;97;116;101;114; @@ -51340,7 +53249,7 @@ lösung: vb-wald-loesung.visustruct 84;97;107;101;32;111;117;116;32;116;104;101;32;116;101;97;32;98;97;103; -`,Z6=` +`,U6=` 73;115;32;105;116;32;114;97;105;110;105;110;103;63; @@ -51359,7 +53268,7 @@ lösung: vb-wald-loesung.visustruct 76;101;97;118;101; -`,L6=` +`,Q6=` 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; @@ -51373,7 +53282,7 @@ lösung: vb-wald-loesung.visustruct 67;108;101;97;114;32;116;104;101;32;112;108;97;116;101; -`,W6=` +`,Y6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;117;110;116;32;117;112;32;116;111;63;34; @@ -51393,7 +53302,7 @@ lösung: vb-wald-loesung.visustruct -`,E6=` +`,$6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -51413,7 +53322,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,N6=` +`,X6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -51430,7 +53339,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,F6=` +`,K6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;99;116;111;114;105;97;108;32;111;102;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -51456,7 +53365,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;99;116;111;114;105;97;108; -`,J6=` +`,eI=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -51491,7 +53400,7 @@ lösung: vb-wald-loesung.visustruct -`,R6=` +`,tI=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -51526,7 +53435,7 @@ lösung: vb-wald-loesung.visustruct -`,G6=` +`,nI=` 105;110;116;32;103;114;97;100;101;32;61;32;50; @@ -51550,7 +53459,7 @@ lösung: vb-wald-loesung.visustruct -`,H6=` +`,iI=` 105;110;116;32;103;114;97;100;101;32;61;32;50; @@ -51574,7 +53483,7 @@ lösung: vb-wald-loesung.visustruct -`,V6=` +`,aI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -51603,7 +53512,7 @@ lösung: vb-wald-loesung.visustruct -`,Q6=` +`,sI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -51626,7 +53535,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;101;112;115; -`,q6=` +`,rI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -51643,7 +53552,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;110;107;32;121;111;117;33;34; -`,U6=` +`,oI=` 105;110;116;32;105;32;61;32;49;48; @@ -51660,7 +53569,7 @@ lösung: vb-wald-loesung.visustruct -`,Y6=` +`,lI=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -51686,7 +53595,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,$6=` +`,uI=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -51712,7 +53621,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,X6=` +`,mI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;101;114;101;63;34; @@ -51732,7 +53641,7 @@ lösung: vb-wald-loesung.visustruct -`,K6=` +`,cI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -51752,7 +53661,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,eI=` +`,dI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -51772,7 +53681,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,tI=` +`,hI=` 105;110;116;32;103;114;97;100;101;32;61;32;48; @@ -51789,7 +53698,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;114;32;103;114;97;100;101;58;32;34;32;43;32;103;114;97;100;101; -`,nI=` +`,gI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -51812,7 +53721,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,iI=` +`,pI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -51831,7 +53740,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,aI=` +`,fI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -51850,7 +53759,7 @@ lösung: vb-wald-loesung.visustruct -`,sI=` +`,xI=` 105;110;116;32;105;32;61;32;49; @@ -51863,7 +53772,7 @@ lösung: vb-wald-loesung.visustruct -`,rI=` +`,bI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -51880,7 +53789,7 @@ lösung: vb-wald-loesung.visustruct -`,oI=` +`,vI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -51897,7 +53806,7 @@ lösung: vb-wald-loesung.visustruct -`,lI=` +`,yI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;49; @@ -51917,7 +53826,7 @@ lösung: vb-wald-loesung.visustruct -`,uI=` +`,wI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;49; @@ -51937,7 +53846,7 @@ lösung: vb-wald-loesung.visustruct -`,mI=` +`,zI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -51954,7 +53863,7 @@ lösung: vb-wald-loesung.visustruct -`,cI=` +`,II=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -51976,7 +53885,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,dI=` +`,kI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;108;105;110;101;115;63;34; @@ -52005,7 +53914,7 @@ lösung: vb-wald-loesung.visustruct -`,hI=` +`,SI=` 105;110;116;32;99;111;117;110;116;32;61;32;48; @@ -52037,7 +53946,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,gI=` +`,TI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -52069,7 +53978,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,pI=` +`,_I=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -52085,7 +53994,7 @@ lösung: vb-wald-loesung.visustruct -`,fI=` +`,jI=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -52101,7 +54010,7 @@ lösung: vb-wald-loesung.visustruct -`,xI=` +`,CI=` 105;110;116;32;104;101;105;103;104;116;32;61;32;48; @@ -52120,7 +54029,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; -`,bI=` +`,AI=` 105;110;116;32;115;116;101;112;32;61;32;49; @@ -52136,7 +54045,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; -`,vI=` +`,PI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -52152,7 +54061,7 @@ lösung: vb-wald-loesung.visustruct -`,yI=` +`,OI=` 105;110;112;117;116;58;32;105;110;116;32;119;105;100;116;104;32;34;87;105;100;116;104;34; @@ -52184,7 +54093,7 @@ lösung: vb-wald-loesung.visustruct -`,wI=` +`,DI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -52200,7 +54109,7 @@ lösung: vb-wald-loesung.visustruct -`,zI=` +`,BI=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -52215,7 +54124,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;117;101;115;46;108;101;110;103;116;104; -`,II=` +`,MI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -52247,7 +54156,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,kI=` +`,ZI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -52279,7 +54188,7 @@ lösung: vb-wald-loesung.visustruct -`,SI=` +`,LI=` 105;110;116;32;105;32;61;32;49; @@ -52302,7 +54211,7 @@ lösung: vb-wald-loesung.visustruct -`,TI=` +`,WI=` 105;110;116;32;105;32;61;32;49; @@ -52325,7 +54234,7 @@ lösung: vb-wald-loesung.visustruct -`,_I=` +`,EI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;115;116;101;112;115;63;34; @@ -52354,7 +54263,7 @@ lösung: vb-wald-loesung.visustruct -`,jI=` +`,NI=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -52373,7 +54282,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;114;115;116;32;110;97;109;101;58;32;34;32;43;32;110;97;109;101;115;91;48;93; -`,CI=` +`,FI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -52399,7 +54308,7 @@ lösung: vb-wald-loesung.visustruct -`,AI=` +`,JI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -52450,7 +54359,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,PI=` +`,RI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -52491,7 +54400,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,OI=` +`,GI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -52514,7 +54423,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,MI=` +`,HI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -52544,7 +54453,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,DI=` +`,VI=` 105;110;112;117;116;58;32;105;110;116;32;108;101;110;103;116;104;32;34;76;101;110;103;116;104;63;34; @@ -52559,13 +54468,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;114;101;97;58;32;34;32;43;32;102; -`,BI=` +`,qI=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,ZI=` +`,UI=` 115;104;111;119;71;114;101;101;116;105;110;103;40;41; @@ -52577,7 +54486,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;82;101;115;117;108;116;40;41; -`,LI=` +`,QI=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -52609,7 +54518,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,WI=` +`,YI=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -52641,7 +54550,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,EI=` +`,$I=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -52663,7 +54572,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,NI=` +`,XI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -52685,7 +54594,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,FI=` +`,KI=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -52707,7 +54616,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,JI=` +`,e7=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -52719,7 +54628,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;101;32;115;113;117;97;114;101;32;105;115;32;34;32;43;32;113; -`,RI=` +`,t7=` 105;110;116;32;114;101;115;117;108;116;32;61;32;120;32;42;32;120; @@ -52728,7 +54637,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116; -`,GI=` +`,n7=` 115;104;111;119;84;105;116;108;101;40;41; @@ -52740,7 +54649,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101; -`,HI=` +`,i7=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;32;116;111;32;116;104;101;32;113;117;105;122;33;34; @@ -52749,7 +54658,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;32;103;101;116;32;116;104;114;101;101;32;113;117;101;115;116;105;111;110;115;46;34; -`,VI=` +`,a7=` 115;104;111;119;83;117;109;40;51;44;32;52;41; @@ -52761,7 +54670,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;83;117;109;40;120;44;32;120;32;43;32;49;41; -`,QI=` +`,s7=` 105;110;116;32;115;117;109;32;61;32;97;32;43;32;98; @@ -52770,7 +54679,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109; -`,qI=` +`,r7=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -52793,7 +54702,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,UI=` +`,o7=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -52816,7 +54725,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;34; -`,YI=` +`,l7=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -52838,7 +54747,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,$I=` +`,u7=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -52860,7 +54769,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,XI=` +`,m7=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -52869,7 +54778,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;112;111;105;110;116;115;91;49;93;91;48;93; -`,KI=` +`,c7=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -52878,7 +54787,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;80;111;105;110;116;115;91;49;93;91;48;93; -`,e7=` +`,d7=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -52907,7 +54816,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,t7=` +`,h7=` 105;110;116;32;115;117;109;32;61;32;48; @@ -52930,7 +54839,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,n7=` +`,g7=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -52952,7 +54861,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,i7=` +`,p7=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -52974,7 +54883,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,a7=` +`,f7=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -53006,7 +54915,7 @@ lösung: vb-wald-loesung.visustruct -`,s7=` +`,x7=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -53028,7 +54937,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;99;116;111;114;105;97;108; -`,r7=` +`,b7=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; @@ -53060,13 +54969,13 @@ lösung: vb-wald-loesung.visustruct -`,o7=` +`,v7=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; -`,l7=` +`,y7=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -53078,7 +54987,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,u7=` +`,w7=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -53090,7 +54999,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,m7=` +`,z7=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -53099,7 +55008,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; -`,c7=` +`,I7=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -53108,7 +55017,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; -`,d7=` +`,k7=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;105;110;112;117;116;32;34;80;97;115;115;119;111;114;100;63;34; @@ -53127,7 +55036,7 @@ lösung: vb-wald-loesung.visustruct -`,h7=` +`,S7=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -53156,7 +55065,7 @@ lösung: vb-wald-loesung.visustruct -`,g7=` +`,T7=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;118;97;108;117;101;63;34; @@ -53176,7 +55085,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;34; -`,p7=` +`,_7=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -53209,7 +55118,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,f7=` +`,j7=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -53242,7 +55151,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,x7=` +`,C7=` 105;110;116;32;115;117;109;32;61;32;48; @@ -53284,7 +55193,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;117;109; -`,b7=` +`,A7=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -53306,7 +55215,7 @@ lösung: vb-wald-loesung.visustruct -`,v7=` +`,P7=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -53322,7 +55231,7 @@ lösung: vb-wald-loesung.visustruct -`,y7=` +`,O7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -53361,7 +55270,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,w7=` +`,D7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -53400,7 +55309,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,z7=` +`,B7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -53435,7 +55344,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,I7=` +`,M7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -53470,7 +55379,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,k7=` +`,Z7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -53505,7 +55414,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,S7=` +`,L7=` 111;117;116;112;117;116;58;32;34;71;111;111;100;32;109;111;114;110;105;110;103;34; @@ -53514,13 +55423,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;100;97;121;32;119;101;32;108;101;97;114;110;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;46;34; -`,T7=` +`,W7=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;87;111;114;108;100;34; -`,_7=` +`,E7=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;34; @@ -53529,7 +55438,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;32;97;109;32;108;101;97;114;110;105;110;103;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;34; -`,j7=` +`,N7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -53570,7 +55479,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;108;105;110;101;115;32;115;97;118;101;100;34; -`,C7=` +`,F7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -53579,7 +55488,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;111;117;116;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;115;104;111;112;112;105;110;103;45;110;101;119;46;116;120;116;34;41; -`,A7=` +`,J7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -53605,13 +55514,13 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,P7=` +`,R7=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; -`,O7=` +`,G7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -53650,7 +55559,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;111;120;58;32;34;32;43;32;99;111;117;110;116; -`,M7=` +`,H7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -53659,7 +55568,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,D7=` +`,V7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -53694,7 +55603,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;110;103;101;115;116;32;101;110;116;114;121;58;32;34;32;43;32;108;111;110;103;101;115;116; -`,B7=` +`,q7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -53703,7 +55612,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;101;115;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,Z7=` +`,U7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -53757,7 +55666,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;32;103;114;97;100;101;32;105;110;32;69;110;103;108;105;115;104;58;32;34;32;43;32;98;101;115;116;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;71;114;97;100;101;32;43;32;34;41;34; -`,L7=` +`,Q7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -53766,7 +55675,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,W7=` +`,Y7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -53807,7 +55716,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;116;104;115;32;97;118;101;114;97;103;101;58;32;34;32;43;32;115;117;109;32;47;32;99;111;117;110;116; -`,E7=` +`,$7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -53816,7 +55725,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,N7=` +`,X7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -53855,7 +55764,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,F7=` +`,K7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -53864,7 +55773,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,J7=` +`,ek=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -53914,7 +55823,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;105;101;115;32;115;97;118;101;100;34; -`,R7=` +`,tk=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -53932,7 +55841,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,G7=` +`,nk=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -53985,7 +55894,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;101;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;108;115;32;115;97;118;101;100;34; -`,H7=` +`,ik=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -54006,7 +55915,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,V7=` +`,ak=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -54050,7 +55959,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;115;101;110;116;101;110;99;101;115;32;115;97;118;101;100;34; -`,Q7=` +`,sk=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -54071,7 +55980,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,q7=` +`,rk=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -54083,7 +55992,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,U7=` +`,ok=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -54095,7 +56004,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;99;111;117;110;116;32;42;32;56;46;53; -`,Y7=` +`,lk=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -54119,7 +56028,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,$7=` +`,uk=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -54140,7 +56049,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,X7=` +`,mk=` 105;110;116;32;97;32;61;32;51; @@ -54164,7 +56073,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,K7=` +`,ck=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -54223,7 +56132,7 @@ lösung: vb-wald-loesung.visustruct -`,ek=` +`,dk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -54282,7 +56191,7 @@ lösung: vb-wald-loesung.visustruct -`,tk=` +`,hk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -54356,7 +56265,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,nk=` +`,gk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -54405,7 +56314,7 @@ lösung: vb-wald-loesung.visustruct -`,ik=` +`,pk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -54454,7 +56363,7 @@ lösung: vb-wald-loesung.visustruct -`,ak=` +`,fk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -54512,7 +56421,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,sk=` +`,xk=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -54531,7 +56440,7 @@ lösung: vb-wald-loesung.visustruct -`,rk=` +`,bk=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -54550,7 +56459,7 @@ lösung: vb-wald-loesung.visustruct -`,ok=` +`,vk=` 105;110;116;32;105;32;61;32;48; @@ -54563,7 +56472,7 @@ lösung: vb-wald-loesung.visustruct -`,lk=` +`,yk=` 105;110;116;32;110;117;109;98;101;114;32;61;32;53; @@ -54587,7 +56496,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;102;116;101;114;58;32;34;32;43;32;114;111;119;91;48;93;32;43;32;34;44;32;34;32;43;32;114;111;119;91;49;93; -`,uk=` +`,wk=` 105;110;116;32;105;32;61;32;48; @@ -54600,7 +56509,7 @@ lösung: vb-wald-loesung.visustruct -`,mk=` +`,zk=` 120;32;61;32;120;32;42;32;50; @@ -54609,7 +56518,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;110;32;116;104;101;32;115;117;98;112;114;111;103;114;97;109;58;32;120;32;61;32;34;32;43;32;120; -`,ck=` +`,Ik=` 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -54618,7 +56527,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,dk=` +`,kk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -54644,7 +56553,7 @@ lösung: vb-wald-loesung.visustruct -`,hk=` +`,Sk=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -54671,7 +56580,7 @@ lösung: vb-wald-loesung.visustruct -`,gk=` +`,Tk=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -54689,7 +56598,50 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,pk=` +`,_k=` + + + 105;110;116;32;115;116;97;116;101;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 115;116;97;116;101; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;49; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 115;116;97;116;101;32;61;32;50; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;48; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + +`,jk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -54719,7 +56671,7 @@ lösung: vb-wald-loesung.visustruct -`,fk=` +`,Ck=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;101;108;108;111;33;34;41; @@ -54731,7 +56683,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;32;97;109;32;86;105;115;117;66;111;116;34;41; -`,xk=` +`,Ak=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -54783,7 +56735,7 @@ lösung: vb-wald-loesung.visustruct -`,bk=` +`,Pk=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -54794,7 +56746,7 @@ lösung: vb-wald-loesung.visustruct -`,vk=` +`,Ok=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -54805,7 +56757,7 @@ lösung: vb-wald-loesung.visustruct -`,yk=` +`,Dk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -54816,7 +56768,7 @@ lösung: vb-wald-loesung.visustruct -`,wk=` +`,Bk=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;86;105;115;117;66;111;116;34; @@ -54835,7 +56787,7 @@ lösung: vb-wald-loesung.visustruct -`,zk=` +`,Mk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -54849,7 +56801,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,Ik=` +`,Zk=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;101;100;34;41; @@ -54861,7 +56813,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;101;101;110;34;41; -`,kk=` +`,Lk=` 105;110;116;32;105;32;61;32;48; @@ -54877,7 +56829,7 @@ lösung: vb-wald-loesung.visustruct -`,Sk=` +`,Wk=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -54905,7 +56857,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;80;97;114;107;101;100;33;34;41; -`,Tk=` +`,Ek=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -54923,7 +56875,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,_k=` +`,Nk=` 83;116;114;105;110;103;91;93;32;99;111;108;111;117;114;115;32;61;32;123;34;114;101;100;34;44;32;34;121;101;108;108;111;119;34;44;32;34;103;114;101;101;110;34;44;32;34;98;108;117;101;34;44;32;34;112;117;114;112;108;101;34;125; @@ -54939,7 +56891,7 @@ lösung: vb-wald-loesung.visustruct -`,jk=` +`,Fk=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -54965,7 +56917,7 @@ lösung: vb-wald-loesung.visustruct -`,Ck=` +`,Jk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -54981,7 +56933,7 @@ lösung: vb-wald-loesung.visustruct -`,Ak=` +`,Rk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -54992,7 +56944,7 @@ lösung: vb-wald-loesung.visustruct -`,Pk=` +`,Gk=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -55012,7 +56964,38 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;101;112;115;58;32;34;32;43;32;83;116;101;112;115;41; -`,Ok=` +`,Hk=` + + + 105;110;116;32;115;105;100;101;32;61;32;49;48; + + + 105;110;116;32;116;111;116;97;108;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;105;100;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 116;111;116;97;108;32;61;32;84;111;116;97;108;32;43;32;115;105;100;101; + + + 115;105;100;101;32;61;32;115;105;100;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;116;111;116;97;108;32;43;32;34;32;99;109;34;41; + + +`,Vk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -55026,7 +57009,52 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;41; -`,Mk=` +`,qk=` + + + 99;111;110;115;116;32;105;110;116;32;83;73;68;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;105;100;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + +`,Uk=` + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;78;105;103;104;116;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;117;115;107;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;97;121;34;41; + + + + + + +`,Qk=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -55056,7 +57084,7 @@ lösung: vb-wald-loesung.visustruct -`,Dk=` +`,Yk=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -55070,7 +57098,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;116;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,Bk=` +`,$k=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -55094,7 +57122,48 @@ lösung: vb-wald-loesung.visustruct -`,Zk=` +`,Xk=` + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;100;105;114;101;99;116;105;111;110;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 100;105;115;116;97;110;99;101;32;62;32;109;97;120; + + + 109;97;120;32;61;32;100;105;115;116;97;110;99;101; + + + 100;105;114;101;99;116;105;111;110;32;61;32;73; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;114;101;99;116;105;111;110;58;32;34;32;43;32;100;105;114;101;99;116;105;111;110;41; + + +`,Kk=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -55120,7 +57189,7 @@ lösung: vb-wald-loesung.visustruct -`,Lk=` +`,e8=` 105;110;116;32;105;32;61;32;48; @@ -55153,7 +57222,7 @@ lösung: vb-wald-loesung.visustruct -`,Wk=` +`,t8=` @@ -55180,7 +57249,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;83;116;111;112;112;101;100;41; -`,Ek=` +`,n8=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -55199,7 +57268,49 @@ lösung: vb-wald-loesung.visustruct -`,Nk=` +`,i8=` + + + 98;111;111;108;101;97;110;32;108;111;117;100;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;111;117;100;32;61;32;84;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;111;117;100; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;67;108;97;112;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;32;113;117;105;101;116;34;41; + + + + +`,a8=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -55215,7 +57326,7 @@ lösung: vb-wald-loesung.visustruct -`,Fk=` +`,s8=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -55231,7 +57342,7 @@ lösung: vb-wald-loesung.visustruct -`,Jk=` +`,r8=` 105;110;116;32;105;32;61;32;48; @@ -55253,7 +57364,7 @@ lösung: vb-wald-loesung.visustruct -`,Rk=` +`,o8=` 105;110;116;32;105;32;61;32;48; @@ -55272,7 +57383,7 @@ lösung: vb-wald-loesung.visustruct -`,Gk=` +`,l8=` 105;110;116;32;105;32;61;32;49; @@ -55285,7 +57396,7 @@ lösung: vb-wald-loesung.visustruct -`,Hk=` +`,u8=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -55323,7 +57434,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;118;101;114;97;103;101;58;32;34;32;43;32;97;118;101;114;97;103;101;41; -`,Vk=` +`,m8=` 105;110;116;32;105;32;61;32;51; @@ -55342,7 +57453,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;111;33;34;41; -`,Qk=` +`,c8=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;101;108;108;111;32;99;108;97;115;115;34; @@ -55351,7 +57462,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;84;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,qk=` +`,d8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -55395,7 +57506,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;83;116;111;112;40;41; -`,Uk=` +`,h8=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;66;97;116;116;101;114;121;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -55414,7 +57525,55 @@ lösung: vb-wald-loesung.visustruct -`,Yk=` +`,g8=` + + + 83;116;114;105;110;103;32;115;116;97;116;101;32;61;32;34;114;101;100;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;114;101;100;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;103;114;101;101;110; + + + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;103;114;101;101;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;121;101;108;108;111;119;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;114;101;100;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + +`,p8=` 105;110;116;32;105;32;61;32;48; @@ -55436,7 +57595,7 @@ lösung: vb-wald-loesung.visustruct -`,$k=` +`,f8=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -55453,7 +57612,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,Xk=` +`,x8=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -55471,7 +57630,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,Kk=` +`,b8=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -55507,7 +57666,7 @@ lösung: vb-wald-loesung.visustruct -`,e8=` +`,v8=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;66;97;116;116;101;114;121;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -55526,7 +57685,55 @@ lösung: vb-wald-loesung.visustruct -`,t8=` +`,y8=` + + + 83;116;114;105;110;103;32;115;116;97;116;101;32;61;32;34;114;101;100;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;114;101;100;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;103;114;101;101;110;34; + + + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;103;114;101;101;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;121;101;108;108;111;119;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 115;116;97;116;101;32;61;32;34;114;101;100;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + +`,w8=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -55550,7 +57757,7 @@ lösung: vb-wald-loesung.visustruct -`,n8=` +`,z8=` 105;110;116;32;105;32;61;32;48; @@ -55572,7 +57779,7 @@ lösung: vb-wald-loesung.visustruct -`,i8=` +`,I8=` 105;110;116;32;105;32;61;32;51; @@ -55591,7 +57798,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;111;33;34;41; -`,a8=` +`,k8=` 105;110;116;32;105;32;61;32;49; @@ -55604,7 +57811,7 @@ lösung: vb-wald-loesung.visustruct -`,s8=` +`,S8=` 105;110;116;32;105;32;61;32;48; @@ -55637,7 +57844,68 @@ lösung: vb-wald-loesung.visustruct -`,r8=` +`,T8=` + + + 98;111;111;108;101;97;110;32;108;111;117;100;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;111;117;100;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;111;117;100; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;67;108;97;112;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;32;113;117;105;101;116;34;41; + + + + +`,_8=` + + + 99;111;110;115;116;32;105;110;116;32;83;73;68;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;83;73;68;69;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + +`,j8=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -55653,7 +57921,7 @@ lösung: vb-wald-loesung.visustruct -`,o8=` +`,C8=` 105;110;116;32;105;32;61;32;48; @@ -55672,7 +57940,7 @@ lösung: vb-wald-loesung.visustruct -`,l8=` +`,A8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -55716,7 +57984,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,u8=` +`,P8=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -55735,7 +58003,7 @@ lösung: vb-wald-loesung.visustruct -`,m8=` +`,O8=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -55765,7 +58033,7 @@ lösung: vb-wald-loesung.visustruct -`,c8=` +`,D8=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -55793,7 +58061,7 @@ lösung: vb-wald-loesung.visustruct -`,d8=` +`,B8=` 105;110;116;32;105;32;61;32;48; @@ -55815,7 +58083,48 @@ lösung: vb-wald-loesung.visustruct -`,h8=` +`,M8=` + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;100;105;114;101;99;116;105;111;110;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 100;105;115;116;97;110;99;101;32;62;32;109;97;120; + + + 109;97;120;32;61;32;100;105;115;116;97;110;99;101; + + + 100;105;114;101;99;116;105;111;110;32;61;32;105; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;114;101;99;116;105;111;110;58;32;34;32;43;32;100;105;114;101;99;116;105;111;110;41; + + +`,Z8=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -55835,7 +58144,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115;41; -`,g8=` +`,L8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -55849,7 +58158,64 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,p8=` +`,W8=` + + + 105;110;116;32;115;105;100;101;32;61;32;49;48; + + + 105;110;116;32;116;111;116;97;108;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;105;100;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 116;111;116;97;108;32;61;32;116;111;116;97;108;32;43;32;115;105;100;101; + + + 115;105;100;101;32;61;32;115;105;100;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;116;111;116;97;108;32;43;32;34;32;99;109;34;41; + + +`,E8=` + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;78;105;103;104;116;34;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;117;115;107;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;97;121;34;41; + + + + + + +`,N8=` @@ -55876,7 +58242,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;111;112;112;101;100;34;41; -`,f8=` +`,F8=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;101;108;108;111;32;99;108;97;115;115;34; @@ -55885,7 +58251,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,x8=` +`,J8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -55899,7 +58265,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,b8=` +`,R8=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -55915,7 +58281,7 @@ lösung: vb-wald-loesung.visustruct -`,v8=` +`,G8=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -55929,7 +58295,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,y8=` +`,H8=` 105;110;116;32;105;32;61;32;48; @@ -55964,7 +58330,24 @@ lösung: vb-wald-loesung.visustruct -`,w8=` +`,V8=` + + + 99;111;110;115;116;32;105;110;116;32;68;73;83;84;65;78;67;69;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;68;73;83;84;65;78;67;69; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; + + +`,q8=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -55990,7 +58373,7 @@ lösung: vb-wald-loesung.visustruct -`,z8=` +`,U8=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -56002,7 +58385,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,I8=` +`,Q8=` 105;110;116;32;115;105;100;101;32;61;32;50;48; @@ -56024,7 +58407,119 @@ lösung: vb-wald-loesung.visustruct -`,k8=` +`,Y8=` + + + 99;111;110;115;116;32;105;110;116;32;68;73;83;84;65;78;67;69;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;68;73;83;84;65;78;67;69; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;68;73;83;84;65;78;67;69; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + +`,$8=` + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + +`,X8=` + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;111;112;34;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;108;111;119;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;70;114;101;101;34;41; + + + + + + +`,K8=` + + + 83;116;114;105;110;103;32;115;116;97;116;101;32;61;32;34;100;114;105;118;101;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;50;48; + 105;43;43; + + + 115;116;97;116;101;46;101;113;117;97;108;115;40;34;100;114;105;118;101;34;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; + + + 115;116;97;116;101;32;61;32;34;116;117;114;110;34; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 115;116;97;116;101;32;61;32;34;100;114;105;118;101;34; + + + + + + +`,eS=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -56058,7 +58553,7 @@ lösung: vb-wald-loesung.visustruct -`,S8=` +`,tS=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;76;117;100;119;105;103;34; @@ -56077,7 +58572,7 @@ lösung: vb-wald-loesung.visustruct -`,T8=` +`,nS=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -56121,7 +58616,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,_8=` +`,iS=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -56147,7 +58642,42 @@ lösung: vb-wald-loesung.visustruct -`,j8=` +`,aS=` + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 100;105;115;116;97;110;99;101;32;62;32;109;97;120; + + + 109;97;120;32;61;32;100;105;115;116;97;110;99;101; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;70;97;114;116;104;101;115;116;58;32;34;32;43;32;109;97;120;32;43;32;34;32;99;109;34;41; + + +`,sS=` 105;110;116;91;93;32;116;111;110;101;115;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -56163,7 +58693,7 @@ lösung: vb-wald-loesung.visustruct -`,C8=` +`,rS=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -56201,7 +58731,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;118;101;114;97;103;101;58;32;34;32;43;32;97;118;101;114;97;103;101;41; -`,A8=` +`,oS=` 105;110;116;32;105;32;61;32;48; @@ -56267,7 +58797,7 @@ lösung: vb-wald-loesung.visustruct -`,P8=` +`,lS=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -56283,7 +58813,7 @@ lösung: vb-wald-loesung.visustruct -`,O8=` +`,uS=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -56300,7 +58830,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,M8=` +`,mS=` @@ -56327,7 +58857,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,D8=` +`,cS=` 109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41;32;124;124;32;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -56343,7 +58873,7 @@ lösung: vb-wald-loesung.visustruct -`,B8=` +`,dS=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -56418,7 +58948,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,Z8=` +`,hS=` 115;113;117;97;114;101;40;51;48;41; @@ -56427,7 +58957,7 @@ lösung: vb-wald-loesung.visustruct 115;113;117;97;114;101;40;53;48;41; -`,L8=` +`,gS=` 105;110;116;32;105;32;61;32;48; @@ -56482,7 +59012,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,W8=` +`,pS=` 105;110;116;32;105;32;61;32;48; @@ -56498,7 +59028,7 @@ lösung: vb-wald-loesung.visustruct -`,E8=` +`,fS=` 105;110;116;32;105;32;61;32;48; @@ -56521,7 +59051,7 @@ lösung: vb-wald-loesung.visustruct -`,N8=` +`,xS=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -56535,7 +59065,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,F8=` +`,bS=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -56551,7 +59081,27 @@ lösung: vb-wald-loesung.visustruct -`,J8=` +`,vS=` + + + 105;110;116;32;115;116;101;112;115;32;61;32;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + 115;116;101;112;115;32;61;32;115;116;101;112;115;32;43;32;49; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115;41; + + +`,yS=` 105;110;116;32;105;32;61;32;48; @@ -56603,7 +59153,7 @@ lösung: vb-wald-loesung.visustruct -`,R8=` +`,wS=` 105;110;116;32;115;105;100;101;32;61;32;50;48; @@ -56625,7 +59175,7 @@ lösung: vb-wald-loesung.visustruct -`,G8=` +`,zS=` 105;110;116;32;115;105;100;101;32;61;32;50;48; @@ -56647,7 +59197,7 @@ lösung: vb-wald-loesung.visustruct -`,H8=` +`,IS=` 105;110;116;32;105;32;61;32;49; @@ -56663,7 +59213,7 @@ lösung: vb-wald-loesung.visustruct -`,V8=` +`,kS=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -56677,7 +59227,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,Q8=` +`,SS=` 105;110;116;32;114;117;110;100;101;32;61;32;49; @@ -56711,7 +59261,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;53;48;41; -`,q8=` +`,TS=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -56745,7 +59295,33 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,U8=` +`,_S=` + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;98;97;99;107;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;50;48;41; + + + + + + +`,jS=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -56763,7 +59339,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,Y8=` +`,CS=` 105;110;116;32;105;32;61;32;48; @@ -56785,7 +59361,7 @@ lösung: vb-wald-loesung.visustruct -`,$8=` +`,AS=` 105;110;116;32;108;101;102;116;32;61;32;57;57; @@ -56817,7 +59393,7 @@ lösung: vb-wald-loesung.visustruct -`,X8=` +`,PS=` 105;110;116;32;105;32;61;32;48; @@ -56833,7 +59409,7 @@ lösung: vb-wald-loesung.visustruct -`,K8=` +`,OS=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -56849,7 +59425,7 @@ lösung: vb-wald-loesung.visustruct -`,eS=` +`,DS=` 105;110;116;32;115;105;100;101;32;61;32;51;48; @@ -56868,7 +59444,7 @@ lösung: vb-wald-loesung.visustruct -`,tS=` +`,BS=` 105;110;116;32;105;32;61;32;48; @@ -56901,7 +59477,7 @@ lösung: vb-wald-loesung.visustruct -`,nS=` +`,MS=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -56940,7 +59516,7 @@ lösung: vb-wald-loesung.visustruct -`,iS=` +`,ZS=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -56956,7 +59532,49 @@ lösung: vb-wald-loesung.visustruct -`,aS=` +`,LS=` + + + 98;111;111;108;101;97;110;32;100;97;114;107;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 100;97;114;107;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 100;97;114;107; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;116;32;119;97;115;32;100;97;114;107;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;119;97;121;115;32;98;114;105;103;104;116;34;41; + + + + +`,WS=` 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;99;101;110;116;105;109;101;116;114;101;115;40;51;41; @@ -56968,13 +59586,13 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,sS=` +`,ES=` 114;101;116;117;114;110;32;114;111;116;97;116;105;111;110;115;32;42;32;50;48; -`,rS=` +`,NS=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -56994,7 +59612,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,oS=` +`,FS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;78;97;109;101;32;34;70;105;114;115;116;32;110;97;109;101;34; @@ -57006,7 +59624,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,lS=` +`,JS=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -57045,7 +59663,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,uS=` +`,RS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -57067,7 +59685,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,mS=` +`,GS=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;76;117;100;119;105;103;59;98;105;108;108;121;32;103;111;97;116;59;55;34; @@ -57086,7 +59704,7 @@ lösung: vb-wald-loesung.visustruct -`,cS=` +`,HS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;110;116;101;110;99;101;32;34;69;110;116;101;114;32;97;32;115;101;110;116;101;110;99;101;34; @@ -57098,7 +59716,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;114;100;115;58;32;34;32;43;32;119;111;114;100;115;46;108;101;110;103;116;104; -`,dS=` +`,VS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -57130,7 +59748,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;117;109;98;101;114;32;111;102;32;101;58;32;34;32;43;32;99;111;117;110;116; -`,hS=` +`,qS=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -57154,7 +59772,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;100;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,gS=` +`,US=` 105;110;116;91;93;91;93;32;116;97;98;101;108;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -57186,7 +59804,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,pS=` +`,QS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57234,7 +59852,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;105;58;32;34;32;43;32;102;114;101;105; -`,fS=` +`,YS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57249,7 +59867,7 @@ lösung: vb-wald-loesung.visustruct 115;105;116;122;101;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,xS=` +`,$S=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57283,7 +59901,7 @@ lösung: vb-wald-loesung.visustruct -`,bS=` +`,XS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57301,7 +59919,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;112;108;97;116;122;32;34;80;108;97;116;122;34; -`,vS=` +`,KS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57349,7 +59967,7 @@ lösung: vb-wald-loesung.visustruct -`,yS=` +`,eT=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -57373,7 +59991,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;105;104;101;32;49;44;32;80;108;97;116;122;32;50;32;118;101;114;107;97;117;102;116;63;32;34;32;43;32;115;105;116;122;101;91;49;93;91;50;93; -`,wS=` +`,tT=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -57388,7 +60006,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; -`,zS=` +`,nT=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -57403,7 +60021,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; -`,IS=` +`,iT=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -57418,7 +60036,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,kS=` +`,aT=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -57433,7 +60051,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,SS=` +`,sT=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -57445,7 +60063,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;97;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34; -`,TS=` +`,rT=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -57457,7 +60075,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;65;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34;41; -`,_S=` +`,oT=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -57475,7 +60093,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,jS=` +`,lT=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -57490,7 +60108,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,CS=` +`,uT=` 105;110;116;32;122;97;104;108;32;61;32;50; @@ -57505,7 +60123,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,AS=` +`,mT=` 111;117;116;112;117;116;58;32;122;97;104;108; @@ -57520,7 +60138,7 @@ lösung: vb-wald-loesung.visustruct 122;97;104;108;32;61;32;122;97;104;108;32;43;32;51; -`,PS=` +`,cT=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -57544,7 +60162,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,OS=` +`,dT=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -57559,7 +60177,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,MS=` +`,hT=` 105;110;116;32;97;32;61;32;53; @@ -57583,7 +60201,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,DS=` +`,gT=` 105;110;116;32;97;108;116;101;114;32;61;32;49;52; @@ -57601,7 +60219,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,BS=` +`,pT=` 105;110;116;32;109;105;110;117;116;101;110;32;61;32;49;51;53; @@ -57616,7 +60234,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;117;110;100;101;110;32;43;32;34;32;83;116;117;110;100;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;77;105;110;117;116;101;110;34; -`,ZS=` +`,fT=` 105;110;116;32;97;110;122;97;104;108;32;61;32;51; @@ -57631,7 +60249,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116;80;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,LS=` +`,xT=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -57646,7 +60264,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;220;98;114;105;103;58;32;34;32;43;32;103;117;116;104;97;98;101;110; -`,WS=` +`,bT=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -57661,7 +60279,7 @@ lösung: vb-wald-loesung.visustruct 103;117;116;104;97;98;101;110;32;61;32;103;117;116;104;97;98;101;110;32;45;32;112;114;101;105;115; -`,ES=` +`,vT=` 105;110;116;32;112;114;101;105;115;32;61;32;57; @@ -57676,7 +60294,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,NS=` +`,yT=` 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; @@ -57691,7 +60309,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;80;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; -`,FS=` +`,wT=` 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; @@ -57706,7 +60324,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;112;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; -`,JS=` +`,zT=` 105;110;116;32;108;97;101;110;103;101;32;61;32;55; @@ -57727,7 +60345,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;85;109;102;97;110;103;58;32;34;32;43;32;117;109;102;97;110;103; -`,RS=` +`,IT=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -57742,7 +60360,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,GS=` +`,kT=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -57751,7 +60369,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,HS=` +`,ST=` 105;110;116;32;108;97;101;110;103;101;32;61;32;53; @@ -57766,7 +60384,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;108;97;101;99;104;101; -`,VS=` +`,TT=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;105;101;32;104;101;105;223;116;32;100;117;63;34; @@ -57775,7 +60393,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,QS=` +`,_T=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -57790,7 +60408,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,qS=` +`,jT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -57802,7 +60420,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,US=` +`,CT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -57814,7 +60432,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;97;32;43;32;98; -`,YS=` +`,AT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -57823,7 +60441,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;97;108;116;101;114;32;43;32;49;41; -`,$S=` +`,PT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -57832,7 +60450,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;65;108;116;101;114;32;43;32;49;41; -`,XS=` +`,OT=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;101;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -57844,7 +60462,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;115;105;110;100;32;101;116;119;97;32;34;32;43;32;116;97;103;101;32;43;32;34;32;84;97;103;101;46;34; -`,KS=` +`,DT=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -57859,7 +60477,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108; -`,eT=` +`,BT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -57880,7 +60498,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;107;116;58;32;34;32;43;32;112;114;111;100;117;107;116; -`,tT=` +`,MT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -57899,7 +60517,7 @@ lösung: vb-wald-loesung.visustruct -`,nT=` +`,ZT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -57921,7 +60539,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,iT=` +`,LT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -57940,7 +60558,7 @@ lösung: vb-wald-loesung.visustruct -`,aT=` +`,WT=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -57958,7 +60576,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,sT=` +`,ET=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -57976,7 +60594,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,rT=` +`,NT=` 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; @@ -57991,7 +60609,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,oT=` +`,FT=` 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; @@ -58006,7 +60624,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,lT=` +`,JT=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -58024,7 +60642,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,uT=` +`,RT=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -58042,7 +60660,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,mT=` +`,GT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -58064,7 +60682,7 @@ lösung: vb-wald-loesung.visustruct -`,cT=` +`,HT=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;105;115;32;34;80;114;101;105;115;32;105;110;32;69;117;114;111;63;34; @@ -58086,7 +60704,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;90;117;32;122;97;104;108;101;110;58;32;34;32;43;32;112;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,dT=` +`,VT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -58105,7 +60723,7 @@ lösung: vb-wald-loesung.visustruct -`,hT=` +`,qT=` 105;110;112;117;116;58;32;105;110;116;32;112;117;110;107;116;101;32;34;87;105;101;32;118;105;101;108;101;32;80;117;110;107;116;101;63;34; @@ -58124,7 +60742,7 @@ lösung: vb-wald-loesung.visustruct -`,gT=` +`,UT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -58143,7 +60761,7 @@ lösung: vb-wald-loesung.visustruct -`,pT=` +`,QT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -58162,7 +60780,7 @@ lösung: vb-wald-loesung.visustruct -`,fT=` +`,YT=` 105;110;116;32;97;108;116;101;114;32;61;32;49;53; @@ -58181,7 +60799,7 @@ lösung: vb-wald-loesung.visustruct -`,xT=` +`,$T=` 105;110;116;32;97;108;116;101;114;32;61;32;49;53; @@ -58200,7 +60818,7 @@ lösung: vb-wald-loesung.visustruct -`,bT=` +`,XT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -58219,7 +60837,7 @@ lösung: vb-wald-loesung.visustruct -`,vT=` +`,KT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -58238,7 +60856,7 @@ lösung: vb-wald-loesung.visustruct -`,yT=` +`,e_=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;32;34;74;97;104;114;63;34; @@ -58257,7 +60875,7 @@ lösung: vb-wald-loesung.visustruct -`,wT=` +`,t_=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -58276,7 +60894,7 @@ lösung: vb-wald-loesung.visustruct -`,zT=` +`,n_=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;97;114;98;101;32;34;87;101;108;99;104;101;32;70;97;114;98;101;32;104;97;116;32;100;105;101;32;65;109;112;101;108;63;34; @@ -58305,7 +60923,7 @@ lösung: vb-wald-loesung.visustruct -`,IT=` +`,i_=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -58334,7 +60952,7 @@ lösung: vb-wald-loesung.visustruct -`,kT=` +`,a_=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -58353,7 +60971,7 @@ lösung: vb-wald-loesung.visustruct -`,ST=` +`,s_=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -58372,7 +60990,7 @@ lösung: vb-wald-loesung.visustruct -`,TT=` +`,r_=` 105;110;116;32;116;97;103;32;61;32;55; @@ -58391,7 +61009,7 @@ lösung: vb-wald-loesung.visustruct -`,_T=` +`,o_=` 105;110;116;32;116;97;103;32;61;32;55; @@ -58410,7 +61028,7 @@ lösung: vb-wald-loesung.visustruct -`,jT=` +`,l_=` 105;110;112;117;116;58;32;105;110;116;32;115;116;117;110;100;101;32;34;87;105;101;32;115;112;228;116;32;105;115;116;32;101;115;32;40;110;117;114;32;100;105;101;32;83;116;117;110;100;101;41;63;34; @@ -58429,7 +61047,7 @@ lösung: vb-wald-loesung.visustruct -`,CT=` +`,u_=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;87;101;108;99;104;101;32;78;111;116;101;63;34; @@ -58473,7 +61091,7 @@ lösung: vb-wald-loesung.visustruct -`,AT=` +`,m_=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -58520,7 +61138,7 @@ lösung: vb-wald-loesung.visustruct -`,PT=` +`,c_=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -58559,7 +61177,7 @@ lösung: vb-wald-loesung.visustruct -`,OT=` +`,d_=` 84;97;115;115;101;32;97;117;102;32;100;101;110;32;84;105;115;99;104;32;115;116;101;108;108;101;110; @@ -58589,7 +61207,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;116;114;105;110;107;101;110; -`,MT=` +`,h_=` 65;117;102;115;116;101;104;101;110; @@ -58604,7 +61222,7 @@ lösung: vb-wald-loesung.visustruct 70;114;252;104;115;116;252;99;107;101;110; -`,DT=` +`,g_=` 87;97;115;115;101;114;32;105;110;32;100;101;110;32;87;97;115;115;101;114;107;111;99;104;101;114;32;102;252;108;108;101;110; @@ -58625,7 +61243,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;98;101;117;116;101;108;32;104;101;114;97;117;115;110;101;104;109;101;110; -`,BT=` +`,p_=` 82;101;103;110;101;116;32;101;115;63; @@ -58644,7 +61262,7 @@ lösung: vb-wald-loesung.visustruct 76;111;115;103;101;104;101;110; -`,ZT=` +`,f_=` 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; @@ -58658,7 +61276,7 @@ lösung: vb-wald-loesung.visustruct 84;101;108;108;101;114;32;97;98;114;228;117;109;101;110; -`,LT=` +`,x_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;32;122;228;104;108;101;110;63;34; @@ -58678,7 +61296,7 @@ lösung: vb-wald-loesung.visustruct -`,WT=` +`,b_=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -58698,7 +61316,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,ET=` +`,v_=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -58715,7 +61333,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,NT=` +`,y_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;107;117;108;116;228;116;32;118;111;110;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -58741,7 +61359,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;107;117;108;116;97;101;116; -`,FT=` +`,w_=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -58776,7 +61394,7 @@ lösung: vb-wald-loesung.visustruct -`,JT=` +`,z_=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -58811,7 +61429,7 @@ lösung: vb-wald-loesung.visustruct -`,RT=` +`,I_=` 105;110;116;32;110;111;116;101;32;61;32;50; @@ -58835,7 +61453,7 @@ lösung: vb-wald-loesung.visustruct -`,GT=` +`,k_=` 105;110;116;32;110;111;116;101;32;61;32;50; @@ -58859,7 +61477,7 @@ lösung: vb-wald-loesung.visustruct -`,HT=` +`,S_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -58888,7 +61506,7 @@ lösung: vb-wald-loesung.visustruct -`,VT=` +`,T_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;34; @@ -58911,7 +61529,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;114;105;116;116;101; -`,QT=` +`,__=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -58928,7 +61546,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;110;107;101;33;34; -`,qT=` +`,j_=` 105;110;116;32;105;32;61;32;49;48; @@ -58945,7 +61563,7 @@ lösung: vb-wald-loesung.visustruct -`,UT=` +`,C_=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -58971,7 +61589,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,YT=` +`,A_=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -58997,7 +61615,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,$T=` +`,P_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -59017,7 +61635,7 @@ lösung: vb-wald-loesung.visustruct -`,XT=` +`,O_=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -59037,7 +61655,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,KT=` +`,D_=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -59057,7 +61675,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,e_=` +`,B_=` 105;110;116;32;110;111;116;101;32;61;32;48; @@ -59074,7 +61692,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;105;110;101;32;78;111;116;101;58;32;34;32;43;32;110;111;116;101; -`,t_=` +`,M_=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -59097,7 +61715,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,n_=` +`,Z_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;122;97;104;108;34; @@ -59116,7 +61734,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,i_=` +`,L_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -59135,7 +61753,7 @@ lösung: vb-wald-loesung.visustruct -`,a_=` +`,W_=` 105;110;116;32;105;32;61;32;49; @@ -59148,7 +61766,7 @@ lösung: vb-wald-loesung.visustruct -`,s_=` +`,E_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -59165,7 +61783,7 @@ lösung: vb-wald-loesung.visustruct -`,r_=` +`,N_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -59182,7 +61800,7 @@ lösung: vb-wald-loesung.visustruct -`,o_=` +`,F_=` 105;110;116;32;122;97;104;108;32;61;32;49; @@ -59202,7 +61820,7 @@ lösung: vb-wald-loesung.visustruct -`,l_=` +`,J_=` 105;110;116;32;122;97;104;108;32;61;32;49; @@ -59222,7 +61840,7 @@ lösung: vb-wald-loesung.visustruct -`,u_=` +`,R_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -59239,7 +61857,7 @@ lösung: vb-wald-loesung.visustruct -`,m_=` +`,G_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -59261,7 +61879,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,c_=` +`,H_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;90;101;105;108;101;110;63;34; @@ -59290,7 +61908,7 @@ lösung: vb-wald-loesung.visustruct -`,d_=` +`,V_=` 105;110;116;32;97;110;122;97;104;108;32;61;32;48; @@ -59322,7 +61940,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,h_=` +`,q_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -59354,7 +61972,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,g_=` +`,U_=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -59370,7 +61988,7 @@ lösung: vb-wald-loesung.visustruct -`,p_=` +`,Q_=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -59386,7 +62004,7 @@ lösung: vb-wald-loesung.visustruct -`,f_=` +`,Y_=` 105;110;116;32;104;111;101;104;101;32;61;32;48; @@ -59405,7 +62023,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; -`,x_=` +`,$_=` 105;110;116;32;115;116;117;102;101;32;61;32;49; @@ -59421,7 +62039,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; -`,b_=` +`,X_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -59437,7 +62055,7 @@ lösung: vb-wald-loesung.visustruct -`,v_=` +`,K_=` 105;110;112;117;116;58;32;105;110;116;32;98;114;101;105;116;101;32;34;66;114;101;105;116;101;34; @@ -59469,7 +62087,7 @@ lösung: vb-wald-loesung.visustruct -`,y_=` +`,ej=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -59485,7 +62103,7 @@ lösung: vb-wald-loesung.visustruct -`,w_=` +`,tj=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -59500,7 +62118,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;101;114;116;101;46;108;101;110;103;116;104; -`,z_=` +`,nj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -59532,7 +62150,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,I_=` +`,ij=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -59564,7 +62182,7 @@ lösung: vb-wald-loesung.visustruct -`,k_=` +`,aj=` 105;110;116;32;105;32;61;32;49; @@ -59587,7 +62205,7 @@ lösung: vb-wald-loesung.visustruct -`,S_=` +`,sj=` 105;110;116;32;105;32;61;32;49; @@ -59610,7 +62228,7 @@ lösung: vb-wald-loesung.visustruct -`,T_=` +`,rj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;83;116;117;102;101;110;63;34; @@ -59639,7 +62257,7 @@ lösung: vb-wald-loesung.visustruct -`,__=` +`,oj=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -59658,7 +62276,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;115;116;101;114;32;78;97;109;101;58;32;34;32;43;32;110;97;109;101;110;91;48;93; -`,j_=` +`,lj=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -59684,7 +62302,7 @@ lösung: vb-wald-loesung.visustruct -`,C_=` +`,uj=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -59735,7 +62353,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,A_=` +`,mj=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -59776,7 +62394,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,P_=` +`,cj=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -59799,7 +62417,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,O_=` +`,dj=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -59829,7 +62447,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,M_=` +`,hj=` 105;110;112;117;116;58;32;105;110;116;32;108;97;101;110;103;101;32;34;76;228;110;103;101;63;34; @@ -59844,13 +62462,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;108;228;99;104;101;58;32;34;32;43;32;102; -`,D_=` +`,gj=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,B_=` +`,pj=` 122;101;105;103;101;66;101;103;114;117;101;115;115;117;110;103;40;41; @@ -59862,7 +62480,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;69;114;103;101;98;110;105;115;40;41; -`,Z_=` +`,fj=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -59894,7 +62512,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,L_=` +`,xj=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -59926,7 +62544,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,W_=` +`,bj=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -59948,7 +62566,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,E_=` +`,vj=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -59970,7 +62588,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,N_=` +`,yj=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -59992,7 +62610,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,F_=` +`,wj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -60004,7 +62622,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;81;117;97;100;114;97;116;32;105;115;116;32;34;32;43;32;113; -`,J_=` +`,zj=` 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;120;32;42;32;120; @@ -60013,7 +62631,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;101;114;103;101;98;110;105;115; -`,R_=` +`,Ij=` 122;101;105;103;101;84;105;116;101;108;40;41; @@ -60025,7 +62643,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101; -`,G_=` +`,kj=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;32;122;117;109;32;81;117;105;122;33;34; @@ -60034,7 +62652,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;117;32;98;101;107;111;109;109;115;116;32;100;114;101;105;32;70;114;97;103;101;110;46;34; -`,H_=` +`,Sj=` 122;101;105;103;101;83;117;109;109;101;40;51;44;32;52;41; @@ -60046,7 +62664,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;83;117;109;109;101;40;120;44;32;120;32;43;32;49;41; -`,V_=` +`,Tj=` 105;110;116;32;115;117;109;109;101;32;61;32;97;32;43;32;98; @@ -60055,7 +62673,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109;109;101; -`,Q_=` +`,_j=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -60078,7 +62696,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,q_=` +`,jj=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -60101,7 +62719,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;34; -`,U_=` +`,Cj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -60123,7 +62741,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,Y_=` +`,Aj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -60145,7 +62763,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,$_=` +`,Pj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -60154,7 +62772,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;112;117;110;107;116;101;91;49;93;91;48;93; -`,X_=` +`,Oj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -60163,7 +62781,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;80;117;110;107;116;101;91;49;93;91;48;93; -`,K_=` +`,Dj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -60192,7 +62810,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,ej=` +`,Bj=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -60215,7 +62833,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,tj=` +`,Mj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -60237,7 +62855,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,nj=` +`,Zj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -60259,7 +62877,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,ij=` +`,Lj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -60291,7 +62909,7 @@ lösung: vb-wald-loesung.visustruct -`,aj=` +`,Wj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -60313,7 +62931,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;107;117;108;116;97;101;116; -`,sj=` +`,Ej=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; @@ -60345,13 +62963,13 @@ lösung: vb-wald-loesung.visustruct -`,rj=` +`,Nj=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; -`,oj=` +`,Fj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -60363,7 +62981,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,lj=` +`,Jj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -60375,7 +62993,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,uj=` +`,Rj=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -60384,7 +63002,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; -`,mj=` +`,Gj=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -60393,7 +63011,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; -`,cj=` +`,Hj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;105;110;103;97;98;101;32;34;80;97;115;115;119;111;114;116;63;34; @@ -60412,7 +63030,7 @@ lösung: vb-wald-loesung.visustruct -`,dj=` +`,Vj=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -60441,7 +63059,7 @@ lösung: vb-wald-loesung.visustruct -`,hj=` +`,qj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;119;101;114;116;63;34; @@ -60461,7 +63079,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;101;34; -`,gj=` +`,Uj=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -60494,7 +63112,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,pj=` +`,Qj=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -60527,7 +63145,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,fj=` +`,Yj=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -60569,7 +63187,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;115;117;109;109;101; -`,xj=` +`,$j=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -60591,7 +63209,7 @@ lösung: vb-wald-loesung.visustruct -`,bj=` +`,Xj=` 105;110;112;117;116;58;32;105;110;116;32;103;114;101;110;122;101;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -60607,7 +63225,7 @@ lösung: vb-wald-loesung.visustruct -`,vj=` +`,Kj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60646,7 +63264,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,yj=` +`,eC=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60685,7 +63303,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,wj=` +`,tC=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60720,7 +63338,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,zj=` +`,nC=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60755,7 +63373,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Ij=` +`,iC=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60790,7 +63408,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,kj=` +`,aC=` 111;117;116;112;117;116;58;32;34;71;117;116;101;110;32;77;111;114;103;101;110;34; @@ -60799,13 +63417,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;117;116;101;32;108;101;114;110;101;110;32;119;105;114;32;83;116;114;117;107;116;111;103;114;97;109;109;101;46;34; -`,Sj=` +`,sC=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;87;101;108;116;34; -`,Tj=` +`,rC=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;34; @@ -60814,7 +63432,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;99;104;32;108;101;114;110;101;32;83;116;114;117;107;116;111;103;114;97;109;109;101;34; -`,_j=` +`,oC=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -60834,7 +63452,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,jj=` +`,lC=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -60875,7 +63493,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;90;101;105;108;101;110;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Cj=` +`,uC=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -60884,7 +63502,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;97;117;115;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;101;105;110;107;97;117;102;45;110;101;117;46;116;120;116;34;41; -`,Aj=` +`,mC=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -60910,13 +63528,13 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,Pj=` +`,cC=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; -`,Oj=` +`,dC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -60955,7 +63573,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;117;99;104;115;58;32;34;32;43;32;97;110;122;97;104;108; -`,Mj=` +`,hC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -60964,7 +63582,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Dj=` +`,gC=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -60999,7 +63617,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;228;110;103;115;116;101;114;32;69;105;110;116;114;97;103;58;32;34;32;43;32;108;97;101;110;103;115;116;101;114; -`,Bj=` +`,pC=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -61008,7 +63626,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;122;101;105;108;101;110;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,Zj=` +`,fC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -61062,7 +63680,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;101;32;78;111;116;101;32;105;110;32;69;110;103;108;105;115;99;104;58;32;34;32;43;32;98;101;115;116;101;114;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;101;78;111;116;101;32;43;32;34;41;34; -`,Lj=` +`,xC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -61071,7 +63689,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Wj=` +`,bC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -61112,7 +63730,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;110;105;116;116;32;77;97;116;104;101;58;32;34;32;43;32;115;117;109;109;101;32;47;32;97;110;122;97;104;108; -`,Ej=` +`,vC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -61121,7 +63739,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Nj=` +`,yC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -61160,7 +63778,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,Fj=` +`,wC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -61169,7 +63787,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Jj=` +`,zC=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -61219,7 +63837,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;110;46;108;101;110;103;116;104;32;43;32;34;32;69;105;110;116;114;228;103;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Rj=` +`,IC=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -61237,7 +63855,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,Gj=` +`,kC=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -61290,7 +63908,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;122;101;105;108;101;110;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;84;105;101;114;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Hj=` +`,SC=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -61311,7 +63929,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,Vj=` +`,TC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -61355,7 +63973,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;83;228;116;122;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Qj=` +`,_C=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -61376,7 +63994,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,qj=` +`,jC=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;34; @@ -61388,7 +64006,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;100;101;117;115;34; -`,Uj=` +`,CC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -61407,7 +64025,7 @@ lösung: vb-wald-loesung.visustruct -`,Yj=` +`,AC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -61488,7 +64106,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,$j=` +`,PC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -61497,7 +64115,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,Xj=` +`,OC=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -61562,7 +64180,7 @@ lösung: vb-wald-loesung.visustruct -`,Kj=` +`,DC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;116;101;105;114;111;34; @@ -61588,7 +64206,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;105;111; -`,eC=` +`,BC=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -61642,13 +64260,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,tC=` +`,MC=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,nC=` +`,ZC=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;81;117;101;32;112;97;108;97;118;114;97;32;40;115;243;32;109;97;105;250;115;99;117;108;97;115;41;63;34; @@ -61679,7 +64297,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,iC=` +`,LC=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;103;114;101;100;111;32;34;81;117;97;108;32;233;32;111;32;116;101;120;116;111;32;99;105;102;114;97;100;111;63;34; @@ -61710,7 +64328,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116;111; -`,aC=` +`,WC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -61746,7 +64364,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;115;115;111;115;58;32;34;32;43;32;112;97;115;115;111;115; -`,sC=` +`,EC=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;97;115;32;110;111;116;97;115;63;34; @@ -61774,7 +64392,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;101;100;105;97; -`,rC=` +`,NC=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;110;250;109;101;114;111;115;63;34; @@ -61811,7 +64429,7 @@ lösung: vb-wald-loesung.visustruct -`,oC=` +`,FC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -61830,7 +64448,7 @@ lösung: vb-wald-loesung.visustruct -`,lC=` +`,JC=` 99;111;110;115;116;32;100;111;117;98;108;101;32;73;86;65;32;61;32;48;46;50;51; @@ -61851,7 +64469,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;114;101;99;111;67;111;109;73;118;97; -`,uC=` +`,RC=` 105;110;116;32;112;105;110;32;61;32;48; @@ -61887,7 +64505,7 @@ lösung: vb-wald-loesung.visustruct -`,mC=` +`,GC=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -61923,7 +64541,7 @@ lösung: vb-wald-loesung.visustruct -`,cC=` +`,HC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;49;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -61967,7 +64585,7 @@ lösung: vb-wald-loesung.visustruct -`,dC=` +`,VC=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -62021,7 +64639,7 @@ lösung: vb-wald-loesung.visustruct -`,hC=` +`,qC=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -62048,7 +64666,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;110;97;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,gC=` +`,UC=` 105;110;112;117;116;58;32;105;110;116;32;112;114;97;116;111;32;34;81;117;101;32;112;114;97;116;111;63;32;40;49;44;32;50;32;111;117;32;51;41;34; @@ -62077,7 +64695,7 @@ lösung: vb-wald-loesung.visustruct -`,pC=` +`,QC=` 105;110;116;32;110;117;109;101;114;111;49;32;61;32;52; @@ -62092,7 +64710,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,fC=` +`,YC=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -62114,7 +64732,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;109;112;97;32;111;32;113;117;97;100;114;111;58;32;34;32;43;32;110;111;109;101;115;91;115;111;114;116;101;97;100;111;32;45;32;49;93; -`,xC=` +`,$C=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -62126,7 +64744,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;117;112;108;105;99;97;100;111;58;32;34;32;43;32;110;117;109;101;114;111; -`,bC=` +`,XC=` -1; @@ -62173,7 +64791,7 @@ lösung: vb-wald-loesung.visustruct -`,vC=` +`,KC=` @@ -62210,7 +64828,7 @@ lösung: vb-wald-loesung.visustruct -`,yC=` +`,eA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -62270,7 +64888,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;101;114;116;97;115;32;43;32;34;32;100;101;32;34;32;43;32;99;111;110;116;97;103;101;109;32;43;32;34;32;99;101;114;116;97;115;34; -`,wC=` +`,tA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -62279,7 +64897,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,zC=` +`,nA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -62298,7 +64916,7 @@ lösung: vb-wald-loesung.visustruct -`,IC=` +`,iA=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -62321,7 +64939,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,kC=` +`,aA=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -62339,7 +64957,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;109;97;116;101;109;97;116;105;99;97;32;43;32;34;32;97;32;77;97;116;101;109;225;116;105;99;97;34; -`,SC=` +`,sA=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;123;92;34;110;111;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;101;115;112;101;99;105;101;92;34;58;32;92;34;99;97;98;114;97;92;34;44;32;92;34;105;100;97;100;101;92;34;58;32;54;125;44;34; @@ -62357,7 +64975,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101; -`,TC=` +`,rA=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -62377,7 +64995,7 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,_C=` +`,oA=` 105;110;116;91;93;91;93;32;116;97;98;101;108;97;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -62409,7 +65027,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;97;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,jC=` +`,lA=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -62457,7 +65075,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;118;114;101;115;58;32;34;32;43;32;108;105;118;114;101;115; -`,CC=` +`,uA=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -62472,7 +65090,7 @@ lösung: vb-wald-loesung.visustruct 108;117;103;97;114;101;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,AC=` +`,mA=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -62506,7 +65124,7 @@ lösung: vb-wald-loesung.visustruct -`,PC=` +`,cA=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -62524,7 +65142,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;108;117;103;97;114;32;34;76;117;103;97;114;34; -`,OC=` +`,dA=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -62572,7 +65190,7 @@ lösung: vb-wald-loesung.visustruct -`,MC=` +`,hA=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -62596,7 +65214,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;108;97;32;49;44;32;108;117;103;97;114;32;50;32;118;101;110;100;105;100;111;63;32;34;32;43;32;108;117;103;97;114;101;115;91;49;93;91;50;93; -`,DC=` +`,gA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -62611,7 +65229,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; -`,BC=` +`,pA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -62626,7 +65244,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; -`,ZC=` +`,fA=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -62641,7 +65259,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,LC=` +`,xA=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -62656,7 +65274,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,WC=` +`,bA=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -62668,7 +65286,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;105;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34; -`,EC=` +`,vA=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -62680,7 +65298,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;73;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34;41; -`,NC=` +`,yA=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -62698,7 +65316,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,FC=` +`,wA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -62713,7 +65331,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,JC=` +`,zA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;50; @@ -62728,7 +65346,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,RC=` +`,IA=` 111;117;116;112;117;116;58;32;110;117;109;101;114;111; @@ -62743,7 +65361,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;43;32;51; -`,GC=` +`,kA=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -62767,7 +65385,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,HC=` +`,SA=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -62782,7 +65400,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,VC=` +`,TA=` 105;110;116;32;97;32;61;32;53; @@ -62806,7 +65424,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,QC=` +`,_A=` 105;110;116;32;105;100;97;100;101;32;61;32;49;52; @@ -62824,7 +65442,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,qC=` +`,jA=` 105;110;116;32;109;105;110;117;116;111;115;32;61;32;49;51;53; @@ -62839,7 +65457,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;114;97;115;32;43;32;34;32;104;111;114;97;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;109;105;110;117;116;111;115;34; -`,UC=` +`,CA=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;51; @@ -62854,7 +65472,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;112;114;101;99;111;84;111;116;97;108;32;43;32;34;32;101;117;114;111;115;34; -`,YC=` +`,AA=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -62869,7 +65487,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;116;97;58;32;34;32;43;32;115;97;108;100;111; -`,$C=` +`,PA=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -62884,7 +65502,7 @@ lösung: vb-wald-loesung.visustruct 115;97;108;100;111;32;61;32;115;97;108;100;111;32;45;32;112;114;101;99;111; -`,XC=` +`,OA=` 105;110;116;32;112;114;101;99;111;32;61;32;57; @@ -62899,7 +65517,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,KC=` +`,DA=` 105;110;116;32;102;97;116;105;97;115;32;61;32;56; @@ -62914,7 +65532,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;80;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; -`,eA=` +`,BA=` 105;110;116;32;102;97;116;105;97;115;32;61;32;56; @@ -62929,7 +65547,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;112;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; -`,tA=` +`,MA=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;55; @@ -62950,7 +65568,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;237;109;101;116;114;111;58;32;34;32;43;32;112;101;114;105;109;101;116;114;111; -`,nA=` +`,ZA=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -62965,7 +65583,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,iA=` +`,LA=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -62974,7 +65592,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,aA=` +`,WA=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;53; @@ -62989,7 +65607,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,sA=` +`,EA=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;67;111;109;111;32;116;101;32;99;104;97;109;97;115;63;34; @@ -62998,7 +65616,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101;32;43;32;34;33;34; -`,rA=` +`,NA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -63013,7 +65631,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,oA=` +`,FA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -63025,7 +65643,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,lA=` +`,JA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -63037,7 +65655,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;97;32;43;32;98; -`,uA=` +`,RA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -63046,7 +65664,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;105;100;97;100;101;32;43;32;49;41; -`,mA=` +`,GA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -63055,7 +65673,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;73;100;97;100;101;32;43;32;49;41; -`,cA=` +`,HA=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;115;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -63067,7 +65685,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;227;111;32;99;101;114;99;97;32;100;101;32;34;32;43;32;100;105;97;115;32;43;32;34;32;100;105;97;115;46;34; -`,dA=` +`,VA=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -63082,7 +65700,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;58;32;34;32;43;32;109;101;100;105;97; -`,hA=` +`,qA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -63103,7 +65721,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;116;111;58;32;34;32;43;32;112;114;111;100;117;116;111; -`,gA=` +`,UA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -63122,7 +65740,7 @@ lösung: vb-wald-loesung.visustruct -`,pA=` +`,QA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -63144,7 +65762,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,fA=` +`,YA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -63163,7 +65781,7 @@ lösung: vb-wald-loesung.visustruct -`,xA=` +`,$A=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -63181,7 +65799,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,bA=` +`,XA=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -63199,7 +65817,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,vA=` +`,KA=` 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; @@ -63214,7 +65832,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,yA=` +`,eP=` 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; @@ -63229,7 +65847,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,wA=` +`,tP=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -63247,7 +65865,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,zA=` +`,nP=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -63265,7 +65883,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,IA=` +`,iP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -63287,7 +65905,7 @@ lösung: vb-wald-loesung.visustruct -`,kA=` +`,aP=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;99;111;32;34;80;114;101;231;111;32;101;109;32;101;117;114;111;115;63;34; @@ -63309,7 +65927,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;112;97;103;97;114;58;32;34;32;43;32;112;114;101;99;111;32;43;32;34;32;101;117;114;111;115;34; -`,SA=` +`,sP=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -63328,7 +65946,7 @@ lösung: vb-wald-loesung.visustruct -`,TA=` +`,rP=` 105;110;112;117;116;58;32;105;110;116;32;112;111;110;116;111;115;32;34;81;117;97;110;116;111;115;32;112;111;110;116;111;115;63;34; @@ -63347,7 +65965,7 @@ lösung: vb-wald-loesung.visustruct -`,_A=` +`,oP=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -63366,7 +65984,7 @@ lösung: vb-wald-loesung.visustruct -`,jA=` +`,lP=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -63385,7 +66003,7 @@ lösung: vb-wald-loesung.visustruct -`,CA=` +`,uP=` 105;110;116;32;105;100;97;100;101;32;61;32;49;53; @@ -63404,7 +66022,7 @@ lösung: vb-wald-loesung.visustruct -`,AA=` +`,mP=` 105;110;116;32;105;100;97;100;101;32;61;32;49;53; @@ -63423,7 +66041,7 @@ lösung: vb-wald-loesung.visustruct -`,PA=` +`,cP=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -63442,7 +66060,7 @@ lösung: vb-wald-loesung.visustruct -`,OA=` +`,dP=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -63461,7 +66079,7 @@ lösung: vb-wald-loesung.visustruct -`,MA=` +`,hP=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;32;34;65;110;111;63;34; @@ -63480,7 +66098,7 @@ lösung: vb-wald-loesung.visustruct -`,DA=` +`,gP=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;68;105;97;32;40;49;32;97;32;55;41;63;34; @@ -63499,7 +66117,7 @@ lösung: vb-wald-loesung.visustruct -`,BA=` +`,pP=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;114;32;34;68;101;32;113;117;101;32;99;111;114;32;101;115;116;225;32;111;32;115;101;109;225;102;111;114;111;63;34; @@ -63528,7 +66146,7 @@ lösung: vb-wald-loesung.visustruct -`,ZA=` +`,fP=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -63557,7 +66175,7 @@ lösung: vb-wald-loesung.visustruct -`,LA=` +`,xP=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -63576,7 +66194,7 @@ lösung: vb-wald-loesung.visustruct -`,WA=` +`,bP=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -63595,7 +66213,7 @@ lösung: vb-wald-loesung.visustruct -`,EA=` +`,vP=` 105;110;116;32;100;105;97;32;61;32;55; @@ -63614,7 +66232,7 @@ lösung: vb-wald-loesung.visustruct -`,NA=` +`,yP=` 105;110;116;32;100;105;97;32;61;32;55; @@ -63633,7 +66251,7 @@ lösung: vb-wald-loesung.visustruct -`,FA=` +`,wP=` 105;110;112;117;116;58;32;105;110;116;32;104;111;114;97;32;34;81;117;101;32;104;111;114;97;115;32;115;227;111;32;40;115;243;32;97;32;104;111;114;97;41;63;34; @@ -63652,7 +66270,7 @@ lösung: vb-wald-loesung.visustruct -`,JA=` +`,zP=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;81;117;101;32;110;111;116;97;63;34; @@ -63691,7 +66309,7 @@ lösung: vb-wald-loesung.visustruct -`,RA=` +`,IP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -63738,7 +66356,7 @@ lösung: vb-wald-loesung.visustruct -`,GA=` +`,kP=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -63777,7 +66395,7 @@ lösung: vb-wald-loesung.visustruct -`,HA=` +`,SP=` 80;244;114;32;117;109;97;32;99;104;225;118;101;110;97;32;110;97;32;109;101;115;97; @@ -63807,7 +66425,7 @@ lösung: vb-wald-loesung.visustruct 66;101;98;101;114;32;111;32;99;104;225; -`,VA=` +`,TP=` 76;101;118;97;110;116;97;114; @@ -63822,7 +66440,7 @@ lösung: vb-wald-loesung.visustruct 84;111;109;97;114;32;111;32;112;101;113;117;101;110;111;45;97;108;109;111;231;111; -`,QA=` +`,_P=` 69;110;99;104;101;114;32;97;32;99;104;97;108;101;105;114;97;32;99;111;109;32;225;103;117;97; @@ -63843,7 +66461,7 @@ lösung: vb-wald-loesung.visustruct 84;105;114;97;114;32;97;32;115;97;113;117;101;116;97;32;100;101;32;99;104;225; -`,qA=` +`,jP=` 69;115;116;225;32;97;32;99;104;111;118;101;114;63; @@ -63862,7 +66480,7 @@ lösung: vb-wald-loesung.visustruct 83;97;105;114; -`,UA=` +`,CP=` 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; @@ -63876,7 +66494,7 @@ lösung: vb-wald-loesung.visustruct 76;101;118;97;110;116;97;114;32;111;32;112;114;97;116;111; -`,YA=` +`,AP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;110;116;97;114;32;97;116;233;63;34; @@ -63896,7 +66514,7 @@ lösung: vb-wald-loesung.visustruct -`,$A=` +`,PP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -63916,7 +66534,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,XA=` +`,OP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -63933,7 +66551,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,KA=` +`,DP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;116;111;114;105;97;108;32;100;101;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -63959,7 +66577,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;116;111;114;105;97;108; -`,eP=` +`,BP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -63994,7 +66612,7 @@ lösung: vb-wald-loesung.visustruct -`,tP=` +`,MP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -64029,7 +66647,7 @@ lösung: vb-wald-loesung.visustruct -`,nP=` +`,ZP=` 105;110;116;32;110;111;116;97;32;61;32;50; @@ -64053,7 +66671,7 @@ lösung: vb-wald-loesung.visustruct -`,iP=` +`,LP=` 105;110;116;32;110;111;116;97;32;61;32;50; @@ -64077,7 +66695,7 @@ lösung: vb-wald-loesung.visustruct -`,aP=` +`,WP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -64106,7 +66724,7 @@ lösung: vb-wald-loesung.visustruct -`,sP=` +`,EP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -64129,7 +66747,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;115;115;111;115; -`,rP=` +`,NP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;48; @@ -64146,7 +66764,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;98;114;105;103;97;100;111;33;34; -`,oP=` +`,FP=` 105;110;116;32;105;32;61;32;49;48; @@ -64163,7 +66781,7 @@ lösung: vb-wald-loesung.visustruct -`,lP=` +`,JP=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -64189,7 +66807,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,uP=` +`,RP=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -64215,7 +66833,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,mP=` +`,GP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;111;110;100;101;63;34; @@ -64235,7 +66853,7 @@ lösung: vb-wald-loesung.visustruct -`,cP=` +`,HP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -64255,7 +66873,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,dP=` +`,VP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -64275,7 +66893,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,hP=` +`,qP=` 105;110;116;32;110;111;116;97;32;61;32;48; @@ -64292,7 +66910,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;116;117;97;32;110;111;116;97;58;32;34;32;43;32;110;111;116;97; -`,gP=` +`,UP=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -64315,7 +66933,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,pP=` +`,QP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -64334,7 +66952,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,fP=` +`,YP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -64353,7 +66971,7 @@ lösung: vb-wald-loesung.visustruct -`,xP=` +`,$P=` 105;110;116;32;105;32;61;32;49; @@ -64366,7 +66984,7 @@ lösung: vb-wald-loesung.visustruct -`,bP=` +`,XP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -64383,7 +67001,7 @@ lösung: vb-wald-loesung.visustruct -`,vP=` +`,KP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -64400,7 +67018,7 @@ lösung: vb-wald-loesung.visustruct -`,yP=` +`,eO=` 105;110;116;32;110;117;109;101;114;111;32;61;32;49; @@ -64420,7 +67038,7 @@ lösung: vb-wald-loesung.visustruct -`,wP=` +`,tO=` 105;110;116;32;110;117;109;101;114;111;32;61;32;49; @@ -64440,7 +67058,7 @@ lösung: vb-wald-loesung.visustruct -`,zP=` +`,nO=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -64457,7 +67075,7 @@ lösung: vb-wald-loesung.visustruct -`,IP=` +`,iO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -64479,7 +67097,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,kP=` +`,aO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;97;115;32;108;105;110;104;97;115;63;34; @@ -64508,7 +67126,7 @@ lösung: vb-wald-loesung.visustruct -`,SP=` +`,sO=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;48; @@ -64540,7 +67158,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,TP=` +`,rO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -64572,7 +67190,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,_P=` +`,oO=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -64588,7 +67206,7 @@ lösung: vb-wald-loesung.visustruct -`,jP=` +`,lO=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -64604,7 +67222,7 @@ lösung: vb-wald-loesung.visustruct -`,CP=` +`,uO=` 105;110;116;32;97;108;116;117;114;97;32;61;32;48; @@ -64623,7 +67241,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; -`,AP=` +`,mO=` 105;110;116;32;100;101;103;114;97;117;32;61;32;49; @@ -64639,7 +67257,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; -`,PP=` +`,cO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -64655,7 +67273,7 @@ lösung: vb-wald-loesung.visustruct -`,OP=` +`,dO=` 105;110;112;117;116;58;32;105;110;116;32;108;97;114;103;117;114;97;32;34;76;97;114;103;117;114;97;34; @@ -64687,7 +67305,7 @@ lösung: vb-wald-loesung.visustruct -`,MP=` +`,hO=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -64703,7 +67321,7 @@ lösung: vb-wald-loesung.visustruct -`,DP=` +`,gO=` 105;110;116;91;93;32;118;97;108;111;114;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -64718,7 +67336,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;111;114;101;115;46;108;101;110;103;116;104; -`,BP=` +`,pO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -64750,7 +67368,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,ZP=` +`,fO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -64782,7 +67400,7 @@ lösung: vb-wald-loesung.visustruct -`,LP=` +`,xO=` 105;110;116;32;105;32;61;32;49; @@ -64805,7 +67423,7 @@ lösung: vb-wald-loesung.visustruct -`,WP=` +`,bO=` 105;110;116;32;105;32;61;32;49; @@ -64828,7 +67446,7 @@ lösung: vb-wald-loesung.visustruct -`,EP=` +`,vO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;111;115;32;100;101;103;114;97;117;115;63;34; @@ -64857,7 +67475,7 @@ lösung: vb-wald-loesung.visustruct -`,NP=` +`,yO=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -64876,7 +67494,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;105;109;101;105;114;111;32;110;111;109;101;58;32;34;32;43;32;110;111;109;101;115;91;48;93; -`,FP=` +`,wO=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -64902,7 +67520,7 @@ lösung: vb-wald-loesung.visustruct -`,JP=` +`,zO=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -64953,7 +67571,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,RP=` +`,IO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -64994,7 +67612,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,GP=` +`,kO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -65017,7 +67635,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,HP=` +`,SO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -65047,7 +67665,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,VP=` +`,TO=` 105;110;112;117;116;58;32;105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;34;67;111;109;112;114;105;109;101;110;116;111;63;34; @@ -65062,7 +67680,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;193;114;101;97;58;32;34;32;43;32;102; -`,QP=` +`,_O=` 109;111;115;116;114;97;114;66;111;97;115;86;105;110;100;97;115;40;41; @@ -65074,7 +67692,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;82;101;115;117;108;116;97;100;111;40;41; -`,qP=` +`,jO=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -65106,7 +67724,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,UP=` +`,CO=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -65138,7 +67756,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,YP=` +`,AO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -65160,7 +67778,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,$P=` +`,PO=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -65182,7 +67800,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,XP=` +`,OO=` 105;110;116;91;93;32;110;111;116;97;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -65204,7 +67822,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,KP=` +`,DO=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -65216,7 +67834,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;32;113;117;97;100;114;97;100;111;32;233;32;34;32;43;32;113; -`,eO=` +`,BO=` 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;120;32;42;32;120; @@ -65225,7 +67843,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116;97;100;111; -`,tO=` +`,MO=` 109;111;115;116;114;97;114;84;105;116;117;108;111;40;41; @@ -65237,7 +67855,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101; -`,nO=` +`,ZO=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;32;97;111;32;113;117;105;122;33;34; @@ -65246,7 +67864,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;97;105;115;32;116;101;114;32;116;114;234;115;32;112;101;114;103;117;110;116;97;115;46;34; -`,iO=` +`,LO=` 109;111;115;116;114;97;114;83;111;109;97;40;51;44;32;52;41; @@ -65258,7 +67876,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;83;111;109;97;40;120;44;32;120;32;43;32;49;41; -`,aO=` +`,WO=` 105;110;116;32;115;111;109;97;32;61;32;97;32;43;32;98; @@ -65267,7 +67885,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;111;109;97; -`,sO=` +`,EO=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -65290,7 +67908,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,rO=` +`,NO=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -65313,7 +67931,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;34; -`,oO=` +`,FO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -65335,7 +67953,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,lO=` +`,JO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -65357,7 +67975,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,uO=` +`,RO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -65366,7 +67984,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;112;111;110;116;111;115;91;49;93;91;48;93; -`,mO=` +`,GO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -65375,7 +67993,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;80;111;110;116;111;115;91;49;93;91;48;93; -`,cO=` +`,HO=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -65404,7 +68022,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,dO=` +`,VO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -65427,7 +68045,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,hO=` +`,qO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -65449,7 +68067,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,gO=` +`,UO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -65471,7 +68089,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,pO=` +`,QO=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -65503,7 +68121,7 @@ lösung: vb-wald-loesung.visustruct -`,fO=` +`,YO=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -65525,7 +68143,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;116;111;114;105;97;108; -`,xO=` +`,$O=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; @@ -65557,13 +68175,13 @@ lösung: vb-wald-loesung.visustruct -`,bO=` +`,XO=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; -`,vO=` +`,KO=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -65575,7 +68193,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,yO=` +`,eD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -65587,7 +68205,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,wO=` +`,tD=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -65596,7 +68214,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; -`,zO=` +`,nD=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -65605,7 +68223,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; -`,IO=` +`,iD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;110;116;114;97;100;97;32;34;80;97;108;97;118;114;97;45;112;97;115;115;101;63;34; @@ -65624,7 +68242,7 @@ lösung: vb-wald-loesung.visustruct -`,kO=` +`,aD=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -65653,7 +68271,7 @@ lösung: vb-wald-loesung.visustruct -`,SO=` +`,sD=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;63;34; @@ -65673,7 +68291,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;109;34; -`,TO=` +`,rD=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -65706,7 +68324,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,_O=` +`,oD=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -65739,7 +68357,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,jO=` +`,lD=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -65781,7 +68399,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;111;109;97; -`,CO=` +`,uD=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -65803,7 +68421,7 @@ lösung: vb-wald-loesung.visustruct -`,AO=` +`,mD=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;101;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -65819,7 +68437,7 @@ lösung: vb-wald-loesung.visustruct -`,PO=` +`,cD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -65858,7 +68476,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,OO=` +`,dD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -65897,7 +68515,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,MO=` +`,hD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -65932,7 +68550,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,DO=` +`,gD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -65967,7 +68585,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,BO=` +`,pD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -66002,7 +68620,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,ZO=` +`,fD=` 111;117;116;112;117;116;58;32;34;66;111;109;32;100;105;97;34; @@ -66011,13 +68629,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;111;106;101;32;97;112;114;101;110;100;101;109;111;115;32;101;115;116;114;117;116;111;103;114;97;109;97;115;46;34; -`,LO=` +`,xD=` 111;117;116;112;117;116;58;32;34;79;108;225;32;77;117;110;100;111;34; -`,WO=` +`,bD=` 111;117;116;112;117;116;58;32;34;79;108;225;34; @@ -66026,7 +68644,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;115;116;111;117;32;97;32;97;112;114;101;110;100;101;114;32;101;115;116;114;117;116;111;103;114;97;109;97;115;34; -`,EO=` +`,vD=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -66067,7 +68685,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;108;105;110;104;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,NO=` +`,yD=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -66076,7 +68694,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;115;97;105;100;97;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;99;111;109;112;114;97;115;45;110;111;118;97;46;116;120;116;34;41; -`,FO=` +`,wD=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -66102,13 +68720,13 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,JO=` +`,zD=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; -`,RO=` +`,ID=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -66147,7 +68765,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;97;112;111;115;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,GO=` +`,kD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -66156,7 +68774,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,HO=` +`,SD=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -66191,7 +68809,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;116;114;97;100;97;32;109;97;105;115;32;108;111;110;103;97;58;32;34;32;43;32;109;97;105;115;76;111;110;103;97; -`,VO=` +`,TD=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -66200,7 +68818,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;104;97;115;32;61;32;116;101;120;116;111;46;115;112;108;105;116;40;34;92;110;34;41; -`,QO=` +`,_D=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -66254,7 +68872,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;108;104;111;114;32;110;111;116;97;32;97;32;73;110;103;108;234;115;58;32;34;32;43;32;109;101;108;104;111;114;78;111;109;101;32;43;32;34;32;40;34;32;43;32;109;101;108;104;111;114;78;111;116;97;32;43;32;34;41;34; -`,qO=` +`,jD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -66263,7 +68881,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,UO=` +`,CD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -66304,7 +68922,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;32;100;101;32;77;97;116;101;109;225;116;105;99;97;58;32;34;32;43;32;115;111;109;97;32;47;32;113;117;97;110;116;105;100;97;100;101; -`,YO=` +`,AD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -66313,7 +68931,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,$O=` +`,PD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -66352,7 +68970,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,XO=` +`,OD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -66361,7 +68979,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,KO=` +`,DD=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -66411,7 +69029,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;97;100;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,eM=` +`,BD=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -66429,7 +69047,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,tM=` +`,MD=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -66482,7 +69100,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;104;97;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;105;115;32;103;117;97;114;100;97;100;111;115;34; -`,nM=` +`,ZD=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -66503,7 +69121,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,iM=` +`,LD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -66547,7 +69165,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;102;114;97;115;101;115;32;103;117;97;114;100;97;100;97;115;34; -`,aM=` +`,WD=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -66568,7 +69186,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,sM=` +`,ED=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -66580,7 +69198,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,rM=` +`,ND=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -66592,7 +69210,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;113;117;97;110;116;105;100;97;100;101;32;42;32;56;46;53; -`,oM=` +`,FD=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -66616,7 +69234,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,lM=` +`,JD=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -66637,7 +69255,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,uM=` +`,RD=` 105;110;116;32;97;32;61;32;51; @@ -66661,7 +69279,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,mM=` +`,GD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -66720,7 +69338,7 @@ lösung: vb-wald-loesung.visustruct -`,cM=` +`,HD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -66779,7 +69397,7 @@ lösung: vb-wald-loesung.visustruct -`,dM=` +`,VD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -66853,7 +69471,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,hM=` +`,qD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -66902,7 +69520,7 @@ lösung: vb-wald-loesung.visustruct -`,gM=` +`,UD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -66951,7 +69569,7 @@ lösung: vb-wald-loesung.visustruct -`,pM=` +`,QD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -67009,7 +69627,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,fM=` +`,YD=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -67028,7 +69646,7 @@ lösung: vb-wald-loesung.visustruct -`,xM=` +`,$D=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -67047,7 +69665,7 @@ lösung: vb-wald-loesung.visustruct -`,bM=` +`,XD=` 105;110;116;32;105;32;61;32;48; @@ -67060,7 +69678,7 @@ lösung: vb-wald-loesung.visustruct -`,vM=` +`,KD=` 105;110;116;32;110;117;109;101;114;111;32;61;32;53; @@ -67084,7 +69702,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;112;111;105;115;58;32;34;32;43;32;102;105;108;97;91;48;93;32;43;32;34;44;32;34;32;43;32;102;105;108;97;91;49;93; -`,yM=` +`,eB=` 105;110;116;32;105;32;61;32;48; @@ -67097,7 +69715,7 @@ lösung: vb-wald-loesung.visustruct -`,wM=` +`,tB=` 120;32;61;32;120;32;42;32;50; @@ -67106,7 +69724,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;115;117;98;112;114;111;103;114;97;109;97;58;32;120;32;61;32;34;32;43;32;120; -`,zM=` +`,nB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;34; @@ -67118,7 +69736,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,IM=` +`,iB=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -67157,7 +69775,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,kM=` +`,aB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -67179,7 +69797,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;105;110;118;101;114;116;105;100;97; -`,SM=` +`,sB=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;76;117;100;119;105;103;59;98;111;100;101;59;55;34; @@ -67198,7 +69816,7 @@ lösung: vb-wald-loesung.visustruct -`,TM=` +`,rB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;114;97;115;101;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;102;114;97;115;101;34; @@ -67210,7 +69828,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;108;97;118;114;97;115;58;32;34;32;43;32;112;97;108;97;118;114;97;115;46;108;101;110;103;116;104; -`,_M=` +`,oB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -67242,7 +69860,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;101;32;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,jM=` +`,lB=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -67266,7 +69884,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;108;97;118;114;97;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,CM=` +`,uB=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -67278,7 +69896,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,AM=` +`,mB=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -67290,7 +69908,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;103;101;115;97;109;116;32;61;32;97;110;122;97;104;108;32;42;32;56;46;53; -`,PM=` +`,cB=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -67314,7 +69932,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,OM=` +`,dB=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -67335,7 +69953,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,MM=` +`,hB=` 105;110;116;32;97;32;61;32;51; @@ -67359,7 +69977,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,DM=` +`,gB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -67418,7 +70036,7 @@ lösung: vb-wald-loesung.visustruct -`,BM=` +`,pB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -67477,7 +70095,7 @@ lösung: vb-wald-loesung.visustruct -`,ZM=` +`,fB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -67551,7 +70169,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,LM=` +`,xB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -67600,7 +70218,7 @@ lösung: vb-wald-loesung.visustruct -`,WM=` +`,bB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -67649,7 +70267,7 @@ lösung: vb-wald-loesung.visustruct -`,EM=` +`,vB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -67707,7 +70325,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,NM=` +`,yB=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -67726,7 +70344,7 @@ lösung: vb-wald-loesung.visustruct -`,FM=` +`,wB=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -67745,7 +70363,7 @@ lösung: vb-wald-loesung.visustruct -`,JM=` +`,zB=` 105;110;116;32;105;32;61;32;48; @@ -67758,7 +70376,7 @@ lösung: vb-wald-loesung.visustruct -`,RM=` +`,IB=` 105;110;116;32;122;97;104;108;32;61;32;53; @@ -67782,7 +70400,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;97;99;104;104;101;114;58;32;34;32;43;32;114;101;105;104;101;91;48;93;32;43;32;34;44;32;34;32;43;32;114;101;105;104;101;91;49;93; -`,GM=` +`,kB=` 105;110;116;32;105;32;61;32;48; @@ -67795,7 +70413,7 @@ lösung: vb-wald-loesung.visustruct -`,HM=` +`,SB=` 120;32;61;32;120;32;42;32;50; @@ -67804,7 +70422,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;109;32;85;110;116;101;114;112;114;111;103;114;97;109;109;58;32;120;32;61;32;34;32;43;32;120; -`,VM=` +`,TB=` 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -67813,7 +70431,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;98;115;116;97;110;100;58;32;34;32;43;32;97;98;115;116;97;110;100;32;43;32;34;32;99;109;34;41; -`,QM=` +`,_B=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -67839,7 +70457,7 @@ lösung: vb-wald-loesung.visustruct -`,qM=` +`,jB=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -67866,7 +70484,7 @@ lösung: vb-wald-loesung.visustruct -`,UM=` +`,CB=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -67884,7 +70502,50 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,YM=` +`,AB=` + + + 105;110;116;32;122;117;115;116;97;110;100;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 122;117;115;116;97;110;100; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;49; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;50; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;48; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + +`,PB=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -67914,7 +70575,7 @@ lösung: vb-wald-loesung.visustruct -`,$M=` +`,OB=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;97;108;108;111;33;34;41; @@ -67926,7 +70587,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;99;104;32;98;105;110;32;86;105;115;117;66;111;116;34;41; -`,XM=` +`,DB=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -67978,7 +70639,7 @@ lösung: vb-wald-loesung.visustruct -`,KM=` +`,BB=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -67989,7 +70650,7 @@ lösung: vb-wald-loesung.visustruct -`,eD=` +`,MB=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -68000,7 +70661,7 @@ lösung: vb-wald-loesung.visustruct -`,tD=` +`,ZB=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -68011,7 +70672,7 @@ lösung: vb-wald-loesung.visustruct -`,nD=` +`,LB=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;86;105;115;117;66;111;116;34; @@ -68030,7 +70691,7 @@ lösung: vb-wald-loesung.visustruct -`,iD=` +`,WB=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -68044,7 +70705,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,aD=` +`,EB=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;111;116;34;41; @@ -68056,7 +70717,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;252;110;34;41; -`,sD=` +`,NB=` 105;110;116;32;105;32;61;32;48; @@ -68072,7 +70733,7 @@ lösung: vb-wald-loesung.visustruct -`,rD=` +`,FB=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -68100,7 +70761,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;112;97;114;107;116;33;34;41; -`,oD=` +`,JB=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -68118,7 +70779,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,lD=` +`,RB=` 83;116;114;105;110;103;91;93;32;102;97;114;98;101;110;32;61;32;123;34;114;111;116;34;44;32;34;103;101;108;98;34;44;32;34;103;114;252;110;34;44;32;34;98;108;97;117;34;44;32;34;108;105;108;97;34;125; @@ -68134,7 +70795,7 @@ lösung: vb-wald-loesung.visustruct -`,uD=` +`,GB=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -68160,7 +70821,7 @@ lösung: vb-wald-loesung.visustruct -`,mD=` +`,HB=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -68176,7 +70837,7 @@ lösung: vb-wald-loesung.visustruct -`,cD=` +`,VB=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -68187,7 +70848,7 @@ lösung: vb-wald-loesung.visustruct -`,dD=` +`,qB=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -68207,7 +70868,38 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;83;99;104;114;105;116;116;101;41; -`,hD=` +`,UB=` + + + 105;110;116;32;115;101;105;116;101;32;61;32;49;48; + + + 105;110;116;32;103;101;115;97;109;116;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;101;105;116;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 103;101;115;97;109;116;32;61;32;71;101;115;97;109;116;32;43;32;115;101;105;116;101; + + + 115;101;105;116;101;32;61;32;115;101;105;116;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;103;101;115;97;109;116;32;43;32;34;32;99;109;34;41; + + +`,QB=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -68221,7 +70913,52 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;41; -`,gD=` +`,YB=` + + + 99;111;110;115;116;32;105;110;116;32;83;69;73;84;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;101;105;116;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + +`,$B=` + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;78;97;99;104;116;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;228;109;109;101;114;117;110;103;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;84;97;103;34;41; + + + + + + +`,XB=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -68251,7 +70988,7 @@ lösung: vb-wald-loesung.visustruct -`,pD=` +`,KB=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -68265,7 +71002,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;116;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,fD=` +`,eM=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -68289,7 +71026,48 @@ lösung: vb-wald-loesung.visustruct -`,xD=` +`,tM=` + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;114;105;99;104;116;117;110;103;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 97;98;115;116;97;110;100;32;62;32;109;97;120; + + + 109;97;120;32;61;32;97;98;115;116;97;110;100; + + + 114;105;99;104;116;117;110;103;32;61;32;73; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;82;105;99;104;116;117;110;103;58;32;34;32;43;32;114;105;99;104;116;117;110;103;41; + + +`,nM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -68315,7 +71093,7 @@ lösung: vb-wald-loesung.visustruct -`,bD=` +`,iM=` 105;110;116;32;105;32;61;32;48; @@ -68348,7 +71126,7 @@ lösung: vb-wald-loesung.visustruct -`,vD=` +`,aM=` @@ -68375,7 +71153,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;71;101;115;116;111;112;112;116;41; -`,yD=` +`,sM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -68394,7 +71172,49 @@ lösung: vb-wald-loesung.visustruct -`,wD=` +`,rM=` + + + 98;111;111;108;101;97;110;32;108;97;117;116;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;97;117;116;32;61;32;84;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;97;117;116; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;107;108;97;116;115;99;104;116;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;101;115;32;115;116;105;108;108;34;41; + + + + +`,oM=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -68410,7 +71230,7 @@ lösung: vb-wald-loesung.visustruct -`,zD=` +`,lM=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -68426,7 +71246,7 @@ lösung: vb-wald-loesung.visustruct -`,ID=` +`,uM=` 105;110;116;32;105;32;61;32;48; @@ -68448,7 +71268,7 @@ lösung: vb-wald-loesung.visustruct -`,kD=` +`,mM=` 105;110;116;32;105;32;61;32;48; @@ -68467,7 +71287,7 @@ lösung: vb-wald-loesung.visustruct -`,SD=` +`,cM=` 105;110;116;32;105;32;61;32;49; @@ -68480,7 +71300,7 @@ lösung: vb-wald-loesung.visustruct -`,TD=` +`,dM=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -68518,7 +71338,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108;119;101;114;116;41; -`,_D=` +`,hM=` 105;110;116;32;105;32;61;32;51; @@ -68537,7 +71357,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;111;115;33;34;41; -`,jD=` +`,gM=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;97;108;108;111;32;75;108;97;115;115;101;34; @@ -68546,7 +71366,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;84;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,CD=` +`,pM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -68590,7 +71410,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;83;116;111;112;40;41; -`,AD=` +`,fM=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;107;107;117;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -68609,7 +71429,55 @@ lösung: vb-wald-loesung.visustruct -`,PD=` +`,xM=` + + + 83;116;114;105;110;103;32;122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;114;111;116;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;103;114;252;110; + + + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;103;114;252;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;103;101;108;98;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + +`,bM=` 105;110;116;32;105;32;61;32;48; @@ -68631,7 +71499,7 @@ lösung: vb-wald-loesung.visustruct -`,OD=` +`,vM=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -68648,7 +71516,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,MD=` +`,yM=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -68666,7 +71534,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,DD=` +`,wM=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -68702,7 +71570,7 @@ lösung: vb-wald-loesung.visustruct -`,BD=` +`,zM=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;107;107;117;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -68721,7 +71589,55 @@ lösung: vb-wald-loesung.visustruct -`,ZD=` +`,IM=` + + + 83;116;114;105;110;103;32;122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;54; + 105;43;43; + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;114;111;116;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;103;114;252;110;34; + + + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;103;114;252;110;34;41; + + + 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;103;101;108;98;34; + + + + + 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;50;48;48;44;32;48;41; + + + 122;117;115;116;97;110;100;32;61;32;34;114;111;116;34; + + + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;48;41; + + + + +`,kM=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -68745,7 +71661,7 @@ lösung: vb-wald-loesung.visustruct -`,LD=` +`,SM=` 105;110;116;32;105;32;61;32;48; @@ -68767,7 +71683,7 @@ lösung: vb-wald-loesung.visustruct -`,WD=` +`,TM=` 105;110;116;32;105;32;61;32;51; @@ -68786,7 +71702,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;111;115;33;34;41; -`,ED=` +`,_M=` 105;110;116;32;105;32;61;32;49; @@ -68799,7 +71715,7 @@ lösung: vb-wald-loesung.visustruct -`,ND=` +`,jM=` 105;110;116;32;105;32;61;32;48; @@ -68832,7 +71748,68 @@ lösung: vb-wald-loesung.visustruct -`,FD=` +`,CM=` + + + 98;111;111;108;101;97;110;32;108;97;117;116;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; + + + 108;97;117;116;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 108;97;117;116; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;107;108;97;116;115;99;104;116;33;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;108;108;101;115;32;115;116;105;108;108;34;41; + + + + +`,AM=` + + + 99;111;110;115;116;32;105;110;116;32;83;69;73;84;69;32;61;32;51;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;83;69;73;84;69;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + +`,PM=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -68848,7 +71825,7 @@ lösung: vb-wald-loesung.visustruct -`,JD=` +`,OM=` 105;110;116;32;105;32;61;32;48; @@ -68867,7 +71844,7 @@ lösung: vb-wald-loesung.visustruct -`,RD=` +`,DM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -68911,7 +71888,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,GD=` +`,BM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -68930,7 +71907,7 @@ lösung: vb-wald-loesung.visustruct -`,HD=` +`,MM=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -68960,7 +71937,7 @@ lösung: vb-wald-loesung.visustruct -`,VD=` +`,ZM=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -68988,7 +71965,7 @@ lösung: vb-wald-loesung.visustruct -`,QD=` +`,LM=` 105;110;116;32;105;32;61;32;48; @@ -69010,7 +71987,48 @@ lösung: vb-wald-loesung.visustruct -`,qD=` +`,WM=` + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;114;105;99;104;116;117;110;103;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 97;98;115;116;97;110;100;32;62;32;109;97;120; + + + 109;97;120;32;61;32;97;98;115;116;97;110;100; + + + 114;105;99;104;116;117;110;103;32;61;32;105; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;82;105;99;104;116;117;110;103;58;32;34;32;43;32;114;105;99;104;116;117;110;103;41; + + +`,EM=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -69030,7 +72048,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101;41; -`,UD=` +`,NM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -69044,7 +72062,64 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,YD=` +`,FM=` + + + 105;110;116;32;115;101;105;116;101;32;61;32;49;48; + + + 105;110;116;32;103;101;115;97;109;116;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;115;101;105;116;101;41; + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 103;101;115;97;109;116;32;61;32;103;101;115;97;109;116;32;43;32;115;101;105;116;101; + + + 115;101;105;116;101;32;61;32;115;101;105;116;101;32;43;32;49;48; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;103;101;115;97;109;116;32;43;32;34;32;99;109;34;41; + + +`,JM=` + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;78;97;99;104;116;34;41; + + + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;54;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;228;109;109;101;114;117;110;103;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;84;97;103;34;41; + + + + + + +`,RM=` @@ -69071,7 +72146,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;115;116;111;112;112;116;34;41; -`,$D=` +`,GM=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;97;108;108;111;32;75;108;97;115;115;101;34; @@ -69080,7 +72155,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,XD=` +`,HM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -69094,7 +72169,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,KD=` +`,VM=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -69110,7 +72185,7 @@ lösung: vb-wald-loesung.visustruct -`,eB=` +`,qM=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -69124,7 +72199,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,tB=` +`,UM=` 105;110;116;32;105;32;61;32;48; @@ -69159,7 +72234,24 @@ lösung: vb-wald-loesung.visustruct -`,nB=` +`,QM=` + + + 99;111;110;115;116;32;105;110;116;32;65;66;83;84;65;78;68;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;65;66;83;84;65;78;68; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; + + +`,YM=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -69185,7 +72277,7 @@ lösung: vb-wald-loesung.visustruct -`,iB=` +`,$M=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -69197,7 +72289,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,aB=` +`,XM=` 105;110;116;32;115;101;105;116;101;32;61;32;50;48; @@ -69219,7 +72311,119 @@ lösung: vb-wald-loesung.visustruct -`,sB=` +`,KM=` + + + 99;111;110;115;116;32;105;110;116;32;65;66;83;84;65;78;68;32;61;32;50;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;65;66;83;84;65;78;68; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;65;66;83;84;65;78;68; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + +`,eZ=` + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;50;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + +`,tZ=` + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;111;112;112;34;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;97;110;103;115;97;109;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;70;114;101;105;34;41; + + + + + + +`,nZ=` + + + 83;116;114;105;110;103;32;122;117;115;116;97;110;100;32;61;32;34;102;97;104;114;101;110;34; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;50;48; + 105;43;43; + + + 122;117;115;116;97;110;100;46;101;113;117;97;108;115;40;34;102;97;104;114;101;110;34;41; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; + + + 122;117;115;116;97;110;100;32;61;32;34;100;114;101;104;101;110;34; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + 122;117;115;116;97;110;100;32;61;32;34;102;97;104;114;101;110;34; + + + + + + +`,iZ=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -69253,7 +72457,7 @@ lösung: vb-wald-loesung.visustruct -`,rB=` +`,aZ=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;76;117;100;119;105;103;34; @@ -69272,7 +72476,7 @@ lösung: vb-wald-loesung.visustruct -`,oB=` +`,sZ=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -69316,7 +72520,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,lB=` +`,rZ=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -69342,7 +72546,42 @@ lösung: vb-wald-loesung.visustruct -`,uB=` +`,oZ=` + + + 105;110;116;32;109;97;120;32;61;32;48; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;52; + 105;43;43; + + + 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; + + + 97;98;115;116;97;110;100;32;62;32;109;97;120; + + + 109;97;120;32;61;32;97;98;115;116;97;110;100; + + + + + 248; + + + + + 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;109;32;119;101;105;116;101;115;116;101;110;58;32;34;32;43;32;109;97;120;32;43;32;34;32;99;109;34;41; + + +`,lZ=` 105;110;116;91;93;32;116;111;101;110;101;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -69358,7 +72597,7 @@ lösung: vb-wald-loesung.visustruct -`,mB=` +`,uZ=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -69396,7 +72635,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108;119;101;114;116;41; -`,cB=` +`,mZ=` 105;110;116;32;105;32;61;32;48; @@ -69462,7 +72701,7 @@ lösung: vb-wald-loesung.visustruct -`,dB=` +`,cZ=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -69478,7 +72717,7 @@ lösung: vb-wald-loesung.visustruct -`,hB=` +`,dZ=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -69495,7 +72734,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,gB=` +`,hZ=` @@ -69522,7 +72761,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,pB=` +`,gZ=` 109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41;32;124;124;32;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -69538,7 +72777,7 @@ lösung: vb-wald-loesung.visustruct -`,fB=` +`,pZ=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -69613,7 +72852,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,xB=` +`,fZ=` 113;117;97;100;114;97;116;40;51;48;41; @@ -69622,7 +72861,7 @@ lösung: vb-wald-loesung.visustruct 113;117;97;100;114;97;116;40;53;48;41; -`,bB=` +`,xZ=` 105;110;116;32;105;32;61;32;48; @@ -69677,7 +72916,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,vB=` +`,bZ=` 105;110;116;32;105;32;61;32;48; @@ -69693,7 +72932,7 @@ lösung: vb-wald-loesung.visustruct -`,yB=` +`,vZ=` 105;110;116;32;105;32;61;32;48; @@ -69716,7 +72955,7 @@ lösung: vb-wald-loesung.visustruct -`,wB=` +`,yZ=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -69730,7 +72969,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,zB=` +`,wZ=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -69746,7 +72985,27 @@ lösung: vb-wald-loesung.visustruct -`,IB=` +`,zZ=` + + + 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;41; + + + 115;99;104;114;105;116;116;101;32;61;32;115;99;104;114;105;116;116;101;32;43;32;49; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101;41; + + +`,IZ=` 105;110;116;32;105;32;61;32;48; @@ -69798,7 +73057,7 @@ lösung: vb-wald-loesung.visustruct -`,kB=` +`,kZ=` 105;110;116;32;115;101;105;116;101;32;61;32;50;48; @@ -69820,7 +73079,7 @@ lösung: vb-wald-loesung.visustruct -`,SB=` +`,SZ=` 105;110;116;32;115;101;105;116;101;32;61;32;50;48; @@ -69842,7 +73101,7 @@ lösung: vb-wald-loesung.visustruct -`,TB=` +`,TZ=` 105;110;116;32;105;32;61;32;49; @@ -69858,7 +73117,7 @@ lösung: vb-wald-loesung.visustruct -`,_B=` +`,_Z=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -69872,7 +73131,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,jB=` +`,jZ=` 105;110;116;32;114;117;110;100;101;32;61;32;49; @@ -69906,7 +73165,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;53;48;41; -`,CB=` +`,CZ=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -69940,7 +73199,33 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;115;116;114;101;99;107;101;32;43;32;34;32;99;109;34;41; -`,AB=` +`,AZ=` + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; + + + 109;98;111;116;46;98;97;99;107;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;51;48; + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;53;41; + + + + + 109;98;111;116;46;102;111;114;119;97;114;100;40;50;48;41; + + + + + + +`,PZ=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -69958,7 +73243,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,PB=` +`,OZ=` 105;110;116;32;105;32;61;32;48; @@ -69980,7 +73265,7 @@ lösung: vb-wald-loesung.visustruct -`,OB=` +`,DZ=` 105;110;116;32;108;105;110;107;115;32;61;32;57;57; @@ -70012,7 +73297,7 @@ lösung: vb-wald-loesung.visustruct -`,MB=` +`,BZ=` 105;110;116;32;105;32;61;32;48; @@ -70028,7 +73313,7 @@ lösung: vb-wald-loesung.visustruct -`,DB=` +`,MZ=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -70044,7 +73329,7 @@ lösung: vb-wald-loesung.visustruct -`,BB=` +`,ZZ=` 105;110;116;32;115;101;105;116;101;32;61;32;51;48; @@ -70063,7 +73348,7 @@ lösung: vb-wald-loesung.visustruct -`,ZB=` +`,LZ=` 105;110;116;32;105;32;61;32;48; @@ -70096,7 +73381,7 @@ lösung: vb-wald-loesung.visustruct -`,LB=` +`,WZ=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -70135,7 +73420,7 @@ lösung: vb-wald-loesung.visustruct -`,WB=` +`,EZ=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -70151,7 +73436,49 @@ lösung: vb-wald-loesung.visustruct -`,EB=` +`,NZ=` + + + 98;111;111;108;101;97;110;32;100;117;110;107;101;108;32;61;32;102;97;108;115;101; + + + 105;110;116;32;105;32;61;32;48; + 105;32;60;32;51;48; + 105;43;43; + + + 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; + + + 100;117;110;107;101;108;32;61;32;116;114;117;101; + + + + + 248; + + + + + 109;98;111;116;46;112;97;117;115;101;40;49;48;48;41; + + + + + 100;117;110;107;101;108; + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;69;115;32;119;97;114;32;100;117;110;107;101;108;34;41; + + + + + 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;109;109;101;114;32;104;101;108;108;34;41; + + + + +`,FZ=` 105;110;116;32;115;116;114;101;99;107;101;32;61;32;122;101;110;116;105;109;101;116;101;114;40;51;41; @@ -70163,13 +73490,13 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;115;116;114;101;99;107;101;32;43;32;34;32;99;109;34;41; -`,NB=` +`,JZ=` 114;101;116;117;114;110;32;117;109;100;114;101;104;117;110;103;101;110;32;42;32;50;48; -`,FB=` +`,RZ=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -70189,7 +73516,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,JB=` +`,GZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;34; @@ -70201,7 +73528,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,RB=` +`,HZ=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;90;105;101;103;101;110;98;111;99;107;34; @@ -70240,7 +73567,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,GB=` +`,VZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -70262,7 +73589,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,HB=` +`,qZ=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;76;117;100;119;105;103;59;71;101;105;223;98;111;99;107;59;55;34; @@ -70281,7 +73608,7 @@ lösung: vb-wald-loesung.visustruct -`,VB=` +`,UZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;97;116;122;32;34;83;97;116;122;32;101;105;110;103;101;98;101;110;34; @@ -70293,7 +73620,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;246;114;116;101;114;58;32;34;32;43;32;119;111;101;114;116;101;114;46;108;101;110;103;116;104; -`,QB=` +`,QZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -70325,7 +73652,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;32;101;58;32;34;32;43;32;97;110;122;97;104;108; -`,qB=` +`,YZ=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;71;101;105;223;98;111;99;107;34; @@ -70349,14 +73676,14 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;116;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,UB=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. +`,$Z=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. raster: 3 .......Z #####.## ........ ##.##### >....... -`,YB=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. +`,XZ=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. raster: 3 ........Z ######.## @@ -70365,20 +73692,20 @@ raster: 3 ......... .######## >........ -`,$B=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. +`,KZ=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. raster: 3 Z.... ###.. ..... ..### ^.... -`,XB=`// Fahre bis Rot: kurzer Weg +`,eL=`// Fahre bis Rot: kurzer Weg ..... ..r.. ..... ..... ..^.. -`,KB=`// Fahre bis Rot: erst kommt ein grünes Feld +`,tL=`// Fahre bis Rot: erst kommt ein grünes Feld ..... ..r.. ..... @@ -70387,21 +73714,21 @@ Z.... ..... ..... ..^.. -`,eZ=`// Bis Blau, bei Grün piepen +`,nL=`// Bis Blau, bei Grün piepen ..... ..b.. ..... ..g.. ..... ..^.. -`,tZ=`// Bis Blau, ohne grünes Feld +`,iL=`// Bis Blau, ohne grünes Feld ..... ..b.. ..... ..... ..... ..^.. -`,nZ=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. +`,aL=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. ......... .....r... .....o... @@ -70412,7 +73739,7 @@ Z.... ......... ......... ..^...... -`,iZ=`// Hindernis ausweichen: zwei Klötze im Weg. +`,sL=`// Hindernis ausweichen: zwei Klötze im Weg. ......... .......r. .......o. @@ -70427,7 +73754,7 @@ Z.... ......... ......... .^....... -`,aZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. +`,rL=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. ........... .Z......... ........... @@ -70439,7 +73766,7 @@ Z.... ........... .........<. ........... -`,sZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. +`,oL=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. ........... .........Z. ........... @@ -70451,7 +73778,7 @@ Z.... ........... .>......... ........... -`,rZ=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. +`,lL=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. ######### ......... ......... @@ -70466,7 +73793,7 @@ Z.... ......... ..^...... linie: 2,12 2,8 4,5 4,0.6 -`,oZ=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. +`,uL=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. ######### ......... ......... @@ -70481,7 +73808,7 @@ linie: 2,12 2,8 4,5 4,0.6 ......... ......^.. linie: 6,12 6,8 4,5 4,0.6 -`,lZ=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. +`,mL=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. ......... .....r... .....o... @@ -70495,7 +73822,7 @@ linie: 6,12 6,8 4,5 4,0.6 ......... ..^...... linie: 2,11 2,8 5,4 5,1.5 -`,uZ=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. +`,cL=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. ........... ...r....... ...o....... @@ -70511,7 +73838,7 @@ linie: 2,11 2,8 5,4 5,1.5 ........... .......^... linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 -`,mZ=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. +`,dL=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. #....#### #....#### #....#### @@ -70524,7 +73851,7 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,cZ=`// Einparken: Die Lücke liegt weiter vorn. +`,hL=`// Einparken: Die Lücke liegt weiter vorn. #....#### #..b....# #.....o.# @@ -70537,14 +73864,33 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,dZ=`// Bis zur Linie: der schwarze Rand ist nah +`,gL=`// Wo ist am meisten Platz? Rechts ist es am weitesten. +........... +.....#..... +........... +........... +.#...^....# +........... +.....#..... +`,pL=`// Wo ist am meisten Platz? Vorn ist es am weitesten. +.....#..... +........... +........... +........... +........... +........... +....#^.#... +........... +........... +.....#..... +`,fL=`// Bis zur Linie: der schwarze Rand ist nah ..... ===== ..... ..... ..^.. ..... -`,hZ=`// Bis zur Linie: der schwarze Rand ist weiter weg +`,xL=`// Bis zur Linie: der schwarze Rand ist weiter weg ..... ===== ..... @@ -70554,17 +73900,17 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 ..... ..^.. ..... -`,gZ=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. +`,bL=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. raster: 3 ......... >#.#.#.#Z ......... -`,pZ=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. +`,vL=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. raster: 3 ..#..###. >....o... ....##### -`,fZ=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. +`,yL=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. raster: 3 .#.#. .#o#. @@ -70572,12 +73918,12 @@ raster: 3 .#... ..... ..^.. -`,xZ=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. +`,wL=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. raster: 3 .......... >..#.#..#Z .......... -`,bZ=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. +`,zL=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. raster: 3 .Z. .#. @@ -70586,7 +73932,7 @@ raster: 3 ... ... .^. -`,vZ=`// Wand vorn? Vor dem mBot2 ist viel Platz. +`,IL=`// Wand vorn? Vor dem mBot2 ist viel Platz. ##### ..... ..... @@ -70596,14 +73942,14 @@ raster: 3 ..... ..^.. ..... -`,yZ=`// Bis zur Wand: kurzer Weg +`,kL=`// Bis zur Wand: kurzer Weg ##### ..... ..Z.. ..... ..... ..^.. -`,wZ=`// Bis zur Wand: langer Weg +`,SL=`// Bis zur Wand: langer Weg ##### ..... ..Z.. @@ -70619,7 +73965,7 @@ raster: 3 ..... ..... ..^.. -`,zZ=`// Bis zur Wand: mittlerer Weg +`,TL=`// Bis zur Wand: mittlerer Weg ##### ..... ..Z.. @@ -70630,26 +73976,26 @@ raster: 3 ..... ..... ..^.. -`,IZ=`// Wand vorn? Die Wand steht direkt vor dem mBot2. +`,_L=`// Wand vorn? Die Wand steht direkt vor dem mBot2. ##### ..... ..^.. ..... -`,kZ=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? +`,jL=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? ..... ..... ..... ..o.. ..... ..^.. -`,SZ=`// Fahre bis zum Ziel: kurzer Weg, keine Wand +`,CL=`// Fahre bis zum Ziel: kurzer Weg, keine Wand ..... ..Z.. ..... ..... ..^.. ..... -`,TZ=`// Fahre bis zum Ziel: langer Weg, keine Wand +`,AL=`// Fahre bis zum Ziel: langer Weg, keine Wand ..... ..Z.. ..... @@ -70662,77 +74008,77 @@ raster: 3 ..... ..^.. ..... -`,_Z=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,jZ=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,CZ=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,AZ=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,PZ=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,OZ=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,MZ=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,DZ=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,BZ=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,ZZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",LZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",WZ=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,EZ=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,NZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",FZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",JZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",RZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",GZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",HZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",VZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",QZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",qZ=""+new URL("l12-while-zu-for-DddKE_8R.svg",import.meta.url).href,UZ=""+new URL("l13-verschachtelt-tabelle-jipYA7Ld.svg",import.meta.url).href,YZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",$Z="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",XZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",KZ=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,eL=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,tL=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,nL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",iL=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,aL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",sL=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,rL=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,oL=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,lL=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,uL=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,mL=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,cL=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,dL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",hL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",gL=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,pL=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,fL=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,xL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",bL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",vL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",yL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",wL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmhpbGY8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",zL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPnRlbXA8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",IL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmF1eDwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9Ijk3IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPC9nPgo8ZyBzdHJva2U9IiMxZjNhOGEiIHN0cm9rZS13aWR0aD0iMS42IiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiPgo8cGF0aCBkPSJNMTAwIDgzIFExOTAgODEgMzAwIDg0Ii8+CjxwYXRoIGQ9Ik0xNjIgNTYgUTE2MCAxNTAgMTYzIDE5NCIvPgo8cGF0aCBkPSJNMjI4IDU2IFEyMzAgMTUwIDIyNyAxOTQiLz4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMCAyMzIpIHJvdGF0ZSgtMzgpIj4KPHJlY3QgeD0iMCIgeT0iLTkiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIGZpbGw9IiNmNWMwMDAiIHN0cm9rZT0iIzhhNmQwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjAiIHkxPSItMyIgeDI9IjEyMCIgeTI9Ii0zIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIxMjAiIHkyPSIzIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8cmVjdCB4PSIxMjAiIHk9Ii05IiB3aWR0aD0iMTIiIGhlaWdodD0iMTgiIGZpbGw9IiNiOGI4YjgiIHN0cm9rZT0iIzc3NyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHJlY3QgeD0iMTMyIiB5PSItOSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE4IiByeD0iNSIgZmlsbD0iI2YwOGE5YSIgc3Ryb2tlPSIjYTI0YTU4IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNMCAtOSBMLTI2IDAgTDAgOSBaIiBmaWxsPSIjZTljOWEwIiBzdHJva2U9IiM4YTZkNGEiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxwYXRoIGQ9Ik0tMTcgLTMgTC0yNiAwIEwtMTcgMyBaIiBmaWxsPSIjMzMzIi8+CjwvZz4KPC9zdmc+Cg==",kL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",SL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",TL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",_L="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",jL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",CL=""+new URL("l12-while-zu-for-Cu-8sS5S.svg",import.meta.url).href,AL=""+new URL("l13-verschachtelt-tabelle-CmsFvxQ5.svg",import.meta.url).href,PL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",OL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",ML="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",DL=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,BL=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,ZL=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,LL=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,WL=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,EL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",NL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",FL=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,JL=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,RL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",GL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",HL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",VL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",QL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",qL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",UL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",YL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",$L=""+new URL("l12-while-zu-for-CM2--y57.svg",import.meta.url).href,XL=""+new URL("l13-verschachtelt-tabelle-CR2WySqU.svg",import.meta.url).href,KL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",eW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",tW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",nW=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,iW=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,aW=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,sW=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,rW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",oW=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,lW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",uW=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,mW=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,cW=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,dW=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,hW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",gW=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,pW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",fW=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function xW(i){const e=[];for(const t of i.replace(/\r\n/g,` +`,PL=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,OL=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,DL=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,BL=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,ML=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,ZL=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,LL=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,WL=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,EL=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,NL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",FL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",JL=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,RL=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,GL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",HL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",VL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",qL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",UL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",QL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",YL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",$L="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",XL=""+new URL("l12-while-zu-for-DddKE_8R.svg",import.meta.url).href,KL=""+new URL("l13-verschachtelt-tabelle-jipYA7Ld.svg",import.meta.url).href,eW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",tW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",nW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",iW=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,aW=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,sW=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,rW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",oW=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,lW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",uW=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,mW=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,cW=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,dW=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,hW=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,gW=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,pW=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,fW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",xW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",bW=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,vW=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,yW=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,wW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",zW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",IW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",kW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",SW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmhpbGY8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",TW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPnRlbXA8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",_W="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmF1eDwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9Ijk3IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPC9nPgo8ZyBzdHJva2U9IiMxZjNhOGEiIHN0cm9rZS13aWR0aD0iMS42IiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiPgo8cGF0aCBkPSJNMTAwIDgzIFExOTAgODEgMzAwIDg0Ii8+CjxwYXRoIGQ9Ik0xNjIgNTYgUTE2MCAxNTAgMTYzIDE5NCIvPgo8cGF0aCBkPSJNMjI4IDU2IFEyMzAgMTUwIDIyNyAxOTQiLz4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMCAyMzIpIHJvdGF0ZSgtMzgpIj4KPHJlY3QgeD0iMCIgeT0iLTkiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIGZpbGw9IiNmNWMwMDAiIHN0cm9rZT0iIzhhNmQwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjAiIHkxPSItMyIgeDI9IjEyMCIgeTI9Ii0zIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIxMjAiIHkyPSIzIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8cmVjdCB4PSIxMjAiIHk9Ii05IiB3aWR0aD0iMTIiIGhlaWdodD0iMTgiIGZpbGw9IiNiOGI4YjgiIHN0cm9rZT0iIzc3NyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHJlY3QgeD0iMTMyIiB5PSItOSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE4IiByeD0iNSIgZmlsbD0iI2YwOGE5YSIgc3Ryb2tlPSIjYTI0YTU4IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNMCAtOSBMLTI2IDAgTDAgOSBaIiBmaWxsPSIjZTljOWEwIiBzdHJva2U9IiM4YTZkNGEiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxwYXRoIGQ9Ik0tMTcgLTMgTC0yNiAwIEwtMTcgMyBaIiBmaWxsPSIjMzMzIi8+CjwvZz4KPC9zdmc+Cg==",jW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",CW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",AW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",PW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",OW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",DW=""+new URL("l12-while-zu-for-Cu-8sS5S.svg",import.meta.url).href,BW=""+new URL("l13-verschachtelt-tabelle-CmsFvxQ5.svg",import.meta.url).href,MW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",ZW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",LW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",WW=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,EW=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,NW=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,FW=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,JW=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,RW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",GW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",HW=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,VW=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,qW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",UW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",QW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",YW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",$W="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",XW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",KW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",eE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",tE=""+new URL("l12-while-zu-for-CM2--y57.svg",import.meta.url).href,nE=""+new URL("l13-verschachtelt-tabelle-CR2WySqU.svg",import.meta.url).href,iE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",aE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",sE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",rE=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,oE=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,lE=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,uE=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,mE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",cE=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,dE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",hE=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,gE=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,pE=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,fE=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,xE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",bE=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,vE="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",yE=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function wE(i){const e=[];for(const t of i.replace(/\r\n/g,` `).split(` -`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const bW=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function tm(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class Vo extends Error{}function vW(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function yW(i,e,t){const n=h=>{throw new Vo(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` +`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const zE=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function tm(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class Vo extends Error{}function IE(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function kE(i,e,t){const n=h=>{throw new Vo(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` `:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten|stelle):\s*(.*)$/.exec(g);if(f){const[,v,w]=f;v==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?v==="frage"?c.question=w:v==="fehler"?c.wrongLine=Number(w):v==="besser"?c.fix=w:v==="stelle"?c.wrongPart=w.trim():v==="klicks"?c.clicks=w.split(",").map(z=>z.trim()).filter(Boolean):v==="richtig"?c.rightText=w:n(`„${v}:“ gehört vor die erste Runde.`):v==="titel"?a=w:v==="intro"?s=w:v==="antworten"?o=w.split("|").map(z=>z.trim()):v==="frage"?r=w:v==="zeit"?l=Number(w):v==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${v}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` `),right:!!b[1]}):g.startsWith(">")?x.explanation+=(x.explanation?" ":"")+g.slice(1).trim():n(`Unbekannte Zeile im Spiel: „${g}“`)}return a||n("Das Spiel braucht eine Zeile „titel:“."),m.length||n("Das Spiel braucht mindestens eine „runde:“."),m.forEach((h,g)=>{if(h.code=h.code.replace(/\n+$/,""),i==="bombe"){const f=h.code.split(` -`),x=h.wrongLine;if((!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`),h.wrongPart!==void 0){u&&n(`Runde ${g+1}: „stelle:“ geht nur bei Java, nicht bei CSV.`);const b=cg(f[x-1]).filter(v=>v.part).map(v=>v.text);b.filter(v=>v===h.wrongPart).length!==1&&n(`Runde ${g+1}: „stelle: ${h.wrongPart}“ ist kein Teil der Zeile ${x}. Teile: ${b.map(v=>`„${v}“`).join(", ")}`)}return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>dg(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=hg(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);IW(f,h.clicks)}catch(f){if(f instanceof Vo)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function ga(i,e){const t=[];let n=0,a="";for(let s=0;so&&/\s/.test(i[l-1]);)l--;l>o&&a.push([e+o,e+l]),s=r+n}return a}const wW=(i,e)=>i[e]==="+"&&i[e-1]!=="+"&&i[e+1]!=="+"&&i[e+1]!=="=",zW=(i,e)=>i[e]==="="&&!"=<>!+-*/%".includes(i[e-1]??"")&&i[e+1]!=="=";function cg(i){const e=/^\s*/.exec(i)[0],t=i.slice(e.length).replace(/\s+$/,""),n=(()=>{const o=/^(?:\}\s*)?(?:else\s+)?(for|if|while)\s*\(/.exec(t);if(o){const g=o[0].length-1,f=im(t,g);if(f<0)return[];const x=t.slice(g+1,f);if(o[1]!=="for")return f1(x,g+1,[],0);const b=ga(x,(v,w)=>v[w]===";");return b.length===2?f1(x,g+1,b,1):[]}if(!t.endsWith(";"))return[];const l=t.slice(0,-1),u=ga(l,zW);if(u.length===1)return f1(l,0,u,1);if(u.length)return[];const m=l.indexOf("(");if(m<=0||im(l,m)!==l.length-1||/^(new|return)\b/.test(l))return[];const c=f1(l.slice(0,m),0,[],0),d=l.slice(m+1,-1),h=f1(d,m+1,ga(d,(g,f)=>g[f]===","),1).flatMap(([g,f])=>{const x=l.slice(g,f);return f1(x,g,ga(x,wW),1)});return[...c,...h]})(),a=n.length?n:t?[[0,t.length]]:[],s=e?[{text:e,part:!1}]:[];let r=0;for(const[o,l]of a)o>r&&s.push({text:t.slice(r,o),part:!1}),s.push({text:t.slice(o,l),part:!0}),r=l;return r{throw new Vo(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ya='"((?:[^"\\\\]|\\\\.)*)"';function hg(i){const e=i.split(` -`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:Qo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Qo(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function Qo(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return Qo(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return fg(i,e,n.name)}function fg(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])xg(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function IW(i,e){const t=gg(i);return e.map(n=>pg(i,t,n))}function xg(i,e,t,n){if(typeof i!="string"){for(const s of kW(i.condition,e,n)?i.then:i.otherwise)xg(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String(Yn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Yn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[am(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=am(a[1],e),r=Number(Yn(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function kW(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String(Yn(n[2],e,t))===String(Yn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Yn(n[1],e,t)),s=Number(Yn(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function am(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Yn(i,e,t){const n=i.match(new RegExp(`${Ya}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class SW extends Error{}const _s="___";function TW(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function _W(i,e){const t=j=>{throw new SW(`${e}: ${j}`)},n=(j,M)=>{const O=/^(\d+)\s+(\d+)$/.exec(j.trim());return!O||Number(O[1])<1||Number(O[2])<1?t(`${M}: „${j}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(O[1])-1,col:Number(O[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const j of i){const M=j.trim();if(g&&(/^( {4}|\t)/.test(j)||M==="")){const P=j.replace(/^( {4}|\t)/,"");if(g==="station"){const C=c[c.length-1];C.code+=(C.code?` +`),x=h.wrongLine;if((!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`),h.wrongPart!==void 0){u&&n(`Runde ${g+1}: „stelle:“ geht nur bei Java, nicht bei CSV.`);const b=cg(f[x-1]).filter(v=>v.part).map(v=>v.text);b.filter(v=>v===h.wrongPart).length!==1&&n(`Runde ${g+1}: „stelle: ${h.wrongPart}“ ist kein Teil der Zeile ${x}. Teile: ${b.map(v=>`„${v}“`).join(", ")}`)}return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>dg(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=hg(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);_E(f,h.clicks)}catch(f){if(f instanceof Vo)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function ga(i,e){const t=[];let n=0,a="";for(let s=0;so&&/\s/.test(i[l-1]);)l--;l>o&&a.push([e+o,e+l]),s=r+n}return a}const SE=(i,e)=>i[e]==="+"&&i[e-1]!=="+"&&i[e+1]!=="+"&&i[e+1]!=="=",TE=(i,e)=>i[e]==="="&&!"=<>!+-*/%".includes(i[e-1]??"")&&i[e+1]!=="=";function cg(i){const e=/^\s*/.exec(i)[0],t=i.slice(e.length).replace(/\s+$/,""),n=(()=>{const o=/^(?:\}\s*)?(?:else\s+)?(for|if|while)\s*\(/.exec(t);if(o){const g=o[0].length-1,f=im(t,g);if(f<0)return[];const x=t.slice(g+1,f);if(o[1]!=="for")return f1(x,g+1,[],0);const b=ga(x,(v,w)=>v[w]===";");return b.length===2?f1(x,g+1,b,1):[]}if(!t.endsWith(";"))return[];const l=t.slice(0,-1),u=ga(l,TE);if(u.length===1)return f1(l,0,u,1);if(u.length)return[];const m=l.indexOf("(");if(m<=0||im(l,m)!==l.length-1||/^(new|return)\b/.test(l))return[];const c=f1(l.slice(0,m),0,[],0),d=l.slice(m+1,-1),h=f1(d,m+1,ga(d,(g,f)=>g[f]===","),1).flatMap(([g,f])=>{const x=l.slice(g,f);return f1(x,g,ga(x,SE),1)});return[...c,...h]})(),a=n.length?n:t?[[0,t.length]]:[],s=e?[{text:e,part:!1}]:[];let r=0;for(const[o,l]of a)o>r&&s.push({text:t.slice(r,o),part:!1}),s.push({text:t.slice(o,l),part:!0}),r=l;return r{throw new Vo(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ya='"((?:[^"\\\\]|\\\\.)*)"';function hg(i){const e=i.split(` +`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:qo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:qo(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function qo(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return qo(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return fg(i,e,n.name)}function fg(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])xg(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function _E(i,e){const t=gg(i);return e.map(n=>pg(i,t,n))}function xg(i,e,t,n){if(typeof i!="string"){for(const s of jE(i.condition,e,n)?i.then:i.otherwise)xg(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String(Yn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Yn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[am(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=am(a[1],e),r=Number(Yn(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function jE(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String(Yn(n[2],e,t))===String(Yn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Yn(n[1],e,t)),s=Number(Yn(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function am(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Yn(i,e,t){const n=i.match(new RegExp(`${Ya}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class CE extends Error{}const _s="___";function AE(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function PE(i,e){const t=j=>{throw new CE(`${e}: ${j}`)},n=(j,D)=>{const O=/^(\d+)\s+(\d+)$/.exec(j.trim());return!O||Number(O[1])<1||Number(O[2])<1?t(`${D}: „${j}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(O[1])-1,col:Number(O[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const j of i){const D=j.trim();if(g&&(/^( {4}|\t)/.test(j)||D==="")){const P=j.replace(/^( {4}|\t)/,"");if(g==="station"){const C=c[c.length-1];C.code+=(C.code?` `:"")+P}else u+=(u?` -`:"")+P;continue}if(g=void 0,!M)continue;const O=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(M);if(O){const[,P,C]=O;if(P==="station")c.push({name:C,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=C,f="crossword";else if(P==="tor")l=C,f="gate",g="gate";else if(P==="titel")a=C;else if(P==="intro")s=C;else if(P==="alphabet")r=C;else if(P==="ende")m=C;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=C.split(",").map(Z=>n(Z,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const Z=c[c.length-1];P==="frage"?Z.question=C:P==="tipp"?Z.hint=C:P==="zahl"?Z.answer=/^-?\d+$/.test(C)?Number(C):t(`Station „${Z.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(Z,n(C,`Station „${Z.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(M);P||t(`Kreuzworträtsel: „${M}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&M.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+M.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${M}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(_s)||t(`Der Code bei „tor:“ braucht ${_s} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(j=>j.row+(j.across?1:j.word.length))),b=Math.max(...d.map(j=>j.col+(j.across?j.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const j of d)[...j.word].forEach((M,O)=>{const P=j.row+(j.across?0:O),C=j.col+(j.across?O:0);v[P][C]&&v[P][C]!==M&&t(`Kreuzworträtsel: ${j.word} passt in Zeile ${P+1}, Spalte ${C+1} nicht (dort steht ${v[P][C]}).`),v[P][C]=M});const w=[...new Set(d.map(j=>j.row*b+j.col))].sort((j,M)=>j-M),z=d.map(j=>({...j,number:w.indexOf(j.row*b+j.col)+1})),I=(j,M)=>{var O;return((O=v[j])==null?void 0:O[M])??""},k=h.map(({row:j,col:M})=>I(j,M)||t(`lösung: In Zeile ${j+1}, Spalte ${M+1} ist kein Feld.`)).join(""),S=c.map(j=>{j.code||t(`Station „${j.name}“: Code fehlt.`),j.question||t(`Station „${j.name}“: „frage:“ fehlt.`),j.answer===void 0&&t(`Station „${j.name}“: „zahl:“ fehlt.`),j.row===void 0&&t(`Station „${j.name}“: „feld:“ fehlt.`);const M=r.charAt(j.answer);M||t(`Station „${j.name}“: alphabet.charAt(${j.answer}) gibt es nicht.`);const O=I(j.row,j.col);return O!==M&&t(`Station „${j.name}“: alphabet.charAt(${j.answer}) ist ${M}, im Feld ${j.row+1} ${j.col+1} steht aber „${O}“.`),j.code=j.code.replace(/\n+$/,""),j});return{title:a,intro:s,alphabet:r,stations:S,crosswordText:o,rows:x,cols:b,words:z,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const jW=/\[\[(.+?)\]\]/g;function CW(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>AW(o.slice(r),e,t.title))}),!PW(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function AW(i,e,t){const n=[];let a=0;for(const s of i.matchAll(jW)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function PW(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function OW(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const sm={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function MW(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in sm){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:sm[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=EW(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:BW,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:ZW,h:s},n.side!==void 0&&(e[n.side]={x:LW,y:t+s/2,w:WW,h:40}),t+=s+rm}),{boxes:e,height:t-rm+10}}function bg(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));ln(Z,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const Z=c[c.length-1];P==="frage"?Z.question=C:P==="tipp"?Z.hint=C:P==="zahl"?Z.answer=/^-?\d+$/.test(C)?Number(C):t(`Station „${Z.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(Z,n(C,`Station „${Z.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(D);P||t(`Kreuzworträtsel: „${D}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&D.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+D.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${D}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(_s)||t(`Der Code bei „tor:“ braucht ${_s} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const x=Math.max(...d.map(j=>j.row+(j.across?1:j.word.length))),b=Math.max(...d.map(j=>j.col+(j.across?j.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const j of d)[...j.word].forEach((D,O)=>{const P=j.row+(j.across?0:O),C=j.col+(j.across?O:0);v[P][C]&&v[P][C]!==D&&t(`Kreuzworträtsel: ${j.word} passt in Zeile ${P+1}, Spalte ${C+1} nicht (dort steht ${v[P][C]}).`),v[P][C]=D});const w=[...new Set(d.map(j=>j.row*b+j.col))].sort((j,D)=>j-D),z=d.map(j=>({...j,number:w.indexOf(j.row*b+j.col)+1})),I=(j,D)=>{var O;return((O=v[j])==null?void 0:O[D])??""},k=h.map(({row:j,col:D})=>I(j,D)||t(`lösung: In Zeile ${j+1}, Spalte ${D+1} ist kein Feld.`)).join(""),S=c.map(j=>{j.code||t(`Station „${j.name}“: Code fehlt.`),j.question||t(`Station „${j.name}“: „frage:“ fehlt.`),j.answer===void 0&&t(`Station „${j.name}“: „zahl:“ fehlt.`),j.row===void 0&&t(`Station „${j.name}“: „feld:“ fehlt.`);const D=r.charAt(j.answer);D||t(`Station „${j.name}“: alphabet.charAt(${j.answer}) gibt es nicht.`);const O=I(j.row,j.col);return O!==D&&t(`Station „${j.name}“: alphabet.charAt(${j.answer}) ist ${D}, im Feld ${j.row+1} ${j.col+1} steht aber „${O}“.`),j.code=j.code.replace(/\n+$/,""),j});return{title:a,intro:s,alphabet:r,stations:S,crosswordText:o,rows:x,cols:b,words:z,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const OE=/\[\[(.+?)\]\]/g;function DE(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>BE(o.slice(r),e,t.title))}),!ME(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function BE(i,e,t){const n=[];let a=0;for(const s of i.matchAll(OE)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function ME(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function ZE(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const sm={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function LE(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in sm){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:sm[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=RE(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:EE,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:NE,h:s},n.side!==void 0&&(e[n.side]={x:FE,y:t+s/2,w:JE,h:40}),t+=s+rm}),{boxes:e,height:t-rm+10}}function bg(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));l|→)\s*/);if(t.length!==2)throw new ne(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function JW(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in At))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof At[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return wg({inputs:[],expected:[],sensors:t},e[2])}function wg(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=ps(Dh(t.join(", ")))),i}function RW(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(FW(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ne(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:ps(Dh(l))})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(wg({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ne(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ne(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:X3(l)})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(JW(l))}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ne(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ne(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ne(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` +`).slice(t[0].length)}}function HE(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new ne(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function VE(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in At))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof At[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return wg({inputs:[],expected:[],sensors:t},e[2])}function wg(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=ps(Bh(t.join(", ")))),i}function qE(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(HE(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ne(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:ps(Bh(l))})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(wg({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ne(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ne(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:X3(l)})}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(VE(l))}catch(u){throw new ne(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ne(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ne(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ne(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` `+s.trim():n.hints[n.hints.length-1]+=` `+s.trim():s.trim()===""&&a==="task"&&(n.task+=` -`)}if(!n.title)throw new ne(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ne(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function GW(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ne(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ne(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ne(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ne(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ne(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function zg(i,e){const t=[],n=i.split(` +`)}if(!n.title)throw new ne(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ne(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function UE(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ne(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ne(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ne(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ne(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ne(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function zg(i,e){const t=[],n=i.split(` `);let a=[];const s=()=>{const r=a.join(` -`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ne(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ne(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ne(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:RW(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>HW(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:GW(l,e)});break;case"bild":if(!c)throw new ne(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ne(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/),g=h==="animiert"?{animated:!0}:h?{labeled:h}:{};t.push({kind:"graphic",file:d,...g,caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` -`).trim()});break;case"spiel":try{if(vW(c))t.push({kind:"roundGame",game:yW(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:_W(l,e)});else{if(c)throw new ne(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:Nb(l,e)})}}catch(d){throw new ne(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:CW(l,e)})}catch(d){throw new ne(d.message)}break;case"pap":try{t.push({kind:"pap",pap:MW(l,e)})}catch(d){throw new ne(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` +`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ne(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ne(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ne(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:qE(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>QE(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:UE(l,e)});break;case"bild":if(!c)throw new ne(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ne(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/),g=h==="animiert"?{animated:!0}:h?{labeled:h}:{};t.push({kind:"graphic",file:d,...g,caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` +`).trim()});break;case"spiel":try{if(IE(c))t.push({kind:"roundGame",game:kE(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:PE(l,e)});else{if(c)throw new ne(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:N4(l,e)})}}catch(d){throw new ne(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:DE(l,e)})}catch(d){throw new ne(d.message)}break;case"pap":try{t.push({kind:"pap",pap:LE(l,e)})}catch(d){throw new ne(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` `).trim(),tip:!0});break;case"caesar":{const d=c?Number(c):3;if(!Number.isInteger(d)||d<0||d>25)throw new ne(`${e}: „::: caesar“ braucht einen Schlüssel von 0 bis 25.`);t.push({kind:"caesar",key:d,text:l.join(" ").trim()});break}case"mbot2":{const d={kind:"robotModel",focus:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*(fokus|focus|ansicht|view|drehen|spin):\s*(.*)$/i.exec(h);if(!g)throw new ne(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=om(g[2],e):f==="ansicht"||f==="view"?d.view=g[2].trim().toLowerCase():d.spin=/^(ja|yes|true|sim)$/i.test(g[2].trim())}t.push(d);break}case"mbot2quiz":{const d={kind:"robotQuiz",tasks:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*-\s*(\w+)\s*:\s*(.+)$/.exec(h),f=/^\s*(fertig|done):\s*(.+)$/i.exec(h);if(g)d.tasks.push({part:om(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new ne(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new ne(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new ne(`${e}: „::: datei“ braucht einen Dateinamen wie brief.txt, liste.csv oder daten.json.`);for(;l.length&&l[0].trim()==="";)l.shift();for(;l.length&&l[l.length-1].trim()==="";)l.pop();t.push({kind:"textFile",name:c,content:l.join(` -`)});break}default:throw new ne(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function HW(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function VW(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ne(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ne(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ne(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function QW(i,e){var c;const{meta:t,body:n}=yg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ne(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:zg(l.lines.join(` +`)});break}default:throw new ne(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function QE(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function YE(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ne(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ne(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ne(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function $E(i,e){var c;const{meta:t,body:n}=yg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ne(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:zg(l.lines.join(` `),e)})};for(const d of n.split(` -`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ne(`${e}: Keine Schritte (## Überschrift) gefunden.`);VW(r,e);const m=t.get("titel");if(!m)throw new ne(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function qW(i,e){const{meta:t,body:n}=yg(i,e),a=t.get("titel");if(!a)throw new ne(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:zg(n,e)}}function om(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!tx(n))throw new ne(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${Bh.join(", ")}.`);return t}const UW=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Qb,"../../lessons/de/02-der-editor.md":qb,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Ub,"../../lessons/de/04-variablen-und-datentypen.md":Yb,"../../lessons/de/05-sequenz.md":$b,"../../lessons/de/06-eingabe-und-ausgabe.md":Xb,"../../lessons/de/07-simulation-und-schreibtischtest.md":Kb,"../../lessons/de/08-verzweigung.md":e4,"../../lessons/de/09-bedingungen-verknuepfen.md":t4,"../../lessons/de/10-fallauswahl.md":n4,"../../lessons/de/11-while-schleife.md":i4,"../../lessons/de/12-do-while-schleife.md":a4,"../../lessons/de/13-for-schleife.md":s4,"../../lessons/de/14-verschachteln.md":r4,"../../lessons/de/15-arrays.md":o4,"../../lessons/de/16-zweidimensionale-arrays.md":l4,"../../lessons/de/17-zeichenketten.md":u4,"../../lessons/de/18-aufruf-und-aussprung.md":m4,"../../lessons/de/19-suchen-und-sortieren.md":c4,"../../lessons/de/20-java.md":d4,"../../lessons/de/21-python-und-javascript.md":h4,"../../lessons/de/22-try-und-catch.md":g4,"../../lessons/de/23-text-einlesen-und-speichern.md":p4,"../../lessons/de/24-zeile-fuer-zeile.md":f4,"../../lessons/de/25-tabellen-als-csv.md":x4,"../../lessons/de/26-json.md":b4,"../../lessons/de/27-formate-im-vergleich.md":v4,"../../lessons/de/28-erstes-fenster.md":y4,"../../lessons/de/29-knopf-im-fenster.md":w4,"../../lessons/de/30-der-knopf-reagiert.md":z4,"../../lessons/de/31-zahl-verdoppeln.md":I4,"../../lessons/de/32-klickzaehler.md":k4,"../../lessons/de/33-ampel.md":S4,"../../lessons/de/34-notenrechner.md":T4,"../../lessons/de/35-taschenrechner.md":_4,"../../lessons/de/36-zahlenraten.md":j4,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":C4,"../../lessons/de/38-innere-klassen.md":A4,"../../lessons/de/39-zwei-reiter.md":P4,"../../lessons/de/40-model-view-controller.md":O4,"../../lessons/de/begriffe.md":M4,"../../lessons/de/nachschlagen.md":D4,"../../lessons/en/01-was-ist-ein-struktogramm.md":B4,"../../lessons/en/02-der-editor.md":Z4,"../../lessons/en/03-speichern-oeffnen-exportieren.md":L4,"../../lessons/en/04-variablen-und-datentypen.md":W4,"../../lessons/en/05-sequenz.md":E4,"../../lessons/en/06-eingabe-und-ausgabe.md":N4,"../../lessons/en/07-simulation-und-schreibtischtest.md":F4,"../../lessons/en/08-verzweigung.md":J4,"../../lessons/en/09-bedingungen-verknuepfen.md":R4,"../../lessons/en/10-fallauswahl.md":G4,"../../lessons/en/11-while-schleife.md":H4,"../../lessons/en/12-do-while-schleife.md":V4,"../../lessons/en/13-for-schleife.md":Q4,"../../lessons/en/14-verschachteln.md":q4,"../../lessons/en/15-arrays.md":U4,"../../lessons/en/16-zweidimensionale-arrays.md":Y4,"../../lessons/en/17-zeichenketten.md":$4,"../../lessons/en/18-aufruf-und-aussprung.md":X4,"../../lessons/en/19-suchen-und-sortieren.md":K4,"../../lessons/en/20-java.md":ev,"../../lessons/en/21-python-und-javascript.md":tv,"../../lessons/en/22-try-und-catch.md":nv,"../../lessons/en/23-text-einlesen-und-speichern.md":iv,"../../lessons/en/24-zeile-fuer-zeile.md":av,"../../lessons/en/25-tabellen-als-csv.md":sv,"../../lessons/en/26-json.md":rv,"../../lessons/en/27-formate-im-vergleich.md":ov,"../../lessons/en/28-erstes-fenster.md":lv,"../../lessons/en/29-knopf-im-fenster.md":uv,"../../lessons/en/30-der-knopf-reagiert.md":mv,"../../lessons/en/31-zahl-verdoppeln.md":cv,"../../lessons/en/32-klickzaehler.md":dv,"../../lessons/en/33-ampel.md":hv,"../../lessons/en/34-notenrechner.md":gv,"../../lessons/en/35-taschenrechner.md":pv,"../../lessons/en/36-zahlenraten.md":fv,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":xv,"../../lessons/en/38-innere-klassen.md":bv,"../../lessons/en/39-zwei-reiter.md":vv,"../../lessons/en/40-model-view-controller.md":yv,"../../lessons/en/begriffe.md":wv,"../../lessons/en/nachschlagen.md":zv,"../../lessons/pt/01-was-ist-ein-struktogramm.md":Iv,"../../lessons/pt/02-der-editor.md":kv,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":Sv,"../../lessons/pt/04-variablen-und-datentypen.md":Tv,"../../lessons/pt/05-sequenz.md":_v,"../../lessons/pt/06-eingabe-und-ausgabe.md":jv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":Cv,"../../lessons/pt/08-verzweigung.md":Av,"../../lessons/pt/09-bedingungen-verknuepfen.md":Pv,"../../lessons/pt/10-fallauswahl.md":Ov,"../../lessons/pt/11-while-schleife.md":Mv,"../../lessons/pt/12-do-while-schleife.md":Dv,"../../lessons/pt/13-for-schleife.md":Bv,"../../lessons/pt/14-verschachteln.md":Zv,"../../lessons/pt/15-arrays.md":Lv,"../../lessons/pt/16-zweidimensionale-arrays.md":Wv,"../../lessons/pt/17-zeichenketten.md":Ev,"../../lessons/pt/18-aufruf-und-aussprung.md":Nv,"../../lessons/pt/19-suchen-und-sortieren.md":Fv,"../../lessons/pt/20-java.md":Jv,"../../lessons/pt/21-python-und-javascript.md":Rv,"../../lessons/pt/22-try-und-catch.md":Gv,"../../lessons/pt/23-text-einlesen-und-speichern.md":Hv,"../../lessons/pt/24-zeile-fuer-zeile.md":Vv,"../../lessons/pt/25-tabellen-als-csv.md":Qv,"../../lessons/pt/26-json.md":qv,"../../lessons/pt/27-formate-im-vergleich.md":Uv,"../../lessons/pt/28-erstes-fenster.md":Yv,"../../lessons/pt/29-knopf-im-fenster.md":$v,"../../lessons/pt/30-der-knopf-reagiert.md":Xv,"../../lessons/pt/31-zahl-verdoppeln.md":Kv,"../../lessons/pt/32-klickzaehler.md":ey,"../../lessons/pt/33-ampel.md":ty,"../../lessons/pt/34-notenrechner.md":ny,"../../lessons/pt/35-taschenrechner.md":iy,"../../lessons/pt/36-zahlenraten.md":ay,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":sy,"../../lessons/pt/38-innere-klassen.md":ry,"../../lessons/pt/39-zwei-reiter.md":oy,"../../lessons/pt/40-model-view-controller.md":ly,"../../lessons/pt/begriffe.md":uy,"../../lessons/pt/nachschlagen.md":my}),YW=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":cy,"../../lessons/de/aufgaben/ballwurf.md":dy,"../../lessons/de/aufgaben/bestenliste.md":hy,"../../lessons/de/aufgaben/binaerzahl.md":gy,"../../lessons/de/aufgaben/caesar.md":py,"../../lessons/de/aufgaben/collatz.md":fy,"../../lessons/de/aufgaben/einheitenrechner.md":xy,"../../lessons/de/aufgaben/fibonacci.md":by,"../../lessons/de/aufgaben/gerade-ungerade.md":vy,"../../lessons/de/aufgaben/mehrwertsteuer.md":yy,"../../lessons/de/aufgaben/notendurchschnitt.md":wy,"../../lessons/de/aufgaben/pin-pruefen.md":zy,"../../lessons/de/aufgaben/schiffe-versenken.md":Iy,"../../lessons/de/aufgaben/speisekarte.md":ky,"../../lessons/de/aufgaben/summe-bilden.md":Sy,"../../lessons/de/aufgaben/tafeldienst.md":Ty,"../../lessons/de/aufgaben/taschenrechner.md":_y,"../../lessons/de/aufgaben/verleih-menue.md":jy,"../../lessons/de/aufgaben/vokabeltrainer.md":Cy,"../../lessons/de/aufgaben/volljaehrig.md":Ay,"../../lessons/de/aufgaben/wuerfel-mvc.md":Py,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Oy,"../../lessons/en/aufgaben/alter-unterprogramm.md":My,"../../lessons/en/aufgaben/ballwurf.md":Dy,"../../lessons/en/aufgaben/bestenliste.md":By,"../../lessons/en/aufgaben/binaerzahl.md":Zy,"../../lessons/en/aufgaben/caesar.md":Ly,"../../lessons/en/aufgaben/collatz.md":Wy,"../../lessons/en/aufgaben/einheitenrechner.md":Ey,"../../lessons/en/aufgaben/fibonacci.md":Ny,"../../lessons/en/aufgaben/gerade-ungerade.md":Fy,"../../lessons/en/aufgaben/mehrwertsteuer.md":Jy,"../../lessons/en/aufgaben/notendurchschnitt.md":Ry,"../../lessons/en/aufgaben/pin-pruefen.md":Gy,"../../lessons/en/aufgaben/schiffe-versenken.md":Hy,"../../lessons/en/aufgaben/speisekarte.md":Vy,"../../lessons/en/aufgaben/summe-bilden.md":Qy,"../../lessons/en/aufgaben/tafeldienst.md":qy,"../../lessons/en/aufgaben/taschenrechner.md":Uy,"../../lessons/en/aufgaben/verleih-menue.md":Yy,"../../lessons/en/aufgaben/vokabeltrainer.md":$y,"../../lessons/en/aufgaben/volljaehrig.md":Xy,"../../lessons/en/aufgaben/wuerfel-mvc.md":Ky,"../../lessons/en/aufgaben/zahl-verdoppeln.md":e9,"../../lessons/pt/aufgaben/alter-unterprogramm.md":t9,"../../lessons/pt/aufgaben/ballwurf.md":n9,"../../lessons/pt/aufgaben/bestenliste.md":i9,"../../lessons/pt/aufgaben/binaerzahl.md":a9,"../../lessons/pt/aufgaben/caesar.md":s9,"../../lessons/pt/aufgaben/collatz.md":r9,"../../lessons/pt/aufgaben/einheitenrechner.md":o9,"../../lessons/pt/aufgaben/fibonacci.md":l9,"../../lessons/pt/aufgaben/gerade-ungerade.md":u9,"../../lessons/pt/aufgaben/mehrwertsteuer.md":m9,"../../lessons/pt/aufgaben/notendurchschnitt.md":c9,"../../lessons/pt/aufgaben/pin-pruefen.md":d9,"../../lessons/pt/aufgaben/schiffe-versenken.md":h9,"../../lessons/pt/aufgaben/speisekarte.md":g9,"../../lessons/pt/aufgaben/summe-bilden.md":p9,"../../lessons/pt/aufgaben/tafeldienst.md":f9,"../../lessons/pt/aufgaben/taschenrechner.md":x9,"../../lessons/pt/aufgaben/verleih-menue.md":b9,"../../lessons/pt/aufgaben/vokabeltrainer.md":v9,"../../lessons/pt/aufgaben/volljaehrig.md":y9,"../../lessons/pt/aufgaben/wuerfel-mvc.md":w9,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":z9}),lm=Object.assign({"../../lessons/de/visubot/00-struktogramm-und-editor.md":I9,"../../lessons/de/visubot/01-der-mbot2.md":k9,"../../lessons/de/visubot/02-das-quadrat.md":S9,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":T9,"../../lessons/de/visubot/03-zeile-fuer-zeile-testen.md":_9,"../../lessons/de/visubot/04-sensoren.md":j9,"../../lessons/de/visubot/05-bis-zur-wand.md":C9,"../../lessons/de/visubot/05-erst-fahren-dann-pruefen.md":A9,"../../lessons/de/visubot/06-abstand.md":P9,"../../lessons/de/visubot/07-linie.md":O9,"../../lessons/de/visubot/07-und-oder.md":M9,"../../lessons/de/visubot/08-farben.md":D9,"../../lessons/de/visubot/09-fallauswahl-mbot2.md":B9,"../../lessons/de/visubot/10-tasten-joystick.md":Z9,"../../lessons/de/visubot/10-unterbrechen-mit-break.md":L9,"../../lessons/de/visubot/11-licht.md":W9,"../../lessons/de/visubot/12-lautstaerke.md":E9,"../../lessons/de/visubot/13-neigung.md":N9,"../../lessons/de/visubot/14-leds.md":F9,"../../lessons/de/visubot/15-einzelne-leds.md":J9,"../../lessons/de/visubot/16-lautsprecher.md":R9,"../../lessons/de/visubot/17-arrays-melodie.md":G9,"../../lessons/de/visubot/18-bildschirm.md":H9,"../../lessons/de/visubot/19-zeichenketten.md":V9,"../../lessons/de/visubot/20-motoren.md":Q9,"../../lessons/de/visubot/21-stoppuhr-akku.md":q9,"../../lessons/de/visubot/22-eigene-methoden.md":U9,"../../lessons/de/visubot/nachschlagen.md":Y9,"../../lessons/en/visubot/00-struktogramm-und-editor.md":$9,"../../lessons/en/visubot/01-der-mbot2.md":X9,"../../lessons/en/visubot/02-das-quadrat.md":K9,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":ew,"../../lessons/en/visubot/03-zeile-fuer-zeile-testen.md":tw,"../../lessons/en/visubot/04-sensoren.md":nw,"../../lessons/en/visubot/05-bis-zur-wand.md":iw,"../../lessons/en/visubot/05-erst-fahren-dann-pruefen.md":aw,"../../lessons/en/visubot/06-abstand.md":sw,"../../lessons/en/visubot/07-linie.md":rw,"../../lessons/en/visubot/07-und-oder.md":ow,"../../lessons/en/visubot/08-farben.md":lw,"../../lessons/en/visubot/09-fallauswahl-mbot2.md":uw,"../../lessons/en/visubot/10-tasten-joystick.md":mw,"../../lessons/en/visubot/10-unterbrechen-mit-break.md":cw,"../../lessons/en/visubot/11-licht.md":dw,"../../lessons/en/visubot/12-lautstaerke.md":hw,"../../lessons/en/visubot/13-neigung.md":gw,"../../lessons/en/visubot/14-leds.md":pw,"../../lessons/en/visubot/15-einzelne-leds.md":fw,"../../lessons/en/visubot/16-lautsprecher.md":xw,"../../lessons/en/visubot/17-arrays-melodie.md":bw,"../../lessons/en/visubot/18-bildschirm.md":vw,"../../lessons/en/visubot/19-zeichenketten.md":yw,"../../lessons/en/visubot/20-motoren.md":ww,"../../lessons/en/visubot/21-stoppuhr-akku.md":zw,"../../lessons/en/visubot/22-eigene-methoden.md":Iw,"../../lessons/en/visubot/nachschlagen.md":kw}),$W=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":Sw,"../../lessons/de/visubot/aufgaben/ausgang.md":Tw,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":_w,"../../lessons/de/visubot/aufgaben/dreieck.md":jw,"../../lessons/de/visubot/aufgaben/einparken.md":Cw,"../../lessons/de/visubot/aufgaben/hindernis.md":Aw,"../../lessons/de/visubot/aufgaben/knight-rider.md":Pw,"../../lessons/de/visubot/aufgaben/labyrinth.md":Ow,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":Mw,"../../lessons/de/visubot/aufgaben/morsen.md":Dw,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":Bw,"../../lessons/de/visubot/aufgaben/slalom.md":Zw,"../../lessons/de/visubot/aufgaben/spirale.md":Lw,"../../lessons/de/visubot/aufgaben/treppe.md":Ww,"../../lessons/de/visubot/aufgaben/tunnel.md":Ew,"../../lessons/de/visubot/aufgaben/wald.md":Nw,"../../lessons/en/visubot/aufgaben/alarmanlage.md":Fw,"../../lessons/en/visubot/aufgaben/ausgang.md":Jw,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":Rw,"../../lessons/en/visubot/aufgaben/dreieck.md":Gw,"../../lessons/en/visubot/aufgaben/einparken.md":Hw,"../../lessons/en/visubot/aufgaben/hindernis.md":Vw,"../../lessons/en/visubot/aufgaben/knight-rider.md":Qw,"../../lessons/en/visubot/aufgaben/labyrinth.md":qw,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":Uw,"../../lessons/en/visubot/aufgaben/morsen.md":Yw,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":$w,"../../lessons/en/visubot/aufgaben/slalom.md":Xw,"../../lessons/en/visubot/aufgaben/spirale.md":Kw,"../../lessons/en/visubot/aufgaben/treppe.md":e5,"../../lessons/en/visubot/aufgaben/tunnel.md":t5,"../../lessons/en/visubot/aufgaben/wald.md":n5}),XW=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":i5,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":a5,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":s5,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":r5,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":o5,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":l5,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":u5,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":m5,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":c5,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":d5,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":h5,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":g5,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":p5,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":f5,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":x5,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":b5,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":v5,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":y5,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":w5,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":z5,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":I5,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":k5,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":S5,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":T5,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":_5,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":j5,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":C5,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":A5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":P5,"../../lessons/diagramme/dt-buffered.visustruct":O5,"../../lessons/diagramme/dt-csv.visustruct":M5,"../../lessons/diagramme/dt-json.visustruct":D5,"../../lessons/diagramme/dt-lesen.visustruct":B5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":Z5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":L5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":W5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":E5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":N5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":F5,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":J5,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":R5,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":G5,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":H5,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":V5,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":Q5,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":q5,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":U5,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":Y5,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":$5,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":X5,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":K5,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":ez,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":tz,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":nz,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":iz,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":az,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":sz,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":rz,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":oz,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":lz,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":uz,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":mz,"../../lessons/diagramme/en/dt-buffered.visustruct":cz,"../../lessons/diagramme/en/dt-csv.visustruct":dz,"../../lessons/diagramme/en/dt-json.visustruct":hz,"../../lessons/diagramme/en/dt-lesen.visustruct":gz,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":pz,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":fz,"../../lessons/diagramme/en/kino-frei-start.visustruct":xz,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":bz,"../../lessons/diagramme/en/kino-karte-start.visustruct":vz,"../../lessons/diagramme/en/kino-saalplan.visustruct":yz,"../../lessons/diagramme/en/kino-verkaufen.visustruct":wz,"../../lessons/diagramme/en/l04-gross-klein-loesung.visustruct":zz,"../../lessons/diagramme/en/l04-gross-klein-start.visustruct":Iz,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":kz,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":Sz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct":Tz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct":_z,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":jz,"../../lessons/diagramme/en/l04-rechnen.visustruct":Cz,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":Az,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":Pz,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":Oz,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":Mz,"../../lessons/diagramme/en/l04-tauschen.visustruct":Dz,"../../lessons/diagramme/en/l05-datentypen.visustruct":Bz,"../../lessons/diagramme/en/l05-division.visustruct":Zz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":Lz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":Wz,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":Ez,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":Nz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct":Fz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct":Jz,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":Rz,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":Gz,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":Hz,"../../lessons/diagramme/en/l05-sequenz.visustruct":Vz,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":Qz,"../../lessons/diagramme/en/l06-eva.visustruct":qz,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":Uz,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":Yz,"../../lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct":$z,"../../lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct":Xz,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":Kz,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":e6,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":t6,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":n6,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":i6,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":a6,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":s6,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":r6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct":o6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct":l6,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":u6,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":m6,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":c6,"../../lessons/diagramme/en/l07-rabatt.visustruct":d6,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":h6,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":g6,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":p6,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":f6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct":x6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct":b6,"../../lessons/diagramme/en/l08-jugendticket.visustruct":v6,"../../lessons/diagramme/en/l08-note.visustruct":y6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":w6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":z6,"../../lessons/diagramme/en/l09-ampel.visustruct":I6,"../../lessons/diagramme/en/l09-automat.visustruct":k6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":S6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":T6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct":_6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct":j6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":C6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":A6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":P6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":O6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":M6,"../../lessons/diagramme/en/l1-sequenz.visustruct":D6,"../../lessons/diagramme/en/l1-tee.visustruct":B6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":Z6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":L6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":W6,"../../lessons/diagramme/en/l10-countdown.visustruct":E6,"../../lessons/diagramme/en/l10-endlos.visustruct":N6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":F6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":J6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":R6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct":G6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct":H6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":V6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":Q6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":q6,"../../lessons/diagramme/en/l11-einmal.visustruct":U6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":Y6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":$6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":X6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct":K6,"../../lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct":eI,"../../lessons/diagramme/en/l11-note-loesung.visustruct":tI,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":nI,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":iI,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":aI,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":sI,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":rI,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":oI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct":lI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct":uI,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":mI,"../../lessons/diagramme/en/l12-summe.visustruct":cI,"../../lessons/diagramme/en/l13-dreieck.visustruct":dI,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":hI,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":gI,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":pI,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":fI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct":xI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct":bI,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":vI,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":yI,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":wI,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":zI,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":II,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":kI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct":SI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct":TI,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":_I,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":jI,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":CI,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":AI,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":PI,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":OI,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":MI,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":DI,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":BI,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":ZI,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":LI,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":WI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct":EI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct":NI,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":FI,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":JI,"../../lessons/diagramme/en/l15-quadrat.visustruct":RI,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":GI,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":HI,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":VI,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":QI,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":qI,"../../lessons/diagramme/en/l16-countdown-start.visustruct":UI,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":YI,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":$I,"../../lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct":XI,"../../lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct":KI,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":e7,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":t7,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":n7,"../../lessons/diagramme/en/l16-summe-start.visustruct":i7,"../../lessons/diagramme/en/l17-beispiel.visustruct":a7,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":s7,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":r7,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":o7,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":l7,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":u7,"../../lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct":m7,"../../lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct":c7,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":d7,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":h7,"../../lessons/diagramme/en/l18-beispiel.visustruct":g7,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":p7,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":f7,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":x7,"../../lessons/diagramme/en/l18-js-loesung.visustruct":b7,"../../lessons/diagramme/en/l18-python-loesung.visustruct":v7,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":y7,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":w7,"../../lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct":z7,"../../lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct":I7,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":k7,"../../lessons/diagramme/en/l2-ausgabe.visustruct":S7,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":T7,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":_7,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":j7,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":C7,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":A7,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":P7,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":O7,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":M7,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":D7,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":B7,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Z7,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":L7,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":W7,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":E7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":N7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":F7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":J7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":R7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":G7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":H7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":V7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":Q7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":q7,"../../lessons/diagramme/en/sim-kino-start.visustruct":U7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":Y7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":$7,"../../lessons/diagramme/en/sim-tausch.visustruct":X7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":K7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":ek,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":tk,"../../lessons/diagramme/en/ss-bubblesort.visustruct":nk,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":ik,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":ak,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":sk,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":rk,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":ok,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":lk,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":uk,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":mk,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":ck,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":dk,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":hk,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":gk,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":pk,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":fk,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":xk,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":bk,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":vk,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":yk,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":wk,"../../lessons/diagramme/en/vb-do-while-loesung.visustruct":zk,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":Ik,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":kk,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":Sk,"../../lessons/diagramme/en/vb-erster-plan-loesung.visustruct":Tk,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":_k,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":jk,"../../lessons/diagramme/en/vb-fehler-04-sensoren-start.visustruct":Ck,"../../lessons/diagramme/en/vb-fehler-05-bis-zur-wand-start.visustruct":Ak,"../../lessons/diagramme/en/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":Pk,"../../lessons/diagramme/en/vb-fehler-06-abstand-start.visustruct":Ok,"../../lessons/diagramme/en/vb-fehler-07-linie-start.visustruct":Mk,"../../lessons/diagramme/en/vb-fehler-07-und-oder-start.visustruct":Dk,"../../lessons/diagramme/en/vb-fehler-08-farben-start.visustruct":Bk,"../../lessons/diagramme/en/vb-fehler-09-fallauswahl-mbot2-start.visustruct":Zk,"../../lessons/diagramme/en/vb-fehler-10-tasten-joystick-start.visustruct":Lk,"../../lessons/diagramme/en/vb-fehler-10-unterbrechen-mit-break-start.visustruct":Wk,"../../lessons/diagramme/en/vb-fehler-11-licht-start.visustruct":Ek,"../../lessons/diagramme/en/vb-fehler-12-lautstaerke-start.visustruct":Nk,"../../lessons/diagramme/en/vb-fehler-13-neigung-start.visustruct":Fk,"../../lessons/diagramme/en/vb-fehler-14-leds-start.visustruct":Jk,"../../lessons/diagramme/en/vb-fehler-15-einzelne-leds-start.visustruct":Rk,"../../lessons/diagramme/en/vb-fehler-16-lautsprecher-start.visustruct":Gk,"../../lessons/diagramme/en/vb-fehler-17-arrays-melodie-start.visustruct":Hk,"../../lessons/diagramme/en/vb-fehler-18-bildschirm-start.visustruct":Vk,"../../lessons/diagramme/en/vb-fehler-19-zeichenketten-start.visustruct":Qk,"../../lessons/diagramme/en/vb-fehler-20-motoren-start.visustruct":qk,"../../lessons/diagramme/en/vb-fehler-21-stoppuhr-akku-start.visustruct":Uk,"../../lessons/diagramme/en/vb-fehler-22-eigene-methoden-start.visustruct":Yk,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":$k,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":Xk,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":Kk,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":e8,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":t8,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":n8,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":i8,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":a8,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":s8,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":r8,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":o8,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":l8,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":u8,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":m8,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":c8,"../../lessons/diagramme/en/vb-java-rechteck-umdrehungen-loesung.visustruct":d8,"../../lessons/diagramme/en/vb-java-schritte-zaehlen-loesung.visustruct":h8,"../../lessons/diagramme/en/vb-java-sicher-fahren-loesung.visustruct":g8,"../../lessons/diagramme/en/vb-java-taste-stopp-loesung.visustruct":p8,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":f8,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":x8,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":b8,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":v8,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":y8,"../../lessons/diagramme/en/vb-l00-bausteine-loesung.visustruct":w8,"../../lessons/diagramme/en/vb-l00-sequenz-loesung.visustruct":z8,"../../lessons/diagramme/en/vb-l03-wachsend-loesung.visustruct":I8,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":k8,"../../lessons/diagramme/en/vb-laufschrift-loesung.visustruct":S8,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":T8,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":_8,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":j8,"../../lessons/diagramme/en/vb-messreihe-loesung.visustruct":C8,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":A8,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":P8,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":O8,"../../lessons/diagramme/en/vb-notbremse-loesung.visustruct":M8,"../../lessons/diagramme/en/vb-oder-loesung.visustruct":D8,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":B8,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":Z8,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":L8,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":W8,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":E8,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":N8,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":F8,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":J8,"../../lessons/diagramme/en/vb-spirale-falsch-loesung.visustruct":R8,"../../lessons/diagramme/en/vb-spirale-falsch-start.visustruct":G8,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":H8,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":V8,"../../lessons/diagramme/en/vb-startsignal-loesung.visustruct":Q8,"../../lessons/diagramme/en/vb-strecke-anzeigen-loesung.visustruct":q8,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":U8,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":Y8,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":$8,"../../lessons/diagramme/en/vb-ueberladung-umdrehung-loesung.visustruct":X8,"../../lessons/diagramme/en/vb-und-loesung.visustruct":K8,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":eS,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":tS,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":nS,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":iS,"../../lessons/diagramme/en/vb-zentimeter-loesung.visustruct":aS,"../../lessons/diagramme/en/vb-zentimeter-unterprogramm-loesung.visustruct":sS,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":rS,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":oS,"../../lessons/diagramme/en/zk-mehr.visustruct":lS,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":uS,"../../lessons/diagramme/en/zk-split.visustruct":mS,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":cS,"../../lessons/diagramme/en/zk-zaehlen.visustruct":dS,"../../lessons/diagramme/en/zk-zeichen.visustruct":hS,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":gS,"../../lessons/diagramme/kino-frei-loesung.visustruct":pS,"../../lessons/diagramme/kino-frei-start.visustruct":fS,"../../lessons/diagramme/kino-karte-loesung.visustruct":xS,"../../lessons/diagramme/kino-karte-start.visustruct":bS,"../../lessons/diagramme/kino-saalplan.visustruct":vS,"../../lessons/diagramme/kino-verkaufen.visustruct":yS,"../../lessons/diagramme/l04-gross-klein-loesung.visustruct":wS,"../../lessons/diagramme/l04-gross-klein-start.visustruct":zS,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":IS,"../../lessons/diagramme/l04-java-fehler-start.visustruct":kS,"../../lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct":SS,"../../lessons/diagramme/l04-java-laeuft-nicht-start.visustruct":TS,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":_S,"../../lessons/diagramme/l04-rechnen.visustruct":jS,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":CS,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":AS,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":PS,"../../lessons/diagramme/l04-tauschen-start.visustruct":OS,"../../lessons/diagramme/l04-tauschen.visustruct":MS,"../../lessons/diagramme/l05-datentypen.visustruct":DS,"../../lessons/diagramme/l05-division.visustruct":BS,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":ZS,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":LS,"../../lessons/diagramme/l05-java-fehler-start.visustruct":WS,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":ES,"../../lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct":NS,"../../lessons/diagramme/l05-java-laeuft-nicht-start.visustruct":FS,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":JS,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":RS,"../../lessons/diagramme/l05-sekunden-start.visustruct":GS,"../../lessons/diagramme/l05-sequenz.visustruct":HS,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":VS,"../../lessons/diagramme/l06-eva.visustruct":QS,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":qS,"../../lessons/diagramme/l06-java-fehler-start.visustruct":US,"../../lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct":YS,"../../lessons/diagramme/l06-java-laeuft-nicht-start.visustruct":$S,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":XS,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":KS,"../../lessons/diagramme/l06-rechner-loesung.visustruct":eT,"../../lessons/diagramme/l07-alter-pruefen.visustruct":tT,"../../lessons/diagramme/l07-betrag-loesung.visustruct":nT,"../../lessons/diagramme/l07-gerade-loesung.visustruct":iT,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":aT,"../../lessons/diagramme/l07-java-fehler-start.visustruct":sT,"../../lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct":rT,"../../lessons/diagramme/l07-java-laeuft-nicht-start.visustruct":oT,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":lT,"../../lessons/diagramme/l07-java-pizza-start.visustruct":uT,"../../lessons/diagramme/l07-maximum-loesung.visustruct":mT,"../../lessons/diagramme/l07-rabatt.visustruct":cT,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":dT,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":hT,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":gT,"../../lessons/diagramme/l08-java-fehler-start.visustruct":pT,"../../lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct":fT,"../../lessons/diagramme/l08-java-laeuft-nicht-start.visustruct":xT,"../../lessons/diagramme/l08-jugendticket.visustruct":bT,"../../lessons/diagramme/l08-note.visustruct":vT,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":yT,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":wT,"../../lessons/diagramme/l09-ampel.visustruct":zT,"../../lessons/diagramme/l09-automat.visustruct":IT,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":kT,"../../lessons/diagramme/l09-java-fehler-start.visustruct":ST,"../../lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct":TT,"../../lessons/diagramme/l09-java-laeuft-nicht-start.visustruct":_T,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":jT,"../../lessons/diagramme/l09-note-loesung.visustruct":CT,"../../lessons/diagramme/l09-rechner-loesung.visustruct":AT,"../../lessons/diagramme/l09-verschachtelt.visustruct":PT,"../../lessons/diagramme/l1-grundbausteine.visustruct":OT,"../../lessons/diagramme/l1-sequenz.visustruct":MT,"../../lessons/diagramme/l1-tee.visustruct":DT,"../../lessons/diagramme/l1-verzweigung.visustruct":BT,"../../lessons/diagramme/l1-wiederholung.visustruct":ZT,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":LT,"../../lessons/diagramme/l10-countdown.visustruct":WT,"../../lessons/diagramme/l10-endlos.visustruct":ET,"../../lessons/diagramme/l10-fakultaet.visustruct":NT,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":FT,"../../lessons/diagramme/l10-java-fehler-start.visustruct":JT,"../../lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct":RT,"../../lessons/diagramme/l10-java-laeuft-nicht-start.visustruct":GT,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":HT,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":VT,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":QT,"../../lessons/diagramme/l11-einmal.visustruct":qT,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":UT,"../../lessons/diagramme/l11-java-fehler-start.visustruct":YT,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":$T,"../../lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct":XT,"../../lessons/diagramme/l11-java-laeuft-nicht-start.visustruct":KT,"../../lessons/diagramme/l11-note-loesung.visustruct":e_,"../../lessons/diagramme/l11-summe-loesung.visustruct":t_,"../../lessons/diagramme/l12-countdown-loesung.visustruct":n_,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":i_,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":a_,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":s_,"../../lessons/diagramme/l12-java-fehler-start.visustruct":r_,"../../lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct":o_,"../../lessons/diagramme/l12-java-laeuft-nicht-start.visustruct":l_,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":u_,"../../lessons/diagramme/l12-summe.visustruct":m_,"../../lessons/diagramme/l13-dreieck.visustruct":c_,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":d_,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":h_,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":g_,"../../lessons/diagramme/l13-java-fehler-start.visustruct":p_,"../../lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct":f_,"../../lessons/diagramme/l13-java-laeuft-nicht-start.visustruct":x_,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":b_,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":v_,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":y_,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":w_,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":z_,"../../lessons/diagramme/l14-java-fehler-start.visustruct":I_,"../../lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct":k_,"../../lessons/diagramme/l14-java-laeuft-nicht-start.visustruct":S_,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":T_,"../../lessons/diagramme/l14-namen-eingeben.visustruct":__,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":j_,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":C_,"../../lessons/diagramme/l14-summe-maximum.visustruct":A_,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":P_,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":O_,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":M_,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":D_,"../../lessons/diagramme/l15-hauptprogramm.visustruct":B_,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":Z_,"../../lessons/diagramme/l15-java-fehler-start.visustruct":L_,"../../lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct":W_,"../../lessons/diagramme/l15-java-laeuft-nicht-start.visustruct":E_,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":N_,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":F_,"../../lessons/diagramme/l15-quadrat.visustruct":J_,"../../lessons/diagramme/l15-titel-loesung.visustruct":R_,"../../lessons/diagramme/l15-unterprogramm.visustruct":G_,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":H_,"../../lessons/diagramme/l15-zeige-summe.visustruct":V_,"../../lessons/diagramme/l16-countdown-loesung.visustruct":Q_,"../../lessons/diagramme/l16-countdown-start.visustruct":q_,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":U_,"../../lessons/diagramme/l16-java-fehler-start.visustruct":Y_,"../../lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct":$_,"../../lessons/diagramme/l16-java-laeuft-nicht-start.visustruct":X_,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":K_,"../../lessons/diagramme/l16-schreibtisch.visustruct":ej,"../../lessons/diagramme/l16-summe-loesung.visustruct":tj,"../../lessons/diagramme/l16-summe-start.visustruct":nj,"../../lessons/diagramme/l17-beispiel.visustruct":ij,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":aj,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":sj,"../../lessons/diagramme/l17-java-brief-start.visustruct":rj,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":oj,"../../lessons/diagramme/l17-java-fehler-start.visustruct":lj,"../../lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct":uj,"../../lessons/diagramme/l17-java-laeuft-nicht-start.visustruct":mj,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":cj,"../../lessons/diagramme/l17-ticket-loesung.visustruct":dj,"../../lessons/diagramme/l18-beispiel.visustruct":hj,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":gj,"../../lessons/diagramme/l18-java-fehler-start.visustruct":pj,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":fj,"../../lessons/diagramme/l18-js-loesung.visustruct":xj,"../../lessons/diagramme/l18-python-loesung.visustruct":bj,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":vj,"../../lessons/diagramme/l19-java-fehler-start.visustruct":yj,"../../lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct":wj,"../../lessons/diagramme/l19-java-laeuft-nicht-start.visustruct":zj,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":Ij,"../../lessons/diagramme/l2-ausgabe.visustruct":kj,"../../lessons/diagramme/l2-hallo-loesung.visustruct":Sj,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":Tj,"../../lessons/diagramme/l20-countdown-loesung.visustruct":_j,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":jj,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":Cj,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":Aj,"../../lessons/diagramme/l23-java-nummern-start.visustruct":Pj,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":Oj,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":Mj,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":Dj,"../../lessons/diagramme/l24-java-laengster-start.visustruct":Bj,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":Zj,"../../lessons/diagramme/l25-java-beste-start.visustruct":Lj,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":Wj,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":Ej,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":Nj,"../../lessons/diagramme/l26-java-namen-start.visustruct":Fj,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":Jj,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":Rj,"../../lessons/diagramme/l27-java-json-loesung.visustruct":Gj,"../../lessons/diagramme/l27-java-json-start.visustruct":Hj,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":Vj,"../../lessons/diagramme/l27-java-saetze-start.visustruct":Qj,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":qj,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":Uj,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":Yj,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":$j,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":Xj,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":Kj,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":eC,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":tC,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":nC,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":iC,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":aC,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":sC,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":rC,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":oC,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":lC,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":uC,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":mC,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":cC,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":dC,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":hC,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":gC,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":pC,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":fC,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":xC,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":bC,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":vC,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":yC,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":wC,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":zC,"../../lessons/diagramme/pt/dt-buffered.visustruct":IC,"../../lessons/diagramme/pt/dt-csv.visustruct":kC,"../../lessons/diagramme/pt/dt-json.visustruct":SC,"../../lessons/diagramme/pt/dt-lesen.visustruct":TC,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":_C,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":jC,"../../lessons/diagramme/pt/kino-frei-start.visustruct":CC,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":AC,"../../lessons/diagramme/pt/kino-karte-start.visustruct":PC,"../../lessons/diagramme/pt/kino-saalplan.visustruct":OC,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":MC,"../../lessons/diagramme/pt/l04-gross-klein-loesung.visustruct":DC,"../../lessons/diagramme/pt/l04-gross-klein-start.visustruct":BC,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":ZC,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":LC,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct":WC,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct":EC,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":NC,"../../lessons/diagramme/pt/l04-rechnen.visustruct":FC,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":JC,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":RC,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":GC,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":HC,"../../lessons/diagramme/pt/l04-tauschen.visustruct":VC,"../../lessons/diagramme/pt/l05-datentypen.visustruct":QC,"../../lessons/diagramme/pt/l05-division.visustruct":qC,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":UC,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":YC,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":$C,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":XC,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct":KC,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct":eA,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":tA,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":nA,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":iA,"../../lessons/diagramme/pt/l05-sequenz.visustruct":aA,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":sA,"../../lessons/diagramme/pt/l06-eva.visustruct":rA,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":oA,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":lA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct":uA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct":mA,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":cA,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":dA,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":hA,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":gA,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":pA,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":fA,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":xA,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":bA,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct":vA,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct":yA,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":wA,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":zA,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":IA,"../../lessons/diagramme/pt/l07-rabatt.visustruct":kA,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":SA,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":TA,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":_A,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":jA,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct":CA,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct":AA,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":PA,"../../lessons/diagramme/pt/l08-note.visustruct":OA,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":MA,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":DA,"../../lessons/diagramme/pt/l09-ampel.visustruct":BA,"../../lessons/diagramme/pt/l09-automat.visustruct":ZA,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":LA,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":WA,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct":EA,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct":NA,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":FA,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":JA,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":RA,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":GA,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":HA,"../../lessons/diagramme/pt/l1-sequenz.visustruct":VA,"../../lessons/diagramme/pt/l1-tee.visustruct":QA,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":qA,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":UA,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":YA,"../../lessons/diagramme/pt/l10-countdown.visustruct":$A,"../../lessons/diagramme/pt/l10-endlos.visustruct":XA,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":KA,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":eP,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":tP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct":nP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct":iP,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":aP,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":sP,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":rP,"../../lessons/diagramme/pt/l11-einmal.visustruct":oP,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":lP,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":uP,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":mP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct":cP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct":dP,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":hP,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":gP,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":pP,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":fP,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":xP,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":bP,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":vP,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct":yP,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct":wP,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":zP,"../../lessons/diagramme/pt/l12-summe.visustruct":IP,"../../lessons/diagramme/pt/l13-dreieck.visustruct":kP,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":SP,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":TP,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":_P,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":jP,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct":CP,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct":AP,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":PP,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":OP,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":MP,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":DP,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":BP,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":ZP,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct":LP,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct":WP,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":EP,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":NP,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":FP,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":JP,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":RP,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":GP,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":HP,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":VP,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":QP,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":qP,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":UP,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct":YP,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct":$P,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":XP,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":KP,"../../lessons/diagramme/pt/l15-quadrat.visustruct":eO,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":tO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":nO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":iO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":aO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":sO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":rO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":oO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":lO,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct":uO,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct":mO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":cO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":dO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":hO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":gO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":pO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":fO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":xO,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":bO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":vO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":yO,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct":wO,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct":zO,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":IO,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":kO,"../../lessons/diagramme/pt/l18-beispiel.visustruct":SO,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":TO,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":_O,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":jO,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":CO,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":AO,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":PO,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":OO,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct":MO,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct":DO,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":BO,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":ZO,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":LO,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":WO,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":EO,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":NO,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":FO,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":JO,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":RO,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":GO,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":HO,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":VO,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":QO,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":qO,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":UO,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":YO,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":$O,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":XO,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":KO,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":eM,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":tM,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":nM,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":iM,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":aM,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":sM,"../../lessons/diagramme/pt/sim-kino-start.visustruct":rM,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":oM,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":lM,"../../lessons/diagramme/pt/sim-tausch.visustruct":uM,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":mM,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":cM,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":dM,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":hM,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":gM,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":pM,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":fM,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":xM,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":bM,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":vM,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":yM,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":wM,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":zM,"../../lessons/diagramme/pt/zk-mehr.visustruct":IM,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":kM,"../../lessons/diagramme/pt/zk-split.visustruct":SM,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":TM,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":_M,"../../lessons/diagramme/pt/zk-zeichen.visustruct":jM,"../../lessons/diagramme/sim-kino-loesung.visustruct":CM,"../../lessons/diagramme/sim-kino-start.visustruct":AM,"../../lessons/diagramme/sim-tausch-loesung.visustruct":PM,"../../lessons/diagramme/sim-tausch-start.visustruct":OM,"../../lessons/diagramme/sim-tausch.visustruct":MM,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":DM,"../../lessons/diagramme/ss-absteigend-start.visustruct":BM,"../../lessons/diagramme/ss-binaere-suche.visustruct":ZM,"../../lessons/diagramme/ss-bubblesort.visustruct":LM,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":WM,"../../lessons/diagramme/ss-lineare-suche.visustruct":EM,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":NM,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":FM,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":JM,"../../lessons/diagramme/uebergabe-haupt.visustruct":RM,"../../lessons/diagramme/uebergabe-leeren.visustruct":GM,"../../lessons/diagramme/uebergabe-verdopple.visustruct":HM,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":VM,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":QM,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":qM,"../../lessons/diagramme/vb-ampel-loesung.visustruct":UM,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":YM,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":$M,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":XM,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":KM,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":eD,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":tD,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":nD,"../../lessons/diagramme/vb-do-while-loesung.visustruct":iD,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":aD,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":sD,"../../lessons/diagramme/vb-einparken-loesung.visustruct":rD,"../../lessons/diagramme/vb-erster-plan-loesung.visustruct":oD,"../../lessons/diagramme/vb-farben-loesung.visustruct":lD,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":uD,"../../lessons/diagramme/vb-fehler-04-sensoren-start.visustruct":mD,"../../lessons/diagramme/vb-fehler-05-bis-zur-wand-start.visustruct":cD,"../../lessons/diagramme/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":dD,"../../lessons/diagramme/vb-fehler-06-abstand-start.visustruct":hD,"../../lessons/diagramme/vb-fehler-07-linie-start.visustruct":gD,"../../lessons/diagramme/vb-fehler-07-und-oder-start.visustruct":pD,"../../lessons/diagramme/vb-fehler-08-farben-start.visustruct":fD,"../../lessons/diagramme/vb-fehler-09-fallauswahl-mbot2-start.visustruct":xD,"../../lessons/diagramme/vb-fehler-10-tasten-joystick-start.visustruct":bD,"../../lessons/diagramme/vb-fehler-10-unterbrechen-mit-break-start.visustruct":vD,"../../lessons/diagramme/vb-fehler-11-licht-start.visustruct":yD,"../../lessons/diagramme/vb-fehler-12-lautstaerke-start.visustruct":wD,"../../lessons/diagramme/vb-fehler-13-neigung-start.visustruct":zD,"../../lessons/diagramme/vb-fehler-14-leds-start.visustruct":ID,"../../lessons/diagramme/vb-fehler-15-einzelne-leds-start.visustruct":kD,"../../lessons/diagramme/vb-fehler-16-lautsprecher-start.visustruct":SD,"../../lessons/diagramme/vb-fehler-17-arrays-melodie-start.visustruct":TD,"../../lessons/diagramme/vb-fehler-18-bildschirm-start.visustruct":_D,"../../lessons/diagramme/vb-fehler-19-zeichenketten-start.visustruct":jD,"../../lessons/diagramme/vb-fehler-20-motoren-start.visustruct":CD,"../../lessons/diagramme/vb-fehler-21-stoppuhr-akku-start.visustruct":AD,"../../lessons/diagramme/vb-fehler-22-eigene-methoden-start.visustruct":PD,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":OD,"../../lessons/diagramme/vb-gerade-loesung.visustruct":MD,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":DD,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":BD,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":ZD,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":LD,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":WD,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":ED,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":ND,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":FD,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":JD,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":RD,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":GD,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":HD,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":VD,"../../lessons/diagramme/vb-java-rechteck-umdrehungen-loesung.visustruct":QD,"../../lessons/diagramme/vb-java-schritte-zaehlen-loesung.visustruct":qD,"../../lessons/diagramme/vb-java-sicher-fahren-loesung.visustruct":UD,"../../lessons/diagramme/vb-java-taste-stopp-loesung.visustruct":YD,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":$D,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":XD,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":KD,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":eB,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":tB,"../../lessons/diagramme/vb-l00-bausteine-loesung.visustruct":nB,"../../lessons/diagramme/vb-l00-sequenz-loesung.visustruct":iB,"../../lessons/diagramme/vb-l03-wachsend-loesung.visustruct":aB,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":sB,"../../lessons/diagramme/vb-laufschrift-loesung.visustruct":rB,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":oB,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":lB,"../../lessons/diagramme/vb-melodie-loesung.visustruct":uB,"../../lessons/diagramme/vb-messreihe-loesung.visustruct":mB,"../../lessons/diagramme/vb-morsen-loesung.visustruct":cB,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":dB,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":hB,"../../lessons/diagramme/vb-notbremse-loesung.visustruct":gB,"../../lessons/diagramme/vb-oder-loesung.visustruct":pB,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":fB,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":xB,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":bB,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":vB,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":yB,"../../lessons/diagramme/vb-rand-loesung.visustruct":wB,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":zB,"../../lessons/diagramme/vb-slalom-loesung.visustruct":IB,"../../lessons/diagramme/vb-spirale-falsch-loesung.visustruct":kB,"../../lessons/diagramme/vb-spirale-falsch-start.visustruct":SB,"../../lessons/diagramme/vb-spirale-loesung.visustruct":TB,"../../lessons/diagramme/vb-start-a-loesung.visustruct":_B,"../../lessons/diagramme/vb-startsignal-loesung.visustruct":jB,"../../lessons/diagramme/vb-strecke-anzeigen-loesung.visustruct":CB,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":AB,"../../lessons/diagramme/vb-treppe-loesung.visustruct":PB,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":OB,"../../lessons/diagramme/vb-ueberladung-umdrehung-loesung.visustruct":MB,"../../lessons/diagramme/vb-und-loesung.visustruct":DB,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":BB,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":ZB,"../../lessons/diagramme/vb-wald-loesung.visustruct":LB,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":WB,"../../lessons/diagramme/vb-zentimeter-loesung.visustruct":EB,"../../lessons/diagramme/vb-zentimeter-unterprogramm-loesung.visustruct":NB,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":FB,"../../lessons/diagramme/zk-initialen-loesung.visustruct":JB,"../../lessons/diagramme/zk-mehr.visustruct":RB,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":GB,"../../lessons/diagramme/zk-split.visustruct":HB,"../../lessons/diagramme/zk-woerter-loesung.visustruct":VB,"../../lessons/diagramme/zk-zaehlen.visustruct":QB,"../../lessons/diagramme/zk-zeichen.visustruct":qB}),KW=Object.assign({"../../lessons/welten/ausgang-1.txt":UB,"../../lessons/welten/ausgang-2.txt":YB,"../../lessons/welten/ecke.txt":$B,"../../lessons/welten/farbe-1.txt":XB,"../../lessons/welten/farbe-2.txt":KB,"../../lessons/welten/farbe-3.txt":eZ,"../../lessons/welten/farbe-4.txt":tZ,"../../lessons/welten/hindernis-1.txt":nZ,"../../lessons/welten/hindernis-2.txt":iZ,"../../lessons/welten/labyrinth-1.txt":aZ,"../../lessons/welten/labyrinth-2.txt":sZ,"../../lessons/welten/linie-1.txt":rZ,"../../lessons/welten/linie-2.txt":oZ,"../../lessons/welten/linie-rot-1.txt":lZ,"../../lessons/welten/linie-rot-2.txt":uZ,"../../lessons/welten/parken-1.txt":mZ,"../../lessons/welten/parken-2.txt":cZ,"../../lessons/welten/rand-1.txt":dZ,"../../lessons/welten/rand-2.txt":hZ,"../../lessons/welten/slalom.txt":gZ,"../../lessons/welten/tunnel-1.txt":pZ,"../../lessons/welten/tunnel-2.txt":fZ,"../../lessons/welten/wald-1.txt":xZ,"../../lessons/welten/wald-2.txt":bZ,"../../lessons/welten/wand-frei.txt":vZ,"../../lessons/welten/wand-kurz.txt":yZ,"../../lessons/welten/wand-lang.txt":wZ,"../../lessons/welten/wand-mittel.txt":zZ,"../../lessons/welten/wand-nah.txt":IZ,"../../lessons/welten/zeit-1.txt":kZ,"../../lessons/welten/ziel-kurz.txt":SZ,"../../lessons/welten/ziel-lang.txt":TZ}),eE=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":_Z,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":jZ,"../../lessons/bilder/ben-shneiderman.jpg":CZ,"../../lessons/bilder/caesar-ascii.svg":AZ,"../../lessons/bilder/caesar-scheibe.svg":PZ,"../../lessons/bilder/caesar-verschiebung.svg":OZ,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":MZ,"../../lessons/bilder/en/kino-saal.svg":DZ,"../../lessons/bilder/en/kino-schleifen.svg":BZ,"../../lessons/bilder/en/l01-pap.svg":ZZ,"../../lessons/bilder/en/l02-einfuegen.svg":LZ,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":WZ,"../../lessons/bilder/en/l03-lochkarte.svg":EZ,"../../lessons/bilder/en/l04-camelcase.svg":NZ,"../../lessons/bilder/en/l04-variable.svg":FZ,"../../lessons/bilder/en/l04-zuweisung.svg":JZ,"../../lessons/bilder/en/l05-tauschen.svg":RZ,"../../lessons/bilder/en/l08-zahlenstrahl.svg":GZ,"../../lessons/bilder/en/l10-kopfgesteuert.svg":HZ,"../../lessons/bilder/en/l11-vergleich.svg":VZ,"../../lessons/bilder/en/l12-for-ablauf.svg":QZ,"../../lessons/bilder/en/l12-while-zu-for.svg":qZ,"../../lessons/bilder/en/l13-verschachtelt-tabelle.svg":UZ,"../../lessons/bilder/en/l14-array.svg":YZ,"../../lessons/bilder/en/l20-cpp.svg":$Z,"../../lessons/bilder/en/l20-jvm.svg":XZ,"../../lessons/bilder/en/mvc-klick.svg":KZ,"../../lessons/bilder/en/ss-binaere-suche.svg":eL,"../../lessons/bilder/en/ss-bubblesort.svg":tL,"../../lessons/bilder/en/ss-lineare-suche.svg":nL,"../../lessons/bilder/en/ss-vergleiche.svg":iL,"../../lessons/bilder/en/uebergabe.svg":aL,"../../lessons/bilder/en/zk-zeichen.svg":sL,"../../lessons/bilder/grace-hopper.jpg":rL,"../../lessons/bilder/hedy-lamarr.jpg":oL,"../../lessons/bilder/ike-nassi.jpg":lL,"../../lessons/bilder/katherine-johnson.jpg":uL,"../../lessons/bilder/kino-saal.svg":mL,"../../lessons/bilder/kino-schleifen.svg":cL,"../../lessons/bilder/l01-pap.svg":dL,"../../lessons/bilder/l02-einfuegen.svg":hL,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":gL,"../../lessons/bilder/l03-lochkarte.svg":pL,"../../lessons/bilder/l03-zuse-lochstreifen.svg":fL,"../../lessons/bilder/l04-camelcase.svg":xL,"../../lessons/bilder/l04-variable.svg":bL,"../../lessons/bilder/l04-zuweisung.svg":vL,"../../lessons/bilder/l05-tauschen.svg":yL,"../../lessons/bilder/l07-schreibtischtest-de.svg":wL,"../../lessons/bilder/l07-schreibtischtest-en.svg":zL,"../../lessons/bilder/l07-schreibtischtest-pt.svg":IL,"../../lessons/bilder/l08-zahlenstrahl.svg":kL,"../../lessons/bilder/l09-wahrheitstabelle.svg":SL,"../../lessons/bilder/l10-kopfgesteuert.svg":TL,"../../lessons/bilder/l11-vergleich.svg":_L,"../../lessons/bilder/l12-for-ablauf.svg":jL,"../../lessons/bilder/l12-while-zu-for.svg":CL,"../../lessons/bilder/l13-verschachtelt-tabelle.svg":AL,"../../lessons/bilder/l14-array.svg":PL,"../../lessons/bilder/l20-cpp.svg":OL,"../../lessons/bilder/l20-jvm.svg":ML,"../../lessons/bilder/margaret-hamilton.jpg":DL,"../../lessons/bilder/mvc-klick.svg":BL,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":ZL,"../../lessons/bilder/pt/kino-saal.svg":LL,"../../lessons/bilder/pt/kino-schleifen.svg":WL,"../../lessons/bilder/pt/l01-pap.svg":EL,"../../lessons/bilder/pt/l02-einfuegen.svg":NL,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":FL,"../../lessons/bilder/pt/l03-lochkarte.svg":JL,"../../lessons/bilder/pt/l04-camelcase.svg":RL,"../../lessons/bilder/pt/l04-variable.svg":GL,"../../lessons/bilder/pt/l04-zuweisung.svg":HL,"../../lessons/bilder/pt/l05-tauschen.svg":VL,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":QL,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":qL,"../../lessons/bilder/pt/l11-vergleich.svg":UL,"../../lessons/bilder/pt/l12-for-ablauf.svg":YL,"../../lessons/bilder/pt/l12-while-zu-for.svg":$L,"../../lessons/bilder/pt/l13-verschachtelt-tabelle.svg":XL,"../../lessons/bilder/pt/l14-array.svg":KL,"../../lessons/bilder/pt/l20-cpp.svg":eW,"../../lessons/bilder/pt/l20-jvm.svg":tW,"../../lessons/bilder/pt/mvc-klick.svg":nW,"../../lessons/bilder/pt/schiffe-versenken.svg":iW,"../../lessons/bilder/pt/ss-binaere-suche.svg":aW,"../../lessons/bilder/pt/ss-bubblesort.svg":sW,"../../lessons/bilder/pt/ss-lineare-suche.svg":rW,"../../lessons/bilder/pt/ss-vergleiche.svg":oW,"../../lessons/bilder/pt/uebergabe.svg":lW,"../../lessons/bilder/pt/zk-zeichen.svg":uW,"../../lessons/bilder/schiffe-versenken.svg":mW,"../../lessons/bilder/ss-binaere-suche.svg":cW,"../../lessons/bilder/ss-bubblesort.svg":dW,"../../lessons/bilder/ss-lineare-suche.svg":hW,"../../lessons/bilder/ss-vergleiche.svg":gW,"../../lessons/bilder/uebergabe.svg":pW,"../../lessons/bilder/zk-zeichen.svg":fW}),Ig=i=>i.replace(/^.*\//,"");function X1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[Ig(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function um(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let j1="en",wt=[],An=[],$a="",Xa=[],js="off";function mm(i){i!==js&&(js=i,wt=[],Cs(j1))}function Cs(i){var s,r,o;if(q3(i),i===j1&&wt.length>0)return;j1=i;const e=X1(UW,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>QW(cm(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=qW(cm(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=X1(YW,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(js==="on"){const l=X1(lm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=tE(l);wt=t(l,u.renumber).map(c=>({...c,number:u.number.get(c.id),robot:!0})).sort((c,d)=>c.number-d.number);const m=X1($W,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);An=n(m,"visubot/aufgaben/",u.renumber).map(c=>({...c,robot:!0}))}else wt=t(e),An=n(a,"aufgaben/");An.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...wt.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...An.flatMap(u=>u.blocks)])l.kind==="textFile"&&ax(l.name,l.content);if($a=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",js!=="off"){const l=(r=X1(lm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&($a=`${$a.trimEnd()} +`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ne(`${e}: Keine Schritte (## Überschrift) gefunden.`);YE(r,e);const m=t.get("titel");if(!m)throw new ne(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function XE(i,e){const{meta:t,body:n}=yg(i,e),a=t.get("titel");if(!a)throw new ne(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:zg(n,e)}}function om(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!tx(n))throw new ne(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${Mh.join(", ")}.`);return t}const KE=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":q4,"../../lessons/de/02-der-editor.md":U4,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Q4,"../../lessons/de/04-variablen-und-datentypen.md":Y4,"../../lessons/de/05-sequenz.md":$4,"../../lessons/de/06-eingabe-und-ausgabe.md":X4,"../../lessons/de/07-simulation-und-schreibtischtest.md":K4,"../../lessons/de/08-verzweigung.md":eb,"../../lessons/de/09-bedingungen-verknuepfen.md":tb,"../../lessons/de/10-fallauswahl.md":nb,"../../lessons/de/11-while-schleife.md":ib,"../../lessons/de/12-do-while-schleife.md":ab,"../../lessons/de/13-for-schleife.md":sb,"../../lessons/de/14-verschachteln.md":rb,"../../lessons/de/15-arrays.md":ob,"../../lessons/de/16-zweidimensionale-arrays.md":lb,"../../lessons/de/17-zeichenketten.md":ub,"../../lessons/de/18-aufruf-und-aussprung.md":mb,"../../lessons/de/19-suchen-und-sortieren.md":cb,"../../lessons/de/20-java.md":db,"../../lessons/de/21-python-und-javascript.md":hb,"../../lessons/de/22-try-und-catch.md":gb,"../../lessons/de/23-text-einlesen-und-speichern.md":pb,"../../lessons/de/24-zeile-fuer-zeile.md":fb,"../../lessons/de/25-tabellen-als-csv.md":xb,"../../lessons/de/26-json.md":bb,"../../lessons/de/27-formate-im-vergleich.md":vb,"../../lessons/de/28-erstes-fenster.md":yb,"../../lessons/de/29-knopf-im-fenster.md":wb,"../../lessons/de/30-der-knopf-reagiert.md":zb,"../../lessons/de/31-zahl-verdoppeln.md":Ib,"../../lessons/de/32-klickzaehler.md":kb,"../../lessons/de/33-ampel.md":Sb,"../../lessons/de/34-notenrechner.md":Tb,"../../lessons/de/35-taschenrechner.md":_b,"../../lessons/de/36-zahlenraten.md":jb,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":Cb,"../../lessons/de/38-innere-klassen.md":Ab,"../../lessons/de/39-zwei-reiter.md":Pb,"../../lessons/de/40-model-view-controller.md":Ob,"../../lessons/de/begriffe.md":Db,"../../lessons/de/nachschlagen.md":Bb,"../../lessons/en/01-was-ist-ein-struktogramm.md":Mb,"../../lessons/en/02-der-editor.md":Zb,"../../lessons/en/03-speichern-oeffnen-exportieren.md":Lb,"../../lessons/en/04-variablen-und-datentypen.md":Wb,"../../lessons/en/05-sequenz.md":Eb,"../../lessons/en/06-eingabe-und-ausgabe.md":Nb,"../../lessons/en/07-simulation-und-schreibtischtest.md":Fb,"../../lessons/en/08-verzweigung.md":Jb,"../../lessons/en/09-bedingungen-verknuepfen.md":Rb,"../../lessons/en/10-fallauswahl.md":Gb,"../../lessons/en/11-while-schleife.md":Hb,"../../lessons/en/12-do-while-schleife.md":Vb,"../../lessons/en/13-for-schleife.md":qb,"../../lessons/en/14-verschachteln.md":Ub,"../../lessons/en/15-arrays.md":Qb,"../../lessons/en/16-zweidimensionale-arrays.md":Yb,"../../lessons/en/17-zeichenketten.md":$b,"../../lessons/en/18-aufruf-und-aussprung.md":Xb,"../../lessons/en/19-suchen-und-sortieren.md":Kb,"../../lessons/en/20-java.md":ev,"../../lessons/en/21-python-und-javascript.md":tv,"../../lessons/en/22-try-und-catch.md":nv,"../../lessons/en/23-text-einlesen-und-speichern.md":iv,"../../lessons/en/24-zeile-fuer-zeile.md":av,"../../lessons/en/25-tabellen-als-csv.md":sv,"../../lessons/en/26-json.md":rv,"../../lessons/en/27-formate-im-vergleich.md":ov,"../../lessons/en/28-erstes-fenster.md":lv,"../../lessons/en/29-knopf-im-fenster.md":uv,"../../lessons/en/30-der-knopf-reagiert.md":mv,"../../lessons/en/31-zahl-verdoppeln.md":cv,"../../lessons/en/32-klickzaehler.md":dv,"../../lessons/en/33-ampel.md":hv,"../../lessons/en/34-notenrechner.md":gv,"../../lessons/en/35-taschenrechner.md":pv,"../../lessons/en/36-zahlenraten.md":fv,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":xv,"../../lessons/en/38-innere-klassen.md":bv,"../../lessons/en/39-zwei-reiter.md":vv,"../../lessons/en/40-model-view-controller.md":yv,"../../lessons/en/begriffe.md":wv,"../../lessons/en/nachschlagen.md":zv,"../../lessons/pt/01-was-ist-ein-struktogramm.md":Iv,"../../lessons/pt/02-der-editor.md":kv,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":Sv,"../../lessons/pt/04-variablen-und-datentypen.md":Tv,"../../lessons/pt/05-sequenz.md":_v,"../../lessons/pt/06-eingabe-und-ausgabe.md":jv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":Cv,"../../lessons/pt/08-verzweigung.md":Av,"../../lessons/pt/09-bedingungen-verknuepfen.md":Pv,"../../lessons/pt/10-fallauswahl.md":Ov,"../../lessons/pt/11-while-schleife.md":Dv,"../../lessons/pt/12-do-while-schleife.md":Bv,"../../lessons/pt/13-for-schleife.md":Mv,"../../lessons/pt/14-verschachteln.md":Zv,"../../lessons/pt/15-arrays.md":Lv,"../../lessons/pt/16-zweidimensionale-arrays.md":Wv,"../../lessons/pt/17-zeichenketten.md":Ev,"../../lessons/pt/18-aufruf-und-aussprung.md":Nv,"../../lessons/pt/19-suchen-und-sortieren.md":Fv,"../../lessons/pt/20-java.md":Jv,"../../lessons/pt/21-python-und-javascript.md":Rv,"../../lessons/pt/22-try-und-catch.md":Gv,"../../lessons/pt/23-text-einlesen-und-speichern.md":Hv,"../../lessons/pt/24-zeile-fuer-zeile.md":Vv,"../../lessons/pt/25-tabellen-als-csv.md":qv,"../../lessons/pt/26-json.md":Uv,"../../lessons/pt/27-formate-im-vergleich.md":Qv,"../../lessons/pt/28-erstes-fenster.md":Yv,"../../lessons/pt/29-knopf-im-fenster.md":$v,"../../lessons/pt/30-der-knopf-reagiert.md":Xv,"../../lessons/pt/31-zahl-verdoppeln.md":Kv,"../../lessons/pt/32-klickzaehler.md":ey,"../../lessons/pt/33-ampel.md":ty,"../../lessons/pt/34-notenrechner.md":ny,"../../lessons/pt/35-taschenrechner.md":iy,"../../lessons/pt/36-zahlenraten.md":ay,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":sy,"../../lessons/pt/38-innere-klassen.md":ry,"../../lessons/pt/39-zwei-reiter.md":oy,"../../lessons/pt/40-model-view-controller.md":ly,"../../lessons/pt/begriffe.md":uy,"../../lessons/pt/nachschlagen.md":my}),eN=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":cy,"../../lessons/de/aufgaben/ballwurf.md":dy,"../../lessons/de/aufgaben/bestenliste.md":hy,"../../lessons/de/aufgaben/binaerzahl.md":gy,"../../lessons/de/aufgaben/caesar.md":py,"../../lessons/de/aufgaben/collatz.md":fy,"../../lessons/de/aufgaben/einheitenrechner.md":xy,"../../lessons/de/aufgaben/fibonacci.md":by,"../../lessons/de/aufgaben/gerade-ungerade.md":vy,"../../lessons/de/aufgaben/mehrwertsteuer.md":yy,"../../lessons/de/aufgaben/notendurchschnitt.md":wy,"../../lessons/de/aufgaben/pin-pruefen.md":zy,"../../lessons/de/aufgaben/schiffe-versenken.md":Iy,"../../lessons/de/aufgaben/speisekarte.md":ky,"../../lessons/de/aufgaben/summe-bilden.md":Sy,"../../lessons/de/aufgaben/tafeldienst.md":Ty,"../../lessons/de/aufgaben/taschenrechner.md":_y,"../../lessons/de/aufgaben/verleih-menue.md":jy,"../../lessons/de/aufgaben/vokabeltrainer.md":Cy,"../../lessons/de/aufgaben/volljaehrig.md":Ay,"../../lessons/de/aufgaben/wuerfel-mvc.md":Py,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Oy,"../../lessons/en/aufgaben/alter-unterprogramm.md":Dy,"../../lessons/en/aufgaben/ballwurf.md":By,"../../lessons/en/aufgaben/bestenliste.md":My,"../../lessons/en/aufgaben/binaerzahl.md":Zy,"../../lessons/en/aufgaben/caesar.md":Ly,"../../lessons/en/aufgaben/collatz.md":Wy,"../../lessons/en/aufgaben/einheitenrechner.md":Ey,"../../lessons/en/aufgaben/fibonacci.md":Ny,"../../lessons/en/aufgaben/gerade-ungerade.md":Fy,"../../lessons/en/aufgaben/mehrwertsteuer.md":Jy,"../../lessons/en/aufgaben/notendurchschnitt.md":Ry,"../../lessons/en/aufgaben/pin-pruefen.md":Gy,"../../lessons/en/aufgaben/schiffe-versenken.md":Hy,"../../lessons/en/aufgaben/speisekarte.md":Vy,"../../lessons/en/aufgaben/summe-bilden.md":qy,"../../lessons/en/aufgaben/tafeldienst.md":Uy,"../../lessons/en/aufgaben/taschenrechner.md":Qy,"../../lessons/en/aufgaben/verleih-menue.md":Yy,"../../lessons/en/aufgaben/vokabeltrainer.md":$y,"../../lessons/en/aufgaben/volljaehrig.md":Xy,"../../lessons/en/aufgaben/wuerfel-mvc.md":Ky,"../../lessons/en/aufgaben/zahl-verdoppeln.md":e9,"../../lessons/pt/aufgaben/alter-unterprogramm.md":t9,"../../lessons/pt/aufgaben/ballwurf.md":n9,"../../lessons/pt/aufgaben/bestenliste.md":i9,"../../lessons/pt/aufgaben/binaerzahl.md":a9,"../../lessons/pt/aufgaben/caesar.md":s9,"../../lessons/pt/aufgaben/collatz.md":r9,"../../lessons/pt/aufgaben/einheitenrechner.md":o9,"../../lessons/pt/aufgaben/fibonacci.md":l9,"../../lessons/pt/aufgaben/gerade-ungerade.md":u9,"../../lessons/pt/aufgaben/mehrwertsteuer.md":m9,"../../lessons/pt/aufgaben/notendurchschnitt.md":c9,"../../lessons/pt/aufgaben/pin-pruefen.md":d9,"../../lessons/pt/aufgaben/schiffe-versenken.md":h9,"../../lessons/pt/aufgaben/speisekarte.md":g9,"../../lessons/pt/aufgaben/summe-bilden.md":p9,"../../lessons/pt/aufgaben/tafeldienst.md":f9,"../../lessons/pt/aufgaben/taschenrechner.md":x9,"../../lessons/pt/aufgaben/verleih-menue.md":b9,"../../lessons/pt/aufgaben/vokabeltrainer.md":v9,"../../lessons/pt/aufgaben/volljaehrig.md":y9,"../../lessons/pt/aufgaben/wuerfel-mvc.md":w9,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":z9}),lm=Object.assign({"../../lessons/de/visubot/00-struktogramm-und-editor.md":I9,"../../lessons/de/visubot/01-der-mbot2.md":k9,"../../lessons/de/visubot/02-das-quadrat.md":S9,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":T9,"../../lessons/de/visubot/03-zeile-fuer-zeile-testen.md":_9,"../../lessons/de/visubot/04-sensoren.md":j9,"../../lessons/de/visubot/05-bis-zur-wand.md":C9,"../../lessons/de/visubot/05-erst-fahren-dann-pruefen.md":A9,"../../lessons/de/visubot/05-zaehlen-und-summieren.md":P9,"../../lessons/de/visubot/06-abstand.md":O9,"../../lessons/de/visubot/06-konstanten-final.md":D9,"../../lessons/de/visubot/06-nah-mittel-weit.md":B9,"../../lessons/de/visubot/07-linie.md":M9,"../../lessons/de/visubot/07-und-oder.md":Z9,"../../lessons/de/visubot/08-farben.md":L9,"../../lessons/de/visubot/08-groesster-wert.md":W9,"../../lessons/de/visubot/09-fallauswahl-mbot2.md":E9,"../../lessons/de/visubot/10-tasten-joystick.md":N9,"../../lessons/de/visubot/10-unterbrechen-mit-break.md":F9,"../../lessons/de/visubot/11-licht.md":J9,"../../lessons/de/visubot/11-merker-boolean.md":R9,"../../lessons/de/visubot/12-lautstaerke.md":G9,"../../lessons/de/visubot/13-neigung.md":H9,"../../lessons/de/visubot/14-leds.md":V9,"../../lessons/de/visubot/15-einzelne-leds.md":q9,"../../lessons/de/visubot/16-lautsprecher.md":U9,"../../lessons/de/visubot/17-arrays-melodie.md":Q9,"../../lessons/de/visubot/18-bildschirm.md":Y9,"../../lessons/de/visubot/19-zeichenketten.md":$9,"../../lessons/de/visubot/20-motoren.md":X9,"../../lessons/de/visubot/21-stoppuhr-akku.md":K9,"../../lessons/de/visubot/21-zustaende.md":ew,"../../lessons/de/visubot/22-eigene-methoden.md":tw,"../../lessons/de/visubot/nachschlagen.md":nw,"../../lessons/en/visubot/00-struktogramm-und-editor.md":iw,"../../lessons/en/visubot/01-der-mbot2.md":aw,"../../lessons/en/visubot/02-das-quadrat.md":sw,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":rw,"../../lessons/en/visubot/03-zeile-fuer-zeile-testen.md":ow,"../../lessons/en/visubot/04-sensoren.md":lw,"../../lessons/en/visubot/05-bis-zur-wand.md":uw,"../../lessons/en/visubot/05-erst-fahren-dann-pruefen.md":mw,"../../lessons/en/visubot/05-zaehlen-und-summieren.md":cw,"../../lessons/en/visubot/06-abstand.md":dw,"../../lessons/en/visubot/06-konstanten-final.md":hw,"../../lessons/en/visubot/06-nah-mittel-weit.md":gw,"../../lessons/en/visubot/07-linie.md":pw,"../../lessons/en/visubot/07-und-oder.md":fw,"../../lessons/en/visubot/08-farben.md":xw,"../../lessons/en/visubot/08-groesster-wert.md":bw,"../../lessons/en/visubot/09-fallauswahl-mbot2.md":vw,"../../lessons/en/visubot/10-tasten-joystick.md":yw,"../../lessons/en/visubot/10-unterbrechen-mit-break.md":ww,"../../lessons/en/visubot/11-licht.md":zw,"../../lessons/en/visubot/11-merker-boolean.md":Iw,"../../lessons/en/visubot/12-lautstaerke.md":kw,"../../lessons/en/visubot/13-neigung.md":Sw,"../../lessons/en/visubot/14-leds.md":Tw,"../../lessons/en/visubot/15-einzelne-leds.md":_w,"../../lessons/en/visubot/16-lautsprecher.md":jw,"../../lessons/en/visubot/17-arrays-melodie.md":Cw,"../../lessons/en/visubot/18-bildschirm.md":Aw,"../../lessons/en/visubot/19-zeichenketten.md":Pw,"../../lessons/en/visubot/20-motoren.md":Ow,"../../lessons/en/visubot/21-stoppuhr-akku.md":Dw,"../../lessons/en/visubot/21-zustaende.md":Bw,"../../lessons/en/visubot/22-eigene-methoden.md":Mw,"../../lessons/en/visubot/nachschlagen.md":Zw}),tN=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":Lw,"../../lessons/de/visubot/aufgaben/ausgang.md":Ww,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":Ew,"../../lessons/de/visubot/aufgaben/dreieck.md":Nw,"../../lessons/de/visubot/aufgaben/einparken.md":Fw,"../../lessons/de/visubot/aufgaben/hindernis.md":Jw,"../../lessons/de/visubot/aufgaben/knight-rider.md":Rw,"../../lessons/de/visubot/aufgaben/labyrinth.md":Gw,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":Hw,"../../lessons/de/visubot/aufgaben/morsen.md":Vw,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":qw,"../../lessons/de/visubot/aufgaben/slalom.md":Uw,"../../lessons/de/visubot/aufgaben/spirale.md":Qw,"../../lessons/de/visubot/aufgaben/treppe.md":Yw,"../../lessons/de/visubot/aufgaben/tunnel.md":$w,"../../lessons/de/visubot/aufgaben/wald.md":Xw,"../../lessons/en/visubot/aufgaben/alarmanlage.md":Kw,"../../lessons/en/visubot/aufgaben/ausgang.md":e5,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":t5,"../../lessons/en/visubot/aufgaben/dreieck.md":n5,"../../lessons/en/visubot/aufgaben/einparken.md":i5,"../../lessons/en/visubot/aufgaben/hindernis.md":a5,"../../lessons/en/visubot/aufgaben/knight-rider.md":s5,"../../lessons/en/visubot/aufgaben/labyrinth.md":r5,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":o5,"../../lessons/en/visubot/aufgaben/morsen.md":l5,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":u5,"../../lessons/en/visubot/aufgaben/slalom.md":m5,"../../lessons/en/visubot/aufgaben/spirale.md":c5,"../../lessons/en/visubot/aufgaben/treppe.md":d5,"../../lessons/en/visubot/aufgaben/tunnel.md":h5,"../../lessons/en/visubot/aufgaben/wald.md":g5}),nN=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":p5,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":f5,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":x5,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":b5,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":v5,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":y5,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":w5,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":z5,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":I5,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":k5,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":S5,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":T5,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":_5,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":j5,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":C5,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":A5,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":P5,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":O5,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":D5,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":B5,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":M5,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":Z5,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":L5,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":W5,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":E5,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":N5,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":F5,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":J5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":R5,"../../lessons/diagramme/dt-buffered.visustruct":G5,"../../lessons/diagramme/dt-csv.visustruct":H5,"../../lessons/diagramme/dt-json.visustruct":V5,"../../lessons/diagramme/dt-lesen.visustruct":q5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":U5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":Q5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":Y5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":$5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":X5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":K5,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":ez,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":tz,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":nz,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":iz,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":az,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":sz,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":rz,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":oz,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":lz,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":uz,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":mz,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":cz,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":dz,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":hz,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":gz,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":pz,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":fz,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":xz,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":bz,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":vz,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":yz,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":wz,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":zz,"../../lessons/diagramme/en/dt-buffered.visustruct":Iz,"../../lessons/diagramme/en/dt-csv.visustruct":kz,"../../lessons/diagramme/en/dt-json.visustruct":Sz,"../../lessons/diagramme/en/dt-lesen.visustruct":Tz,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":_z,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":jz,"../../lessons/diagramme/en/kino-frei-start.visustruct":Cz,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":Az,"../../lessons/diagramme/en/kino-karte-start.visustruct":Pz,"../../lessons/diagramme/en/kino-saalplan.visustruct":Oz,"../../lessons/diagramme/en/kino-verkaufen.visustruct":Dz,"../../lessons/diagramme/en/l04-gross-klein-loesung.visustruct":Bz,"../../lessons/diagramme/en/l04-gross-klein-start.visustruct":Mz,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":Zz,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":Lz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct":Wz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct":Ez,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":Nz,"../../lessons/diagramme/en/l04-rechnen.visustruct":Fz,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":Jz,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":Rz,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":Gz,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":Hz,"../../lessons/diagramme/en/l04-tauschen.visustruct":Vz,"../../lessons/diagramme/en/l05-datentypen.visustruct":qz,"../../lessons/diagramme/en/l05-division.visustruct":Uz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":Qz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":Yz,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":$z,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":Xz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct":Kz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct":e6,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":t6,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":n6,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":i6,"../../lessons/diagramme/en/l05-sequenz.visustruct":a6,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":s6,"../../lessons/diagramme/en/l06-eva.visustruct":r6,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":o6,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":l6,"../../lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct":u6,"../../lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct":m6,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":c6,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":d6,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":h6,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":g6,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":p6,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":f6,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":x6,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":b6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct":v6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct":y6,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":w6,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":z6,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":I6,"../../lessons/diagramme/en/l07-rabatt.visustruct":k6,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":S6,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":T6,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":_6,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":j6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct":C6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct":A6,"../../lessons/diagramme/en/l08-jugendticket.visustruct":P6,"../../lessons/diagramme/en/l08-note.visustruct":O6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":D6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":B6,"../../lessons/diagramme/en/l09-ampel.visustruct":M6,"../../lessons/diagramme/en/l09-automat.visustruct":Z6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":L6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":W6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct":E6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct":N6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":F6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":J6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":R6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":G6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":H6,"../../lessons/diagramme/en/l1-sequenz.visustruct":V6,"../../lessons/diagramme/en/l1-tee.visustruct":q6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":U6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":Q6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":Y6,"../../lessons/diagramme/en/l10-countdown.visustruct":$6,"../../lessons/diagramme/en/l10-endlos.visustruct":X6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":K6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":eI,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":tI,"../../lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct":nI,"../../lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct":iI,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":aI,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":sI,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":rI,"../../lessons/diagramme/en/l11-einmal.visustruct":oI,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":lI,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":uI,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":mI,"../../lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct":cI,"../../lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct":dI,"../../lessons/diagramme/en/l11-note-loesung.visustruct":hI,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":gI,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":pI,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":fI,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":xI,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":bI,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":vI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct":yI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct":wI,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":zI,"../../lessons/diagramme/en/l12-summe.visustruct":II,"../../lessons/diagramme/en/l13-dreieck.visustruct":kI,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":SI,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":TI,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":_I,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":jI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct":CI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct":AI,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":PI,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":OI,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":DI,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":BI,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":MI,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":ZI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct":LI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct":WI,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":EI,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":NI,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":FI,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":JI,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":RI,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":GI,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":HI,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":VI,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":qI,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":UI,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":QI,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":YI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct":$I,"../../lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct":XI,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":KI,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":e7,"../../lessons/diagramme/en/l15-quadrat.visustruct":t7,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":n7,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":i7,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":a7,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":s7,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":r7,"../../lessons/diagramme/en/l16-countdown-start.visustruct":o7,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":l7,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":u7,"../../lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct":m7,"../../lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct":c7,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":d7,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":h7,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":g7,"../../lessons/diagramme/en/l16-summe-start.visustruct":p7,"../../lessons/diagramme/en/l17-beispiel.visustruct":f7,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":x7,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":b7,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":v7,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":y7,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":w7,"../../lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct":z7,"../../lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct":I7,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":k7,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":S7,"../../lessons/diagramme/en/l18-beispiel.visustruct":T7,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":_7,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":j7,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":C7,"../../lessons/diagramme/en/l18-js-loesung.visustruct":A7,"../../lessons/diagramme/en/l18-python-loesung.visustruct":P7,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":O7,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":D7,"../../lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct":B7,"../../lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct":M7,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Z7,"../../lessons/diagramme/en/l2-ausgabe.visustruct":L7,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":W7,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":E7,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":N7,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":F7,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":J7,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":R7,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":G7,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":H7,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":V7,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":q7,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":U7,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Q7,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":Y7,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":$7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":X7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":K7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":ek,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":tk,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":nk,"../../lessons/diagramme/en/l27-java-json-start.visustruct":ik,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":ak,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":sk,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":rk,"../../lessons/diagramme/en/sim-kino-start.visustruct":ok,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":lk,"../../lessons/diagramme/en/sim-tausch-start.visustruct":uk,"../../lessons/diagramme/en/sim-tausch.visustruct":mk,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":ck,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":dk,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":hk,"../../lessons/diagramme/en/ss-bubblesort.visustruct":gk,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":pk,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":fk,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":xk,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":bk,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":vk,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":yk,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":wk,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":zk,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":Ik,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":kk,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":Sk,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":Tk,"../../lessons/diagramme/en/vb-ampel-zustand-loesung.visustruct":_k,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":jk,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":Ck,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":Ak,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":Pk,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":Ok,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":Dk,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":Bk,"../../lessons/diagramme/en/vb-do-while-loesung.visustruct":Mk,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":Zk,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":Lk,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":Wk,"../../lessons/diagramme/en/vb-erster-plan-loesung.visustruct":Ek,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":Nk,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":Fk,"../../lessons/diagramme/en/vb-fehler-04-sensoren-start.visustruct":Jk,"../../lessons/diagramme/en/vb-fehler-05-bis-zur-wand-start.visustruct":Rk,"../../lessons/diagramme/en/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":Gk,"../../lessons/diagramme/en/vb-fehler-05-zaehlen-und-summieren-start.visustruct":Hk,"../../lessons/diagramme/en/vb-fehler-06-abstand-start.visustruct":Vk,"../../lessons/diagramme/en/vb-fehler-06-konstanten-final-start.visustruct":qk,"../../lessons/diagramme/en/vb-fehler-06-nah-mittel-weit-start.visustruct":Uk,"../../lessons/diagramme/en/vb-fehler-07-linie-start.visustruct":Qk,"../../lessons/diagramme/en/vb-fehler-07-und-oder-start.visustruct":Yk,"../../lessons/diagramme/en/vb-fehler-08-farben-start.visustruct":$k,"../../lessons/diagramme/en/vb-fehler-08-groesster-wert-start.visustruct":Xk,"../../lessons/diagramme/en/vb-fehler-09-fallauswahl-mbot2-start.visustruct":Kk,"../../lessons/diagramme/en/vb-fehler-10-tasten-joystick-start.visustruct":e8,"../../lessons/diagramme/en/vb-fehler-10-unterbrechen-mit-break-start.visustruct":t8,"../../lessons/diagramme/en/vb-fehler-11-licht-start.visustruct":n8,"../../lessons/diagramme/en/vb-fehler-11-merker-boolean-start.visustruct":i8,"../../lessons/diagramme/en/vb-fehler-12-lautstaerke-start.visustruct":a8,"../../lessons/diagramme/en/vb-fehler-13-neigung-start.visustruct":s8,"../../lessons/diagramme/en/vb-fehler-14-leds-start.visustruct":r8,"../../lessons/diagramme/en/vb-fehler-15-einzelne-leds-start.visustruct":o8,"../../lessons/diagramme/en/vb-fehler-16-lautsprecher-start.visustruct":l8,"../../lessons/diagramme/en/vb-fehler-17-arrays-melodie-start.visustruct":u8,"../../lessons/diagramme/en/vb-fehler-18-bildschirm-start.visustruct":m8,"../../lessons/diagramme/en/vb-fehler-19-zeichenketten-start.visustruct":c8,"../../lessons/diagramme/en/vb-fehler-20-motoren-start.visustruct":d8,"../../lessons/diagramme/en/vb-fehler-21-stoppuhr-akku-start.visustruct":h8,"../../lessons/diagramme/en/vb-fehler-21-zustaende-start.visustruct":g8,"../../lessons/diagramme/en/vb-fehler-22-eigene-methoden-start.visustruct":p8,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":f8,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":x8,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":b8,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":v8,"../../lessons/diagramme/en/vb-java-ampel-text-loesung.visustruct":y8,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":w8,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":z8,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":I8,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":k8,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":S8,"../../lessons/diagramme/en/vb-java-klatsch-merker-loesung.visustruct":T8,"../../lessons/diagramme/en/vb-java-konstante-seite-loesung.visustruct":_8,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":j8,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":C8,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":A8,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":P8,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":O8,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":D8,"../../lessons/diagramme/en/vb-java-rechteck-umdrehungen-loesung.visustruct":B8,"../../lessons/diagramme/en/vb-java-richtung-loesung.visustruct":M8,"../../lessons/diagramme/en/vb-java-schritte-zaehlen-loesung.visustruct":Z8,"../../lessons/diagramme/en/vb-java-sicher-fahren-loesung.visustruct":L8,"../../lessons/diagramme/en/vb-java-spirale-strecke-loesung.visustruct":W8,"../../lessons/diagramme/en/vb-java-tageszeit-loesung.visustruct":E8,"../../lessons/diagramme/en/vb-java-taste-stopp-loesung.visustruct":N8,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":F8,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":J8,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":R8,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":G8,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":H8,"../../lessons/diagramme/en/vb-konstante-wand-loesung.visustruct":V8,"../../lessons/diagramme/en/vb-l00-bausteine-loesung.visustruct":q8,"../../lessons/diagramme/en/vb-l00-sequenz-loesung.visustruct":U8,"../../lessons/diagramme/en/vb-l03-wachsend-loesung.visustruct":Q8,"../../lessons/diagramme/en/vb-l06k-mit.visustruct":Y8,"../../lessons/diagramme/en/vb-l06k-ohne.visustruct":$8,"../../lessons/diagramme/en/vb-l06n-einparkhilfe.visustruct":X8,"../../lessons/diagramme/en/vb-l21z-ausweichen.visustruct":K8,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":eS,"../../lessons/diagramme/en/vb-laufschrift-loesung.visustruct":tS,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":nS,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":iS,"../../lessons/diagramme/en/vb-meister-platz-loesung.visustruct":aS,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":sS,"../../lessons/diagramme/en/vb-messreihe-loesung.visustruct":rS,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":oS,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":lS,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":uS,"../../lessons/diagramme/en/vb-notbremse-loesung.visustruct":mS,"../../lessons/diagramme/en/vb-oder-loesung.visustruct":cS,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":dS,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":hS,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":gS,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":pS,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":fS,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":xS,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":bS,"../../lessons/diagramme/en/vb-schritte-welt-loesung.visustruct":vS,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":yS,"../../lessons/diagramme/en/vb-spirale-falsch-loesung.visustruct":wS,"../../lessons/diagramme/en/vb-spirale-falsch-start.visustruct":zS,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":IS,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":kS,"../../lessons/diagramme/en/vb-startsignal-loesung.visustruct":SS,"../../lessons/diagramme/en/vb-strecke-anzeigen-loesung.visustruct":TS,"../../lessons/diagramme/en/vb-tempo-abstand-loesung.visustruct":_S,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":jS,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":CS,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":AS,"../../lessons/diagramme/en/vb-ueberladung-umdrehung-loesung.visustruct":PS,"../../lessons/diagramme/en/vb-und-loesung.visustruct":OS,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":DS,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":BS,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":MS,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":ZS,"../../lessons/diagramme/en/vb-wurde-es-dunkel-loesung.visustruct":LS,"../../lessons/diagramme/en/vb-zentimeter-loesung.visustruct":WS,"../../lessons/diagramme/en/vb-zentimeter-unterprogramm-loesung.visustruct":ES,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":NS,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":FS,"../../lessons/diagramme/en/zk-mehr.visustruct":JS,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":RS,"../../lessons/diagramme/en/zk-split.visustruct":GS,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":HS,"../../lessons/diagramme/en/zk-zaehlen.visustruct":VS,"../../lessons/diagramme/en/zk-zeichen.visustruct":qS,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":US,"../../lessons/diagramme/kino-frei-loesung.visustruct":QS,"../../lessons/diagramme/kino-frei-start.visustruct":YS,"../../lessons/diagramme/kino-karte-loesung.visustruct":$S,"../../lessons/diagramme/kino-karte-start.visustruct":XS,"../../lessons/diagramme/kino-saalplan.visustruct":KS,"../../lessons/diagramme/kino-verkaufen.visustruct":eT,"../../lessons/diagramme/l04-gross-klein-loesung.visustruct":tT,"../../lessons/diagramme/l04-gross-klein-start.visustruct":nT,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":iT,"../../lessons/diagramme/l04-java-fehler-start.visustruct":aT,"../../lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct":sT,"../../lessons/diagramme/l04-java-laeuft-nicht-start.visustruct":rT,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":oT,"../../lessons/diagramme/l04-rechnen.visustruct":lT,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":uT,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":mT,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":cT,"../../lessons/diagramme/l04-tauschen-start.visustruct":dT,"../../lessons/diagramme/l04-tauschen.visustruct":hT,"../../lessons/diagramme/l05-datentypen.visustruct":gT,"../../lessons/diagramme/l05-division.visustruct":pT,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":fT,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":xT,"../../lessons/diagramme/l05-java-fehler-start.visustruct":bT,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":vT,"../../lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct":yT,"../../lessons/diagramme/l05-java-laeuft-nicht-start.visustruct":wT,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":zT,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":IT,"../../lessons/diagramme/l05-sekunden-start.visustruct":kT,"../../lessons/diagramme/l05-sequenz.visustruct":ST,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":TT,"../../lessons/diagramme/l06-eva.visustruct":_T,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":jT,"../../lessons/diagramme/l06-java-fehler-start.visustruct":CT,"../../lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct":AT,"../../lessons/diagramme/l06-java-laeuft-nicht-start.visustruct":PT,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":OT,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":DT,"../../lessons/diagramme/l06-rechner-loesung.visustruct":BT,"../../lessons/diagramme/l07-alter-pruefen.visustruct":MT,"../../lessons/diagramme/l07-betrag-loesung.visustruct":ZT,"../../lessons/diagramme/l07-gerade-loesung.visustruct":LT,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":WT,"../../lessons/diagramme/l07-java-fehler-start.visustruct":ET,"../../lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct":NT,"../../lessons/diagramme/l07-java-laeuft-nicht-start.visustruct":FT,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":JT,"../../lessons/diagramme/l07-java-pizza-start.visustruct":RT,"../../lessons/diagramme/l07-maximum-loesung.visustruct":GT,"../../lessons/diagramme/l07-rabatt.visustruct":HT,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":VT,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":qT,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":UT,"../../lessons/diagramme/l08-java-fehler-start.visustruct":QT,"../../lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct":YT,"../../lessons/diagramme/l08-java-laeuft-nicht-start.visustruct":$T,"../../lessons/diagramme/l08-jugendticket.visustruct":XT,"../../lessons/diagramme/l08-note.visustruct":KT,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":e_,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":t_,"../../lessons/diagramme/l09-ampel.visustruct":n_,"../../lessons/diagramme/l09-automat.visustruct":i_,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":a_,"../../lessons/diagramme/l09-java-fehler-start.visustruct":s_,"../../lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct":r_,"../../lessons/diagramme/l09-java-laeuft-nicht-start.visustruct":o_,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":l_,"../../lessons/diagramme/l09-note-loesung.visustruct":u_,"../../lessons/diagramme/l09-rechner-loesung.visustruct":m_,"../../lessons/diagramme/l09-verschachtelt.visustruct":c_,"../../lessons/diagramme/l1-grundbausteine.visustruct":d_,"../../lessons/diagramme/l1-sequenz.visustruct":h_,"../../lessons/diagramme/l1-tee.visustruct":g_,"../../lessons/diagramme/l1-verzweigung.visustruct":p_,"../../lessons/diagramme/l1-wiederholung.visustruct":f_,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":x_,"../../lessons/diagramme/l10-countdown.visustruct":b_,"../../lessons/diagramme/l10-endlos.visustruct":v_,"../../lessons/diagramme/l10-fakultaet.visustruct":y_,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":w_,"../../lessons/diagramme/l10-java-fehler-start.visustruct":z_,"../../lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct":I_,"../../lessons/diagramme/l10-java-laeuft-nicht-start.visustruct":k_,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":S_,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":T_,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":__,"../../lessons/diagramme/l11-einmal.visustruct":j_,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":C_,"../../lessons/diagramme/l11-java-fehler-start.visustruct":A_,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":P_,"../../lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct":O_,"../../lessons/diagramme/l11-java-laeuft-nicht-start.visustruct":D_,"../../lessons/diagramme/l11-note-loesung.visustruct":B_,"../../lessons/diagramme/l11-summe-loesung.visustruct":M_,"../../lessons/diagramme/l12-countdown-loesung.visustruct":Z_,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":L_,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":W_,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":E_,"../../lessons/diagramme/l12-java-fehler-start.visustruct":N_,"../../lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct":F_,"../../lessons/diagramme/l12-java-laeuft-nicht-start.visustruct":J_,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":R_,"../../lessons/diagramme/l12-summe.visustruct":G_,"../../lessons/diagramme/l13-dreieck.visustruct":H_,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":V_,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":q_,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":U_,"../../lessons/diagramme/l13-java-fehler-start.visustruct":Q_,"../../lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct":Y_,"../../lessons/diagramme/l13-java-laeuft-nicht-start.visustruct":$_,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":X_,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":K_,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":ej,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":tj,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":nj,"../../lessons/diagramme/l14-java-fehler-start.visustruct":ij,"../../lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct":aj,"../../lessons/diagramme/l14-java-laeuft-nicht-start.visustruct":sj,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":rj,"../../lessons/diagramme/l14-namen-eingeben.visustruct":oj,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":lj,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":uj,"../../lessons/diagramme/l14-summe-maximum.visustruct":mj,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":cj,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":dj,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":hj,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":gj,"../../lessons/diagramme/l15-hauptprogramm.visustruct":pj,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":fj,"../../lessons/diagramme/l15-java-fehler-start.visustruct":xj,"../../lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct":bj,"../../lessons/diagramme/l15-java-laeuft-nicht-start.visustruct":vj,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":yj,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":wj,"../../lessons/diagramme/l15-quadrat.visustruct":zj,"../../lessons/diagramme/l15-titel-loesung.visustruct":Ij,"../../lessons/diagramme/l15-unterprogramm.visustruct":kj,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":Sj,"../../lessons/diagramme/l15-zeige-summe.visustruct":Tj,"../../lessons/diagramme/l16-countdown-loesung.visustruct":_j,"../../lessons/diagramme/l16-countdown-start.visustruct":jj,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":Cj,"../../lessons/diagramme/l16-java-fehler-start.visustruct":Aj,"../../lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct":Pj,"../../lessons/diagramme/l16-java-laeuft-nicht-start.visustruct":Oj,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":Dj,"../../lessons/diagramme/l16-schreibtisch.visustruct":Bj,"../../lessons/diagramme/l16-summe-loesung.visustruct":Mj,"../../lessons/diagramme/l16-summe-start.visustruct":Zj,"../../lessons/diagramme/l17-beispiel.visustruct":Lj,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":Wj,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":Ej,"../../lessons/diagramme/l17-java-brief-start.visustruct":Nj,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":Fj,"../../lessons/diagramme/l17-java-fehler-start.visustruct":Jj,"../../lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct":Rj,"../../lessons/diagramme/l17-java-laeuft-nicht-start.visustruct":Gj,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":Hj,"../../lessons/diagramme/l17-ticket-loesung.visustruct":Vj,"../../lessons/diagramme/l18-beispiel.visustruct":qj,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":Uj,"../../lessons/diagramme/l18-java-fehler-start.visustruct":Qj,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":Yj,"../../lessons/diagramme/l18-js-loesung.visustruct":$j,"../../lessons/diagramme/l18-python-loesung.visustruct":Xj,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":Kj,"../../lessons/diagramme/l19-java-fehler-start.visustruct":eC,"../../lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct":tC,"../../lessons/diagramme/l19-java-laeuft-nicht-start.visustruct":nC,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":iC,"../../lessons/diagramme/l2-ausgabe.visustruct":aC,"../../lessons/diagramme/l2-hallo-loesung.visustruct":sC,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":rC,"../../lessons/diagramme/l20-countdown-loesung.visustruct":oC,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":lC,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":uC,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":mC,"../../lessons/diagramme/l23-java-nummern-start.visustruct":cC,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":dC,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":hC,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":gC,"../../lessons/diagramme/l24-java-laengster-start.visustruct":pC,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":fC,"../../lessons/diagramme/l25-java-beste-start.visustruct":xC,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":bC,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":vC,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":yC,"../../lessons/diagramme/l26-java-namen-start.visustruct":wC,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":zC,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":IC,"../../lessons/diagramme/l27-java-json-loesung.visustruct":kC,"../../lessons/diagramme/l27-java-json-start.visustruct":SC,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":TC,"../../lessons/diagramme/l27-java-saetze-start.visustruct":_C,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":jC,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":CC,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":AC,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":PC,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":OC,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":DC,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":BC,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":MC,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":ZC,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":LC,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":WC,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":EC,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":NC,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":FC,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":JC,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":RC,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":GC,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":HC,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":VC,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":qC,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":UC,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":QC,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":YC,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":$C,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":XC,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":KC,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":eA,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":tA,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":nA,"../../lessons/diagramme/pt/dt-buffered.visustruct":iA,"../../lessons/diagramme/pt/dt-csv.visustruct":aA,"../../lessons/diagramme/pt/dt-json.visustruct":sA,"../../lessons/diagramme/pt/dt-lesen.visustruct":rA,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":oA,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":lA,"../../lessons/diagramme/pt/kino-frei-start.visustruct":uA,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":mA,"../../lessons/diagramme/pt/kino-karte-start.visustruct":cA,"../../lessons/diagramme/pt/kino-saalplan.visustruct":dA,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":hA,"../../lessons/diagramme/pt/l04-gross-klein-loesung.visustruct":gA,"../../lessons/diagramme/pt/l04-gross-klein-start.visustruct":pA,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":fA,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":xA,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct":bA,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct":vA,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":yA,"../../lessons/diagramme/pt/l04-rechnen.visustruct":wA,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":zA,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":IA,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":kA,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":SA,"../../lessons/diagramme/pt/l04-tauschen.visustruct":TA,"../../lessons/diagramme/pt/l05-datentypen.visustruct":_A,"../../lessons/diagramme/pt/l05-division.visustruct":jA,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":CA,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":AA,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":PA,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":OA,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct":DA,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct":BA,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":MA,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":ZA,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":LA,"../../lessons/diagramme/pt/l05-sequenz.visustruct":WA,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":EA,"../../lessons/diagramme/pt/l06-eva.visustruct":NA,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":FA,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":JA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct":RA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct":GA,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":HA,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":VA,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":qA,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":UA,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":QA,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":YA,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":$A,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":XA,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct":KA,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct":eP,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":tP,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":nP,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":iP,"../../lessons/diagramme/pt/l07-rabatt.visustruct":aP,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":sP,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":rP,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":oP,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":lP,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct":uP,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct":mP,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":cP,"../../lessons/diagramme/pt/l08-note.visustruct":dP,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":hP,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":gP,"../../lessons/diagramme/pt/l09-ampel.visustruct":pP,"../../lessons/diagramme/pt/l09-automat.visustruct":fP,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":xP,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":bP,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct":vP,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct":yP,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":wP,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":zP,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":IP,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":kP,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":SP,"../../lessons/diagramme/pt/l1-sequenz.visustruct":TP,"../../lessons/diagramme/pt/l1-tee.visustruct":_P,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":jP,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":CP,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":AP,"../../lessons/diagramme/pt/l10-countdown.visustruct":PP,"../../lessons/diagramme/pt/l10-endlos.visustruct":OP,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":DP,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":BP,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":MP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct":ZP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct":LP,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":WP,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":EP,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":NP,"../../lessons/diagramme/pt/l11-einmal.visustruct":FP,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":JP,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":RP,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":GP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct":HP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct":VP,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":qP,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":UP,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":QP,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":YP,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":$P,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":XP,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":KP,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct":eO,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct":tO,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":nO,"../../lessons/diagramme/pt/l12-summe.visustruct":iO,"../../lessons/diagramme/pt/l13-dreieck.visustruct":aO,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":sO,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":rO,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":oO,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":lO,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct":uO,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct":mO,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":cO,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":dO,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":hO,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":gO,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":pO,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":fO,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct":xO,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct":bO,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":vO,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":yO,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":wO,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":zO,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":IO,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":kO,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":SO,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":TO,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":_O,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":jO,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":CO,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct":AO,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct":PO,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":OO,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":DO,"../../lessons/diagramme/pt/l15-quadrat.visustruct":BO,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":MO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":ZO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":LO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":WO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":EO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":NO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":FO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":JO,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct":RO,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct":GO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":HO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":VO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":qO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":UO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":QO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":YO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":$O,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":XO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":KO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":eD,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct":tD,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct":nD,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":iD,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":aD,"../../lessons/diagramme/pt/l18-beispiel.visustruct":sD,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":rD,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":oD,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":lD,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":uD,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":mD,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":cD,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":dD,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct":hD,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct":gD,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":pD,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":fD,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":xD,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":bD,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":vD,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":yD,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":wD,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":zD,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":ID,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":kD,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":SD,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":TD,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":_D,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":jD,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":CD,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":AD,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":PD,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":OD,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":DD,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":BD,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":MD,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":ZD,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":LD,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":WD,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":ED,"../../lessons/diagramme/pt/sim-kino-start.visustruct":ND,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":FD,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":JD,"../../lessons/diagramme/pt/sim-tausch.visustruct":RD,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":GD,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":HD,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":VD,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":qD,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":UD,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":QD,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":YD,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":$D,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":XD,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":KD,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":eB,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":tB,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":nB,"../../lessons/diagramme/pt/zk-mehr.visustruct":iB,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":aB,"../../lessons/diagramme/pt/zk-split.visustruct":sB,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":rB,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":oB,"../../lessons/diagramme/pt/zk-zeichen.visustruct":lB,"../../lessons/diagramme/sim-kino-loesung.visustruct":uB,"../../lessons/diagramme/sim-kino-start.visustruct":mB,"../../lessons/diagramme/sim-tausch-loesung.visustruct":cB,"../../lessons/diagramme/sim-tausch-start.visustruct":dB,"../../lessons/diagramme/sim-tausch.visustruct":hB,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":gB,"../../lessons/diagramme/ss-absteigend-start.visustruct":pB,"../../lessons/diagramme/ss-binaere-suche.visustruct":fB,"../../lessons/diagramme/ss-bubblesort.visustruct":xB,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":bB,"../../lessons/diagramme/ss-lineare-suche.visustruct":vB,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":yB,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":wB,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":zB,"../../lessons/diagramme/uebergabe-haupt.visustruct":IB,"../../lessons/diagramme/uebergabe-leeren.visustruct":kB,"../../lessons/diagramme/uebergabe-verdopple.visustruct":SB,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":TB,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":_B,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":jB,"../../lessons/diagramme/vb-ampel-loesung.visustruct":CB,"../../lessons/diagramme/vb-ampel-zustand-loesung.visustruct":AB,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":PB,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":OB,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":DB,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":BB,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":MB,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":ZB,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":LB,"../../lessons/diagramme/vb-do-while-loesung.visustruct":WB,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":EB,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":NB,"../../lessons/diagramme/vb-einparken-loesung.visustruct":FB,"../../lessons/diagramme/vb-erster-plan-loesung.visustruct":JB,"../../lessons/diagramme/vb-farben-loesung.visustruct":RB,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":GB,"../../lessons/diagramme/vb-fehler-04-sensoren-start.visustruct":HB,"../../lessons/diagramme/vb-fehler-05-bis-zur-wand-start.visustruct":VB,"../../lessons/diagramme/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":qB,"../../lessons/diagramme/vb-fehler-05-zaehlen-und-summieren-start.visustruct":UB,"../../lessons/diagramme/vb-fehler-06-abstand-start.visustruct":QB,"../../lessons/diagramme/vb-fehler-06-konstanten-final-start.visustruct":YB,"../../lessons/diagramme/vb-fehler-06-nah-mittel-weit-start.visustruct":$B,"../../lessons/diagramme/vb-fehler-07-linie-start.visustruct":XB,"../../lessons/diagramme/vb-fehler-07-und-oder-start.visustruct":KB,"../../lessons/diagramme/vb-fehler-08-farben-start.visustruct":eM,"../../lessons/diagramme/vb-fehler-08-groesster-wert-start.visustruct":tM,"../../lessons/diagramme/vb-fehler-09-fallauswahl-mbot2-start.visustruct":nM,"../../lessons/diagramme/vb-fehler-10-tasten-joystick-start.visustruct":iM,"../../lessons/diagramme/vb-fehler-10-unterbrechen-mit-break-start.visustruct":aM,"../../lessons/diagramme/vb-fehler-11-licht-start.visustruct":sM,"../../lessons/diagramme/vb-fehler-11-merker-boolean-start.visustruct":rM,"../../lessons/diagramme/vb-fehler-12-lautstaerke-start.visustruct":oM,"../../lessons/diagramme/vb-fehler-13-neigung-start.visustruct":lM,"../../lessons/diagramme/vb-fehler-14-leds-start.visustruct":uM,"../../lessons/diagramme/vb-fehler-15-einzelne-leds-start.visustruct":mM,"../../lessons/diagramme/vb-fehler-16-lautsprecher-start.visustruct":cM,"../../lessons/diagramme/vb-fehler-17-arrays-melodie-start.visustruct":dM,"../../lessons/diagramme/vb-fehler-18-bildschirm-start.visustruct":hM,"../../lessons/diagramme/vb-fehler-19-zeichenketten-start.visustruct":gM,"../../lessons/diagramme/vb-fehler-20-motoren-start.visustruct":pM,"../../lessons/diagramme/vb-fehler-21-stoppuhr-akku-start.visustruct":fM,"../../lessons/diagramme/vb-fehler-21-zustaende-start.visustruct":xM,"../../lessons/diagramme/vb-fehler-22-eigene-methoden-start.visustruct":bM,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":vM,"../../lessons/diagramme/vb-gerade-loesung.visustruct":yM,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":wM,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":zM,"../../lessons/diagramme/vb-java-ampel-text-loesung.visustruct":IM,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":kM,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":SM,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":TM,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":_M,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":jM,"../../lessons/diagramme/vb-java-klatsch-merker-loesung.visustruct":CM,"../../lessons/diagramme/vb-java-konstante-seite-loesung.visustruct":AM,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":PM,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":OM,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":DM,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":BM,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":MM,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":ZM,"../../lessons/diagramme/vb-java-rechteck-umdrehungen-loesung.visustruct":LM,"../../lessons/diagramme/vb-java-richtung-loesung.visustruct":WM,"../../lessons/diagramme/vb-java-schritte-zaehlen-loesung.visustruct":EM,"../../lessons/diagramme/vb-java-sicher-fahren-loesung.visustruct":NM,"../../lessons/diagramme/vb-java-spirale-strecke-loesung.visustruct":FM,"../../lessons/diagramme/vb-java-tageszeit-loesung.visustruct":JM,"../../lessons/diagramme/vb-java-taste-stopp-loesung.visustruct":RM,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":GM,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":HM,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":VM,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":qM,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":UM,"../../lessons/diagramme/vb-konstante-wand-loesung.visustruct":QM,"../../lessons/diagramme/vb-l00-bausteine-loesung.visustruct":YM,"../../lessons/diagramme/vb-l00-sequenz-loesung.visustruct":$M,"../../lessons/diagramme/vb-l03-wachsend-loesung.visustruct":XM,"../../lessons/diagramme/vb-l06k-mit.visustruct":KM,"../../lessons/diagramme/vb-l06k-ohne.visustruct":eZ,"../../lessons/diagramme/vb-l06n-einparkhilfe.visustruct":tZ,"../../lessons/diagramme/vb-l21z-ausweichen.visustruct":nZ,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":iZ,"../../lessons/diagramme/vb-laufschrift-loesung.visustruct":aZ,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":sZ,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":rZ,"../../lessons/diagramme/vb-meister-platz-loesung.visustruct":oZ,"../../lessons/diagramme/vb-melodie-loesung.visustruct":lZ,"../../lessons/diagramme/vb-messreihe-loesung.visustruct":uZ,"../../lessons/diagramme/vb-morsen-loesung.visustruct":mZ,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":cZ,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":dZ,"../../lessons/diagramme/vb-notbremse-loesung.visustruct":hZ,"../../lessons/diagramme/vb-oder-loesung.visustruct":gZ,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":pZ,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":fZ,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":xZ,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":bZ,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":vZ,"../../lessons/diagramme/vb-rand-loesung.visustruct":yZ,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":wZ,"../../lessons/diagramme/vb-schritte-welt-loesung.visustruct":zZ,"../../lessons/diagramme/vb-slalom-loesung.visustruct":IZ,"../../lessons/diagramme/vb-spirale-falsch-loesung.visustruct":kZ,"../../lessons/diagramme/vb-spirale-falsch-start.visustruct":SZ,"../../lessons/diagramme/vb-spirale-loesung.visustruct":TZ,"../../lessons/diagramme/vb-start-a-loesung.visustruct":_Z,"../../lessons/diagramme/vb-startsignal-loesung.visustruct":jZ,"../../lessons/diagramme/vb-strecke-anzeigen-loesung.visustruct":CZ,"../../lessons/diagramme/vb-tempo-abstand-loesung.visustruct":AZ,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":PZ,"../../lessons/diagramme/vb-treppe-loesung.visustruct":OZ,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":DZ,"../../lessons/diagramme/vb-ueberladung-umdrehung-loesung.visustruct":BZ,"../../lessons/diagramme/vb-und-loesung.visustruct":MZ,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":ZZ,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":LZ,"../../lessons/diagramme/vb-wald-loesung.visustruct":WZ,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":EZ,"../../lessons/diagramme/vb-wurde-es-dunkel-loesung.visustruct":NZ,"../../lessons/diagramme/vb-zentimeter-loesung.visustruct":FZ,"../../lessons/diagramme/vb-zentimeter-unterprogramm-loesung.visustruct":JZ,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":RZ,"../../lessons/diagramme/zk-initialen-loesung.visustruct":GZ,"../../lessons/diagramme/zk-mehr.visustruct":HZ,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":VZ,"../../lessons/diagramme/zk-split.visustruct":qZ,"../../lessons/diagramme/zk-woerter-loesung.visustruct":UZ,"../../lessons/diagramme/zk-zaehlen.visustruct":QZ,"../../lessons/diagramme/zk-zeichen.visustruct":YZ}),iN=Object.assign({"../../lessons/welten/ausgang-1.txt":$Z,"../../lessons/welten/ausgang-2.txt":XZ,"../../lessons/welten/ecke.txt":KZ,"../../lessons/welten/farbe-1.txt":eL,"../../lessons/welten/farbe-2.txt":tL,"../../lessons/welten/farbe-3.txt":nL,"../../lessons/welten/farbe-4.txt":iL,"../../lessons/welten/hindernis-1.txt":aL,"../../lessons/welten/hindernis-2.txt":sL,"../../lessons/welten/labyrinth-1.txt":rL,"../../lessons/welten/labyrinth-2.txt":oL,"../../lessons/welten/linie-1.txt":lL,"../../lessons/welten/linie-2.txt":uL,"../../lessons/welten/linie-rot-1.txt":mL,"../../lessons/welten/linie-rot-2.txt":cL,"../../lessons/welten/parken-1.txt":dL,"../../lessons/welten/parken-2.txt":hL,"../../lessons/welten/platz-1.txt":gL,"../../lessons/welten/platz-2.txt":pL,"../../lessons/welten/rand-1.txt":fL,"../../lessons/welten/rand-2.txt":xL,"../../lessons/welten/slalom.txt":bL,"../../lessons/welten/tunnel-1.txt":vL,"../../lessons/welten/tunnel-2.txt":yL,"../../lessons/welten/wald-1.txt":wL,"../../lessons/welten/wald-2.txt":zL,"../../lessons/welten/wand-frei.txt":IL,"../../lessons/welten/wand-kurz.txt":kL,"../../lessons/welten/wand-lang.txt":SL,"../../lessons/welten/wand-mittel.txt":TL,"../../lessons/welten/wand-nah.txt":_L,"../../lessons/welten/zeit-1.txt":jL,"../../lessons/welten/ziel-kurz.txt":CL,"../../lessons/welten/ziel-lang.txt":AL}),aN=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":PL,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":OL,"../../lessons/bilder/ben-shneiderman.jpg":DL,"../../lessons/bilder/caesar-ascii.svg":BL,"../../lessons/bilder/caesar-scheibe.svg":ML,"../../lessons/bilder/caesar-verschiebung.svg":ZL,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":LL,"../../lessons/bilder/en/kino-saal.svg":WL,"../../lessons/bilder/en/kino-schleifen.svg":EL,"../../lessons/bilder/en/l01-pap.svg":NL,"../../lessons/bilder/en/l02-einfuegen.svg":FL,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":JL,"../../lessons/bilder/en/l03-lochkarte.svg":RL,"../../lessons/bilder/en/l04-camelcase.svg":GL,"../../lessons/bilder/en/l04-variable.svg":HL,"../../lessons/bilder/en/l04-zuweisung.svg":VL,"../../lessons/bilder/en/l05-tauschen.svg":qL,"../../lessons/bilder/en/l08-zahlenstrahl.svg":UL,"../../lessons/bilder/en/l10-kopfgesteuert.svg":QL,"../../lessons/bilder/en/l11-vergleich.svg":YL,"../../lessons/bilder/en/l12-for-ablauf.svg":$L,"../../lessons/bilder/en/l12-while-zu-for.svg":XL,"../../lessons/bilder/en/l13-verschachtelt-tabelle.svg":KL,"../../lessons/bilder/en/l14-array.svg":eW,"../../lessons/bilder/en/l20-cpp.svg":tW,"../../lessons/bilder/en/l20-jvm.svg":nW,"../../lessons/bilder/en/mvc-klick.svg":iW,"../../lessons/bilder/en/ss-binaere-suche.svg":aW,"../../lessons/bilder/en/ss-bubblesort.svg":sW,"../../lessons/bilder/en/ss-lineare-suche.svg":rW,"../../lessons/bilder/en/ss-vergleiche.svg":oW,"../../lessons/bilder/en/uebergabe.svg":lW,"../../lessons/bilder/en/zk-zeichen.svg":uW,"../../lessons/bilder/grace-hopper.jpg":mW,"../../lessons/bilder/hedy-lamarr.jpg":cW,"../../lessons/bilder/ike-nassi.jpg":dW,"../../lessons/bilder/katherine-johnson.jpg":hW,"../../lessons/bilder/kino-saal.svg":gW,"../../lessons/bilder/kino-schleifen.svg":pW,"../../lessons/bilder/l01-pap.svg":fW,"../../lessons/bilder/l02-einfuegen.svg":xW,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":bW,"../../lessons/bilder/l03-lochkarte.svg":vW,"../../lessons/bilder/l03-zuse-lochstreifen.svg":yW,"../../lessons/bilder/l04-camelcase.svg":wW,"../../lessons/bilder/l04-variable.svg":zW,"../../lessons/bilder/l04-zuweisung.svg":IW,"../../lessons/bilder/l05-tauschen.svg":kW,"../../lessons/bilder/l07-schreibtischtest-de.svg":SW,"../../lessons/bilder/l07-schreibtischtest-en.svg":TW,"../../lessons/bilder/l07-schreibtischtest-pt.svg":_W,"../../lessons/bilder/l08-zahlenstrahl.svg":jW,"../../lessons/bilder/l09-wahrheitstabelle.svg":CW,"../../lessons/bilder/l10-kopfgesteuert.svg":AW,"../../lessons/bilder/l11-vergleich.svg":PW,"../../lessons/bilder/l12-for-ablauf.svg":OW,"../../lessons/bilder/l12-while-zu-for.svg":DW,"../../lessons/bilder/l13-verschachtelt-tabelle.svg":BW,"../../lessons/bilder/l14-array.svg":MW,"../../lessons/bilder/l20-cpp.svg":ZW,"../../lessons/bilder/l20-jvm.svg":LW,"../../lessons/bilder/margaret-hamilton.jpg":WW,"../../lessons/bilder/mvc-klick.svg":EW,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":NW,"../../lessons/bilder/pt/kino-saal.svg":FW,"../../lessons/bilder/pt/kino-schleifen.svg":JW,"../../lessons/bilder/pt/l01-pap.svg":RW,"../../lessons/bilder/pt/l02-einfuegen.svg":GW,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":HW,"../../lessons/bilder/pt/l03-lochkarte.svg":VW,"../../lessons/bilder/pt/l04-camelcase.svg":qW,"../../lessons/bilder/pt/l04-variable.svg":UW,"../../lessons/bilder/pt/l04-zuweisung.svg":QW,"../../lessons/bilder/pt/l05-tauschen.svg":YW,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":$W,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":XW,"../../lessons/bilder/pt/l11-vergleich.svg":KW,"../../lessons/bilder/pt/l12-for-ablauf.svg":eE,"../../lessons/bilder/pt/l12-while-zu-for.svg":tE,"../../lessons/bilder/pt/l13-verschachtelt-tabelle.svg":nE,"../../lessons/bilder/pt/l14-array.svg":iE,"../../lessons/bilder/pt/l20-cpp.svg":aE,"../../lessons/bilder/pt/l20-jvm.svg":sE,"../../lessons/bilder/pt/mvc-klick.svg":rE,"../../lessons/bilder/pt/schiffe-versenken.svg":oE,"../../lessons/bilder/pt/ss-binaere-suche.svg":lE,"../../lessons/bilder/pt/ss-bubblesort.svg":uE,"../../lessons/bilder/pt/ss-lineare-suche.svg":mE,"../../lessons/bilder/pt/ss-vergleiche.svg":cE,"../../lessons/bilder/pt/uebergabe.svg":dE,"../../lessons/bilder/pt/zk-zeichen.svg":hE,"../../lessons/bilder/schiffe-versenken.svg":gE,"../../lessons/bilder/ss-binaere-suche.svg":pE,"../../lessons/bilder/ss-bubblesort.svg":fE,"../../lessons/bilder/ss-lineare-suche.svg":xE,"../../lessons/bilder/ss-vergleiche.svg":bE,"../../lessons/bilder/uebergabe.svg":vE,"../../lessons/bilder/zk-zeichen.svg":yE}),Ig=i=>i.replace(/^.*\//,"");function X1(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[Ig(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function um(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let j1="en",wt=[],An=[],$a="",Xa=[],js="off";function mm(i){i!==js&&(js=i,wt=[],Cs(j1))}function Cs(i){var s,r,o;if(U3(i),i===j1&&wt.length>0)return;j1=i;const e=X1(KE,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>$E(cm(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=XE(cm(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=X1(eN,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(js==="on"){const l=X1(lm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=sN(l);wt=t(l,u.renumber).map(c=>({...c,number:u.number.get(c.id),robot:!0})).sort((c,d)=>c.number-d.number);const m=X1(tN,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);An=n(m,"visubot/aufgaben/",u.renumber).map(c=>({...c,robot:!0}))}else wt=t(e),An=n(a,"aufgaben/");An.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...wt.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...An.flatMap(u=>u.blocks)])l.kind==="textFile"&&ax(l.name,l.content);if($a=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",js!=="off"){const l=(r=X1(lm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&($a=`${$a.trimEnd()} -${l}`)}Xa=xW(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}function tE(i){const e=i.map(([a])=>a).filter(a=>/^\d+/.test(a)).sort((a,s)=>Number(/^\d+/.exec(a)[0])-Number(/^\d+/.exec(s)[0])||a.localeCompare(s)),t=new Map,n=new Map;return e.forEach((a,s)=>{t.set(a.replace(/\.md$/,""),s+1);const r=Number(/^\d+/.exec(a)[0]);n.has(r)||n.set(r,s+1)}),{number:t,renumber:n}}function cm(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}Cs("en");function kg(i,e){return j1==="de"?i.get(e)??i.get(`en/${e}`):(j1==="en"?void 0:i.get(`${j1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Sg=(i,e)=>i.slice(i.indexOf(e)+e.length),nE=new Map(Object.entries(XW).map(([i,e])=>[Sg(i,"/diagramme/"),e]));function ui(i){const e=kg(nE,i);return e===void 0?void 0:Kl(e)}const iE=new Map(Object.entries(eE).map(([i,e])=>[Sg(i,"/bilder/"),e]));function pa(i){return kg(iE,i)}const aE=new Map(Object.entries(KW).map(([i,e])=>[Ig(i).replace(/\.txt$/,""),e])),dm=new Map;function Ka(i){const e=aE.get(i);if(e===void 0)return;let t=dm.get(i);return t||dm.set(i,t=Ib(e)),t}const Tg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function je(i){const e=[];let t=Tg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^\?(visustruct|visubot)(&lektion=[\w-]+)?$/.test(s),o=r||/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",l=r||/^https?:/.test(o)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function _n(i){const e=[],t=i.replace(/\r\n/g,` +${l}`)}Xa=wE(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}function sN(i){const e=i.map(([a])=>a).filter(a=>/^\d+/.test(a)).sort((a,s)=>Number(/^\d+/.exec(a)[0])-Number(/^\d+/.exec(s)[0])||a.localeCompare(s)),t=new Map,n=new Map;return e.forEach((a,s)=>{t.set(a.replace(/\.md$/,""),s+1);const r=Number(/^\d+/.exec(a)[0]);n.has(r)||n.set(r,s+1)}),{number:t,renumber:n}}function cm(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}Cs("en");function kg(i,e){return j1==="de"?i.get(e)??i.get(`en/${e}`):(j1==="en"?void 0:i.get(`${j1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Sg=(i,e)=>i.slice(i.indexOf(e)+e.length),rN=new Map(Object.entries(nN).map(([i,e])=>[Sg(i,"/diagramme/"),e]));function ui(i){const e=kg(rN,i);return e===void 0?void 0:Kl(e)}const oN=new Map(Object.entries(aN).map(([i,e])=>[Sg(i,"/bilder/"),e]));function pa(i){return kg(oN,i)}const lN=new Map(Object.entries(iN).map(([i,e])=>[Ig(i).replace(/\.txt$/,""),e])),dm=new Map;function Ka(i){const e=lN.get(i);if(e===void 0)return;let t=dm.get(i);return t||dm.set(i,t=I4(e)),t}const Tg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function je(i){const e=[];let t=Tg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^\?(visustruct|visubot)(&lektion=[\w-]+)?$/.test(s),o=r||/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",l=r||/^https?:/.test(o)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function _n(i){const e=[],t=i.replace(/\r\n/g,` `).split(` `);let n=0;for(;n${Tg(c.join(` `))}`);continue}const s=/^(#{2,4})\s+(.*)$/.exec(a);if(s){const o=s[1].length,l=/\s*\{\.([a-z][a-z-]*)\}$/.exec(s[2]),u=l?s[2].slice(0,l.index):s[2];e.push(`${je(u)}`),n++;continue}if(/^\s*([-*]|\d+\.)\s+/.test(a)){const o=/^\s*\d+\./.test(a),l=[];for(;n${je(u)}`)}e.push(o?`
    ${l.join("")}
`:`
    ${l.join("")}
`);continue}if(a.startsWith("|")&&/^\|?[\s:|-]*-{3,}[\s:|-]*$/.test(t[n+1]??"")){const o=m=>m.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(c=>je(c.trim())),l=o(a);n+=2;const u=[];for(;n${l.map(m=>``).join("")}${u.map(m=>`${m.map(c=>``).join("")}`).join("")}
${m}
${c}
`);continue}if(a.startsWith(">")){const o=[];for(;n");)o.push(t[n++].replace(/^>\s?/,""));e.push(``);continue}const r=[];for(;n|\||\s*([-*]|\d+\.)\s+)/.test(t[n]);)r.push(t[n++].trim());e.push(`

${je(r.join(" "))}

`)}return e.join(` -`)}const fa=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,qo="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",y0="visustruct.learn.teacher";let w0=!1;function hm(){if(w0)return!0;try{return localStorage.getItem(y0)===qo}catch{return!1}}async function sE(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function rE(i){let e=!1;try{e=await sE(i.trim())===qo}catch{return!1}if(e){w0=!0;try{localStorage.setItem(y0,qo)}catch{}}return e}function oE(){w0=!1;try{localStorage.removeItem(y0)}catch{}}function _g(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` +`)}const fa=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Uo="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",y0="visustruct.learn.teacher";let w0=!1;function hm(){if(w0)return!0;try{return localStorage.getItem(y0)===Uo}catch{return!1}}async function uN(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function mN(i){let e=!1;try{e=await uN(i.trim())===Uo}catch{return!1}if(e){w0=!0;try{localStorage.setItem(y0,Uo)}catch{}}return e}function cN(){w0=!1;try{localStorage.removeItem(y0)}catch{}}function _g(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` `).forEach((l,u)=>{const m=document.createElement("span");m.className="ln",m.textContent=String(u+1),r.append(m,l+` -`)}),n.append(a,r),n}function jg(i){return[...i].map(([e,t])=>_g(e,t,!0))}function n1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return i.similar?p("web_sim_unknown_variable_case_fmt",i.text,i.similar):p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const De=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),gm=["0.2","0.5","1.0","1.5","2.0"],lE=i=>Number(i).toLocaleString(r1()==="java"?"en":r1(),{minimumFractionDigits:1}),Dr="visustruct.simulation.stepDelay",pm="visustruct.simulation.highlightMode";function Br(i){try{return localStorage.getItem(i)}catch{return null}}function fm(i,e){try{localStorage.setItem(i,e)}catch{}}class uE{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",gm.includes(Br(Dr)??"")?Br(Dr):"0.5");y(this,"highlightMode",Br(pm)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Ai(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,Y3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Ai(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=` +`)}),n.append(a,r),n}function jg(i){return[...i].map(([e,t])=>_g(e,t,!0))}function n1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return i.similar?p("web_sim_unknown_variable_case_fmt",i.text,i.similar):p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Be=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),gm=["0.2","0.5","1.0","1.5","2.0"],dN=i=>Number(i).toLocaleString(r1()==="java"?"en":r1(),{minimumFractionDigits:1}),Br="visustruct.simulation.stepDelay",pm="visustruct.simulation.highlightMode";function Mr(i){try{return localStorage.getItem(i)}catch{return null}}function fm(i,e){try{localStorage.setItem(i,e)}catch{}}class hN{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",gm.includes(Mr(Br)??"")?Mr(Br):"0.5");y(this,"highlightMode",Mr(pm)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Ai(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,Y3(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Ai(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=`
-

${De(p("simulation_controls"))}

+

${Be(p("simulation_controls"))}

- - - - + + + +
-

- -

${De(p("simulation_input"))}

-

${De(p("simulation_trace"))}

-

${De(p("simulation_variables"))}

-

${De(p("simulation_output"))}

- `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,fm(pm,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,fm(Dr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${De(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(Cg(u)):m.textContent=_e(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${De(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...jg(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${De(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?n1(r):"",o.hidden=!r}}function Cg(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const I1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Hn=360/I1.length,mE="http://www.w3.org/2000/svg";function Je(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function bt(i,e={},t){const n=document.createElementNS(mE,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function cE(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function xm(i,e){const t=bt("g",{class:e}),n=I1.map((a,s)=>{const r=bt("g",{transform:`rotate(${s*Hn})`});return r.append(bt("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function dE(i,e){let t=i,n=!1,a=-t*Hn;const s=Je("section",{class:"learn-game learn-caesar"});s.append(Je("div",{class:"learn-game-head"},Je("strong",{},p("web_learn_caesar_title")))),s.append(Je("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=bt("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(bt("circle",{r:196,class:"outer-disc"})),r.append(bt("path",{d:hE(196,92,Hn/2),class:"window"}));const o=xm(168,"outer-letters");r.append(o.group);for(let C=0;C{o.cells.forEach((Z,J)=>Z.classList.toggle("marked",J===C)),u.cells.forEach((Z,J)=>Z.classList.toggle("marked",C!==void 0&&J===(C+t)%26))},S=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),z.textContent=cE(v.value,n?-t:t)||" ";const C=Array.from(v.value.toUpperCase()).reverse().find(J=>I1.includes(J));if(C===void 0)return k();const Z=I1.indexOf(C);k(n?(Z-t+26)%26:Z)},j=C=>{t=(C%26+26)%26,a=-t*Hn,S()};c.addEventListener("click",()=>j(t-1)),d.addEventListener("click",()=>j(t+1)),f.addEventListener("click",()=>{var C;n&&(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!1,S()}),x.addEventListener("click",()=>{var C;n||(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!0,S()}),v.addEventListener("input",S),o.cells.forEach((C,Z)=>C.addEventListener("click",()=>k(Z)));let M;const O=C=>{const Z=r.getBoundingClientRect();return Math.atan2(C.clientY-(Z.top+Z.height/2),C.clientX-(Z.left+Z.width/2))*180/Math.PI};l.addEventListener("pointerdown",C=>{const Z=C;M=O(Z)-a,l.classList.add("dragging"),r.setPointerCapture(Z.pointerId),Z.preventDefault()}),r.addEventListener("pointermove",C=>{if(M===void 0)return;a=O(C)-M,l.setAttribute("transform",`rotate(${a})`);const Z=Math.round(-a/Hn);if((Z%26+26)%26!==t){t=(Z%26+26)%26;const J=a;S(),a=J,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{M!==void 0&&(M=void 0,l.classList.remove("dragging"),j(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),S(),s}function hE(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const z0=i=>p(`web_visubot_part_${i}`),Ag=new WeakMap;function Pg(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=z0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=K(async()=>{const{Robot3D:c}=await import("./robot3d-C6eyLYBE.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return Ag.set(a,m),m}function gE(i,e,t=!1){return Pg(i,e,t).box}function pE(i){const e=i.querySelector(".visubot-model"),t=e&&Ag.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(z0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function fE(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=_n(`**${t+1}/${i.length}** ${i[t].question}`)},r=Pg([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",z0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(v=>{window.clearTimeout(v),window.clearInterval(v)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const v=U("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,z=U("div",{class:"learn-bomb-fuse"},U("span",{})),I=U("span",{class:"learn-bomb-time"}),k=U("div",{class:"learn-bomb","aria-live":"polite"},U("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),I,z),S=U("div",{class:"learn-game-feedback",role:"status"}),j=v.wrongPart!==void 0,M=[],O=v.code.split(` -`).map((ee,fe)=>{if(!j){const E=U("button",{class:"ln",type:"button"},ee||" ");return E.disabled=!ee.trim(),M.push({button:E,line:fe+1,right:fe+1===v.wrongLine}),E}const re=U("div",{class:"ln parts"});ee.trim()||re.append(" ");for(const E of cg(ee)){if(!E.part){re.append(E.text);continue}const A=U("button",{class:"part",type:"button"},E.text);M.push({button:A,line:fe+1,right:fe+1===v.wrongLine&&E.text===v.wrongPart}),re.append(A)}return re});for(const ee of M)ee.button.addEventListener("click",()=>J(ee.right?"right":ee.line===v.wrongLine?"part":"wrong",ee.button));const P=U("div",{class:`learn-game-code learn-bomb-code mono${j?" by-parts":""}`,dir:"ltr"},...O),C=Date.now(),Z=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const ee=Math.max(0,w-(Date.now()-C)/1e3);I.textContent=p("web_game_time_fmt",Math.ceil(ee)),z.firstChild.style.width=`${ee/w*100}%`,k.classList.toggle("hurry",ee<=5),ee<=0&&J("time")},J=(ee,fe)=>{m();for(const A of M)A.button.disabled=!0,A.right&&A.button.classList.add("right");j&&O[v.wrongLine-1].classList.add("right"),fe&&ee!=="right"&&fe.classList.add("wrong");const re=ee==="right";re&&l++,c(),k.classList.add(re?"defused":"boom"),k.firstChild.textContent=re?"✂️":"💥",S.className=`learn-game-feedback ${re?"right":"wrong"}`;const E=d();S.replaceChildren(U("p",{},p(re?"web_game_defused":ee==="time"?"web_game_boom_time":ee==="part"?"web_game_boom_part":j?"web_game_boom_wrong_part":"web_game_boom_wrong")),Rn("div",{class:"learn-game-explain"},v.explanation),U("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,U("code",{},v.fix.trim())),E),E.focus({preventScroll:!0})},Y=Rn("p",{class:"learn-game-question"},v.question);j&&Y.append(" ",U("span",{class:"learn-bomb-hint"},p("web_game_bomb_parts_hint"))),s.replaceChildren(k,Y,P,S),Z();const ae=window.setInterval(Z,200);u.push(ae)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(vm(v.code).element),w.push(Rn("p",{class:"learn-game-question"},v.question),U("p",{class:"learn-order-hint"},p("web_game_order_hint")));const z=U("div",{class:"learn-game-options learn-order"}),I=U("div",{class:"learn-game-feedback",role:"status"});let k=0;const S=bE(v.options.length).map(M=>{const O=U("span",{class:"learn-order-badge","aria-hidden":"true"}),P=U("span",{});P.innerHTML=je(v.options[M].text);const C=U("button",{},O,P);return C.addEventListener("click",()=>{if(M!==k)return C.classList.add("wrong"),j(!1);C.classList.add("right"),O.textContent=String(++k),C.disabled=!0,k===v.options.length&&j(!0)}),z.append(C),{k:M,b:C,badge:O}}),j=M=>{for(const{k:P,b:C,badge:Z}of[...S].sort((J,Y)=>J.k-Y.k))C.disabled=!0,Z.textContent=String(P+1),z.append(C);M&&l++,c(),I.className=`learn-game-feedback ${M?"right":"wrong"}`;const O=d();I.replaceChildren(U("p",{},p(M?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation),O),O.focus({preventScroll:!0})};s.replaceChildren(...w,z,I)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=vm(v.code),z=[];let I;i.kind==="zuhoerer"?(I=vE(hg(v.code),w),z.push(U("div",{class:"learn-swing-row"},w.element,I.element)),v.clicks.length&&z.push(U("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((O,P)=>[...P?[" → "]:[],U("code",{},O)])))):v.code.trim()&&z.push(w.element),z.push(Rn("p",{class:"learn-game-question"},v.question));const k=U("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),S=U("div",{class:"learn-game-feedback",role:"status"}),j=v.options.map(O=>{const P=U("button",{});return i.kind==="layout"?P.append(wE(O.text)):O.text.includes(` -`)?P.append(yE(O.text)):P.innerHTML=je(O.text),P.addEventListener("click",()=>M(O.right,P)),k.append(P),P}),M=(O,P)=>{j.forEach((Z,J)=>{Z.disabled=!0,v.options[J].right&&Z.classList.add("right")}),O||P.classList.add("wrong"),O&&l++,c(),S.className=`learn-game-feedback ${O?"right":"wrong"}`;const C=d();S.replaceChildren(U("p",{},p(O?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation)),S.append(C),I&&(u=I.replay(v.clicks,()=>C.before(U("p",{class:"learn-swing-try"},p("web_game_try"))))),C.focus({preventScroll:!0})};s.replaceChildren(...z,k,S)},x=()=>{m(),a.textContent="";const v=U("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(U("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),U("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},b=U("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Rn("p",{},i.intro),b),t}function bE(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function vm(i){const e=i.split(` -`).map(n=>U("div",{class:"ln"},n||" "));return{element:U("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function vE(i,e){const t=gg(i),n=U("div",{class:"learn-swing-window",dir:"ltr"});n.append(U("div",{class:"learn-swing-title"},i.title||" "));const a=U("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=U("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=U("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=U("p",{class:"learn-swing-event",role:"status"}),l=U("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} -`).join(""))},m=c=>u(pg(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*bm));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(fg(i,t,g.name)))}),d()},(c.length+.3)*bm)),h}}}function yE(i){return U("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function wE(i){const e=dg(i),t=U("div",{class:"learn-layout-window",dir:"ltr"},U("div",{class:"learn-layout-title"})),n=U("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>U("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function H(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function In(i,e,t){const n=H(i,e);return n.innerHTML=je(t),n}function ym(i){return H("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` -`).map(e=>H("div",{class:"ln"},e||" ")))}function zE(i,e){const t=H("section",{class:"learn-game learn-rescue"}),n=H("div",{class:"learn-game-head"});n.append(H("img",{src:e,alt:"",width:"40",height:"40"}),H("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>H("span",{class:"learn-rescue-dot"})),r=H("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=H("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",H("span",{class:"learn-rescue-zora"},"🐐"),H("span",{class:"learn-rescue-fox"},"🦊")),l=H("span",{class:"learn-rescue-free"},"🐐"),u=H("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=H("p",{class:"learn-game-status"}),c=H("div",{class:"learn-game-stage"}),d=IE(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((I,k)=>I.classList.toggle("done",k{const I=[...i.alphabet].map((k,S)=>H("span",{class:"learn-rescue-letter"},H("b",{},k),H("small",{},String(S))));return{element:H("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...I),cells:I}},x=I=>{const k=i.stations[I];m.textContent=p("web_learn_rescue_station_fmt",I+1,a,k.name);const S=f(),j=H("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),M=H("button",{class:"primary"},p("web_learn_check")),O=H("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const C=j.value.trim();if(!/^-?\d+$/.test(C)){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_not_number")));return}if(Number(C)!==k.answer){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_wrong")),...k.hint?[In("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),j.select();return}j.disabled=M.disabled=!0;const Z=i.alphabet.charAt(k.answer);S.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,Z),h++,g();const J=I+1===a,Y=H("button",{class:"primary"},p(J?"web_learn_rescue_to_crossword":"web_game_next"));Y.addEventListener("click",()=>J?b():x(I+1)),O.className="learn-game-feedback right",O.replaceChildren(H("p",{},p("web_game_right")),H("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,H("span",{"aria-hidden":"true"}," → "),H("code",{},`'${Z}'`)),In("div",{class:"learn-game-explain"},k.explanation),H("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Y),Y.focus({preventScroll:!0})};M.addEventListener("click",P),j.addEventListener("keydown",C=>{C.key==="Enter"&&P()}),c.replaceChildren(ym(k.code),In("p",{class:"learn-game-question"},k.question),H("div",{class:"learn-rescue-answer"},j,M),O,H("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),ym(`String alphabet = "${i.alphabet}";`),S.element,d.element),j.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const I=H("div",{class:"learn-game-feedback",role:"status"}),k=H("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){I.className="learn-game-feedback wrong",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const S=H("button",{class:"primary"},p("web_learn_rescue_to_gate"));S.addEventListener("click",v),I.className="learn-game-feedback right",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_done")),S),S.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(In("p",{},i.crosswordText),d.element,k,I),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const I=H("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` -`).map(O=>{const P=O.indexOf(_s);return P<0?H("div",{class:"ln"},O||" "):H("div",{class:"ln"},O.slice(0,P),I,O.slice(P+_s.length))}),S=H("button",{class:"primary"},p("web_learn_rescue_open")),j=H("div",{class:"learn-game-feedback",role:"status"}),M=()=>{const O=I.value.trim();if(O!==i.keyword){const C=O.toUpperCase()===i.keyword.toUpperCase();j.className="learn-game-feedback wrong",j.replaceChildren(H("p",{},p(C?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=S.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=H("button",{},p("web_game_again"));P.addEventListener("click",w),j.className="learn-game-feedback right",j.replaceChildren(H("p",{},p("web_learn_rescue_freed")),In("div",{class:"learn-game-explain"},i.end),P)};S.addEventListener("click",M),I.addEventListener("keydown",O=>{O.key==="Enter"&&M()}),c.replaceChildren(In("p",{},i.gateText),H("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),S,j),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},z=H("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(In("p",{},i.intro),z),t}function IE(i){const e=TW(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=H("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var v;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(v=a.get(b))==null||v.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(H("span",{class:"learn-cw-empty"}));const v=`${f} ${b}`,w=H("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const S=o(f,b);S.some(j=>j.across===r)||(r=S[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",S=>{if(S.key==="Backspace"&&!w.value)l(f,b,-1);else if(S.key==="ArrowRight"||S.key==="ArrowLeft")r=!0,l(f,b,S.key==="ArrowRight"?1:-1);else if(S.key==="ArrowDown"||S.key==="ArrowUp")r=!1,l(f,b,S.key==="ArrowDown"?1:-1);else return;S.preventDefault()}),a.set(v,w);const z=t.get(v),I=H("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),k=n.get(v);k&&I.append(H("small",{class:"learn-cw-number"},String(k))),z!==void 0&&I.append(H("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=H("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,v)=>b.number-v.number)){const b=In("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var v;r=x.across,(v=a.get(`${x.row} ${x.col}`))==null||v.focus()}),f.append(b)}return H("div",{},H("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>H("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=H("div",{class:"learn-cw"},H("div",{class:"learn-cw-board"},s,H("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,H("span",{class:"mono",dir:"ltr"},...m))),H("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,v]=f.split(" ").map(Number),w=x.value!==e[b][v];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function _t(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function wm(i,e,t){const n=_t(i,e);return n.innerHTML=je(t),n}function kE(i){const e=_t("section",{class:"learn-cloze"});e.append(_t("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(wm("p",{},i.task)),e.append(_t("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=_t("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=_t("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=_t("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` -`),c.append(h)}e.append(c)}const n=_t("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?wm("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=_t("button",{class:"learn-cloze-check"},p("web_learn_check")),r=_t("button",{},p("web_learn_cloze_solution")),o=_t("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=_t("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=OW(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=zt("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function xa(i,e){return zt("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function zm(i,e,t,n){const a=zt("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function _E(i,e){const t=bg(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=zt("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=k0(i,o);return l.setAttribute("fill",I0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,Og(e,{...o,w:t.length>1?124:a},i)),r}function jE(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function CE(){const i=qe("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=zt("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=k0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",I0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(qe("dt",{},s),qe("dd",{},p(n)))}return i}function AE(i){const e=qe("section",{class:"learn-pap"});if(e.append(qe("strong",{class:"learn-pap-title"},i.title)),i.task){const E=qe("p");E.innerHTML=je(i.task),e.append(E)}e.append(qe("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=NW(i),a=t.filter(Boolean),s=Math.min(...a.map(E=>E.x-E.w/2))-4,r=i.nodes.some(E=>E.shape==="raute"),o=Math.max(...a.map(E=>E.x+E.w/2),r?Math.max(...a.map(E=>E.x))+85+40:0)+4,l=zt("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++TE}`;l.innerHTML=``;const m=zt("g",{stroke:"#1c1c1e","stroke-width":2}),c=zt("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=E=>t[E].y-t[E].h/2,f=E=>t[E].y+t[E].h/2,x=i.nodes.map((E,A)=>A).filter(E=>!i.nodes[E].isSide);x.forEach((E,A)=>{const N=i.nodes[E],q=t[E],$=x[A+1];if($!==void 0&&(m.append(xa([[q.x,f(E)],[q.x,g($)-2]],u)),N.shape==="raute"&&c.append(zm(N.sideExit==="nein"?d:h,q.x+6,f(E)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const de=q.x+q.w/2;if(c.append(zm(N.sideExit==="ja"?d:h,de+5,q.y-6,N.sideExit==="ja")),N.backTo!==void 0){const X=g(N.backTo)-14;m.append(xa([[de,q.y],[de+22,q.y],[de+22,X],[q.x,X]],u))}else if(N.side!==void 0){const X=t[N.side],ce=g(E)-14;m.append(xa([[de,q.y],[X.x-X.w/2-2,q.y]],u)),m.append(xa([[X.x,X.y-X.h/2],[X.x,ce],[q.x,ce]],u))}}),l.append(m,c);const b=i.nodes.map(()=>{}),v=[],w=[];let z;const I=qe("p",{class:"learn-pap-status",role:"status"}),k=i.explanation?qe("p",{class:"learn-explanation"}):void 0;k&&(k.innerHTML=je(i.explanation),k.hidden=!0);let S=!1;const j=()=>{v.forEach(E=>E.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},M=E=>{const A=v[E];A.replaceChildren();const N=i.nodes[E],q=b[E],$=k0(N.shape,t[E]);if($.setAttribute("class","learn-pap-shape"),q===void 0)$.setAttribute("fill","#f7f7f9"),$.setAttribute("stroke-dasharray","6 4"),A.append($),A.setAttribute("aria-label",p("web_learn_pap_empty"));else{const de=i.nodes[q];$.setAttribute("fill",I0[de.shape]),A.append($,Og(de.text,t[E],N.shape)),A.setAttribute("aria-label",de.text)}},O=()=>{i.nodes.forEach((E,A)=>M(A)),w.forEach((E,A)=>{E.hidden=b.includes(A),E.classList.toggle("selected",z===A)})},P=(E,A)=>{if(S)return;const N=b.indexOf(A);N>=0&&(b[N]=void 0),b[E]=A,z=void 0,j(),O()};i.nodes.forEach((E,A)=>{const N=zt("g",{class:"learn-pap-slot","data-slot":A,tabindex:0,role:"button"}),q=()=>{S||(z!==void 0?P(A,z):b[A]!==void 0&&(b[A]=void 0,j(),O()))};N.addEventListener("click",q),N.addEventListener("keydown",$=>{$.key!=="Enter"&&$.key!==" "||($.preventDefault(),q())}),v.push(N),l.append(N)});const C=qe("div",{class:"learn-pap-tray"});let Z=!1;for(const E of jE(i.nodes.length)){const A=i.nodes[E],N=qe("button",{class:"learn-pap-card",type:"button","aria-label":A.text},_E(A.shape,A.text));w[E]=N,N.addEventListener("click",()=>{Z||S||(z=z===E?void 0:E,O())}),N.addEventListener("pointerdown",q=>{if(S)return;Z=!1;let $;const de=ue=>{var Se;!$&&Math.hypot(ue.clientX-q.clientX,ue.clientY-q.clientY)<6||($||(Z=!0,$=N.cloneNode(!0),$.classList.add("learn-pap-ghost"),document.body.append($),N.classList.add("dragging")),$.style.left=`${ue.clientX}px`,$.style.top=`${ue.clientY}px`,v.forEach(Fe=>Fe.classList.remove("over")),(Se=X(ue))==null||Se.classList.add("over"))},X=ue=>{var Fe;$&&($.style.display="none");const Se=(Fe=document.elementFromPoint(ue.clientX,ue.clientY))==null?void 0:Fe.closest("[data-slot]");return $&&($.style.display=""),Se&&v.includes(Se)?Se:void 0},ce=ue=>{if(N.removeEventListener("pointermove",de),N.removeEventListener("pointerup",ce),N.removeEventListener("pointercancel",ce),v.forEach(Fe=>Fe.classList.remove("over")),N.classList.remove("dragging"),!$)return;const Se=ue.type==="pointerup"?X(ue):void 0;$.remove(),Se&&P(Number(Se.getAttribute("data-slot")),E),setTimeout(()=>Z=!1)};N.setPointerCapture(q.pointerId),N.addEventListener("pointermove",de),N.addEventListener("pointerup",ce),N.addEventListener("pointercancel",ce)}),C.append(N)}const J=qe("button",{class:"learn-pap-check"},p("web_learn_check")),Y=qe("button",{},p("web_learn_cloze_solution")),ae=qe("button",{},p("web_learn_cloze_again"));Y.hidden=!0,ae.hidden=!0;const ee=()=>{S=!0,J.hidden=!0,Y.hidden=!0,ae.hidden=!1,C.hidden=!0,re.classList.add("done"),k&&(k.hidden=!1)};J.addEventListener("click",()=>{const E=b.filter(q=>q===void 0).length;let A=0;b.forEach((q,$)=>{const de=q!==void 0&&DW(i,$,q);v[$].classList.toggle("right",de),v[$].classList.toggle("wrong",q!==void 0&&!de),de&&A++});const N=A===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):E?p("web_learn_pap_missing_fmt",E):p("web_learn_pap_score_fmt",A,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?ee():E||(Y.hidden=!1)}),Y.addEventListener("click",()=>{i.nodes.forEach((E,A)=>b[A]=A),z=void 0,O(),j(),v.forEach(E=>E.classList.add("shown")),ee()}),ae.addEventListener("click",()=>{i.nodes.forEach((E,A)=>b[A]=void 0),S=!1,z=void 0,v.forEach(E=>E.classList.remove("shown")),j(),O(),J.hidden=!1,ae.hidden=!0,C.hidden=!1,re.classList.remove("done"),k&&(k.hidden=!0)}),O();const fe=qe("div",{class:"learn-pap-left"});fe.append(l),i.legend&&fe.append(CE());const re=qe("div",{class:"learn-pap-work"},fe,C);return e.append(re,qe("div",{class:"learn-pap-actions"},J,Y,ae),I),k&&e.append(k),e}const PE="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function Im(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=tm(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?nm(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(PE)||l.push(u)}for(let u of l)for(;;){const m=tm(a),c=m==null?void 0:m.exec(u.data),d=c?nm(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function OE(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Mg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},Dg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),Bg=new Set(["ausfuehren","konsole","einzelschritt"]);function lr(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function km(i){return i==="elemente"?["editor","palette"]:Dg.has(i)?["editor"]:i==="codelive"||Bg.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function ME(i){return lr(i,new Set(["elemente"]))}function DE(i){return lr(i,new Set(["dateien"]))}function BE(i){return lr(i,Dg)}function ZE(i){return lr(i,Bg)}function Sm(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Mg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function LE(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(Mg[h.dataset.target??""]??":not(*)")].find(x=>x.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(km(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=km(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const Ct='',WE=()=>{const i=[];for(const e of wt){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function _(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Ve(i,e,t){const n=_(i,e);return n.innerHTML=t,n}const EE=i=>p(`element_${T[i]}`);function NE(i){return{caption:i,elements:[Ce(T.anweisung,{textLines:["ø"]})]}}function Tm(i){const e=i.start?ui(i.start):void 0;return e?{...e,caption:e.caption||i.title}:NE(i.title)}class FE{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=_("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=OE(this.element),this.pointers=LE(this.element,t=>this.host.reveal(t)),Cs(um(r1())),this.restore()}restore(){const e=be.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=wt.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=An.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),Cs(um(r1()));const e=_("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=_("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=Ve("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},Ct);t.addEventListener("click",()=>this.host.collapse());const n=_("div",{class:"learn-head"},e,t);if(this.body=_("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=wt.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=An.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=Xa.map(r=>`- **${r.term}:** ${r.text}`).join(` + +

${Be(p("simulation_input"))}

+

${Be(p("simulation_trace"))}

+

${Be(p("simulation_variables"))}

+

${Be(p("simulation_output"))}

+ `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,fm(pm,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,fm(Br,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Be(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(Cg(u)):m.textContent=_e(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Be(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...jg(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Be(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?n1(r):"",o.hidden=!r}}function Cg(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const I1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Hn=360/I1.length,gN="http://www.w3.org/2000/svg";function Je(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function bt(i,e={},t){const n=document.createElementNS(gN,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function pN(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function xm(i,e){const t=bt("g",{class:e}),n=I1.map((a,s)=>{const r=bt("g",{transform:`rotate(${s*Hn})`});return r.append(bt("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function fN(i,e){let t=i,n=!1,a=-t*Hn;const s=Je("section",{class:"learn-game learn-caesar"});s.append(Je("div",{class:"learn-game-head"},Je("strong",{},p("web_learn_caesar_title")))),s.append(Je("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=bt("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(bt("circle",{r:196,class:"outer-disc"})),r.append(bt("path",{d:xN(196,92,Hn/2),class:"window"}));const o=xm(168,"outer-letters");r.append(o.group);for(let C=0;C{o.cells.forEach((Z,J)=>Z.classList.toggle("marked",J===C)),u.cells.forEach((Z,J)=>Z.classList.toggle("marked",C!==void 0&&J===(C+t)%26))},S=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),x.classList.toggle("active",n),z.textContent=pN(v.value,n?-t:t)||" ";const C=Array.from(v.value.toUpperCase()).reverse().find(J=>I1.includes(J));if(C===void 0)return k();const Z=I1.indexOf(C);k(n?(Z-t+26)%26:Z)},j=C=>{t=(C%26+26)%26,a=-t*Hn,S()};c.addEventListener("click",()=>j(t-1)),d.addEventListener("click",()=>j(t+1)),f.addEventListener("click",()=>{var C;n&&(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!1,S()}),x.addEventListener("click",()=>{var C;n||(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!0,S()}),v.addEventListener("input",S),o.cells.forEach((C,Z)=>C.addEventListener("click",()=>k(Z)));let D;const O=C=>{const Z=r.getBoundingClientRect();return Math.atan2(C.clientY-(Z.top+Z.height/2),C.clientX-(Z.left+Z.width/2))*180/Math.PI};l.addEventListener("pointerdown",C=>{const Z=C;D=O(Z)-a,l.classList.add("dragging"),r.setPointerCapture(Z.pointerId),Z.preventDefault()}),r.addEventListener("pointermove",C=>{if(D===void 0)return;a=O(C)-D,l.setAttribute("transform",`rotate(${a})`);const Z=Math.round(-a/Hn);if((Z%26+26)%26!==t){t=(Z%26+26)%26;const J=a;S(),a=J,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{D!==void 0&&(D=void 0,l.classList.remove("dragging"),j(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),S(),s}function xN(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const z0=i=>p(`web_visubot_part_${i}`),Ag=new WeakMap;function Pg(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=z0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=K(async()=>{const{Robot3D:c}=await import("./robot3d-DEkrf1Uk.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return Ag.set(a,m),m}function bN(i,e,t=!1){return Pg(i,e,t).box}function vN(i){const e=i.querySelector(".visubot-model"),t=e&&Ag.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(z0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function yN(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=_n(`**${t+1}/${i.length}** ${i[t].question}`)},r=Pg([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",z0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(v=>{window.clearTimeout(v),window.clearInterval(v)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const v=Q("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,z=Q("div",{class:"learn-bomb-fuse"},Q("span",{})),I=Q("span",{class:"learn-bomb-time"}),k=Q("div",{class:"learn-bomb","aria-live":"polite"},Q("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),I,z),S=Q("div",{class:"learn-game-feedback",role:"status"}),j=v.wrongPart!==void 0,D=[],O=v.code.split(` +`).map((ee,fe)=>{if(!j){const E=Q("button",{class:"ln",type:"button"},ee||" ");return E.disabled=!ee.trim(),D.push({button:E,line:fe+1,right:fe+1===v.wrongLine}),E}const re=Q("div",{class:"ln parts"});ee.trim()||re.append(" ");for(const E of cg(ee)){if(!E.part){re.append(E.text);continue}const A=Q("button",{class:"part",type:"button"},E.text);D.push({button:A,line:fe+1,right:fe+1===v.wrongLine&&E.text===v.wrongPart}),re.append(A)}return re});for(const ee of D)ee.button.addEventListener("click",()=>J(ee.right?"right":ee.line===v.wrongLine?"part":"wrong",ee.button));const P=Q("div",{class:`learn-game-code learn-bomb-code mono${j?" by-parts":""}`,dir:"ltr"},...O),C=Date.now(),Z=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const ee=Math.max(0,w-(Date.now()-C)/1e3);I.textContent=p("web_game_time_fmt",Math.ceil(ee)),z.firstChild.style.width=`${ee/w*100}%`,k.classList.toggle("hurry",ee<=5),ee<=0&&J("time")},J=(ee,fe)=>{m();for(const A of D)A.button.disabled=!0,A.right&&A.button.classList.add("right");j&&O[v.wrongLine-1].classList.add("right"),fe&&ee!=="right"&&fe.classList.add("wrong");const re=ee==="right";re&&l++,c(),k.classList.add(re?"defused":"boom"),k.firstChild.textContent=re?"✂️":"💥",S.className=`learn-game-feedback ${re?"right":"wrong"}`;const E=d();S.replaceChildren(Q("p",{},p(re?"web_game_defused":ee==="time"?"web_game_boom_time":ee==="part"?"web_game_boom_part":j?"web_game_boom_wrong_part":"web_game_boom_wrong")),Rn("div",{class:"learn-game-explain"},v.explanation),Q("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,Q("code",{},v.fix.trim())),E),E.focus({preventScroll:!0})},Y=Rn("p",{class:"learn-game-question"},v.question);j&&Y.append(" ",Q("span",{class:"learn-bomb-hint"},p("web_game_bomb_parts_hint"))),s.replaceChildren(k,Y,P,S),Z();const ae=window.setInterval(Z,200);u.push(ae)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(vm(v.code).element),w.push(Rn("p",{class:"learn-game-question"},v.question),Q("p",{class:"learn-order-hint"},p("web_game_order_hint")));const z=Q("div",{class:"learn-game-options learn-order"}),I=Q("div",{class:"learn-game-feedback",role:"status"});let k=0;const S=zN(v.options.length).map(D=>{const O=Q("span",{class:"learn-order-badge","aria-hidden":"true"}),P=Q("span",{});P.innerHTML=je(v.options[D].text);const C=Q("button",{},O,P);return C.addEventListener("click",()=>{if(D!==k)return C.classList.add("wrong"),j(!1);C.classList.add("right"),O.textContent=String(++k),C.disabled=!0,k===v.options.length&&j(!0)}),z.append(C),{k:D,b:C,badge:O}}),j=D=>{for(const{k:P,b:C,badge:Z}of[...S].sort((J,Y)=>J.k-Y.k))C.disabled=!0,Z.textContent=String(P+1),z.append(C);D&&l++,c(),I.className=`learn-game-feedback ${D?"right":"wrong"}`;const O=d();I.replaceChildren(Q("p",{},p(D?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation),O),O.focus({preventScroll:!0})};s.replaceChildren(...w,z,I)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=vm(v.code),z=[];let I;i.kind==="zuhoerer"?(I=IN(hg(v.code),w),z.push(Q("div",{class:"learn-swing-row"},w.element,I.element)),v.clicks.length&&z.push(Q("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((O,P)=>[...P?[" → "]:[],Q("code",{},O)])))):v.code.trim()&&z.push(w.element),z.push(Rn("p",{class:"learn-game-question"},v.question));const k=Q("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),S=Q("div",{class:"learn-game-feedback",role:"status"}),j=v.options.map(O=>{const P=Q("button",{});return i.kind==="layout"?P.append(SN(O.text)):O.text.includes(` +`)?P.append(kN(O.text)):P.innerHTML=je(O.text),P.addEventListener("click",()=>D(O.right,P)),k.append(P),P}),D=(O,P)=>{j.forEach((Z,J)=>{Z.disabled=!0,v.options[J].right&&Z.classList.add("right")}),O||P.classList.add("wrong"),O&&l++,c(),S.className=`learn-game-feedback ${O?"right":"wrong"}`;const C=d();S.replaceChildren(Q("p",{},p(O?"web_game_right":"web_game_wrong_short")),Rn("div",{class:"learn-game-explain"},v.explanation)),S.append(C),I&&(u=I.replay(v.clicks,()=>C.before(Q("p",{class:"learn-swing-try"},p("web_game_try"))))),C.focus({preventScroll:!0})};s.replaceChildren(...z,k,S)},x=()=>{m(),a.textContent="";const v=Q("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(Q("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),Q("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},b=Q("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Rn("p",{},i.intro),b),t}function zN(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function vm(i){const e=i.split(` +`).map(n=>Q("div",{class:"ln"},n||" "));return{element:Q("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function IN(i,e){const t=gg(i),n=Q("div",{class:"learn-swing-window",dir:"ltr"});n.append(Q("div",{class:"learn-swing-title"},i.title||" "));const a=Q("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=Q("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=Q("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=Q("p",{class:"learn-swing-event",role:"status"}),l=Q("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} +`).join(""))},m=c=>u(pg(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*bm));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(fg(i,t,g.name)))}),d()},(c.length+.3)*bm)),h}}}function kN(i){return Q("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function SN(i){const e=dg(i),t=Q("div",{class:"learn-layout-window",dir:"ltr"},Q("div",{class:"learn-layout-title"})),n=Q("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>Q("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function H(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function In(i,e,t){const n=H(i,e);return n.innerHTML=je(t),n}function ym(i){return H("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` +`).map(e=>H("div",{class:"ln"},e||" ")))}function TN(i,e){const t=H("section",{class:"learn-game learn-rescue"}),n=H("div",{class:"learn-game-head"});n.append(H("img",{src:e,alt:"",width:"40",height:"40"}),H("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>H("span",{class:"learn-rescue-dot"})),r=H("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=H("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",H("span",{class:"learn-rescue-zora"},"🐐"),H("span",{class:"learn-rescue-fox"},"🦊")),l=H("span",{class:"learn-rescue-free"},"🐐"),u=H("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=H("p",{class:"learn-game-status"}),c=H("div",{class:"learn-game-stage"}),d=_N(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((I,k)=>I.classList.toggle("done",k{const I=[...i.alphabet].map((k,S)=>H("span",{class:"learn-rescue-letter"},H("b",{},k),H("small",{},String(S))));return{element:H("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...I),cells:I}},x=I=>{const k=i.stations[I];m.textContent=p("web_learn_rescue_station_fmt",I+1,a,k.name);const S=f(),j=H("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),D=H("button",{class:"primary"},p("web_learn_check")),O=H("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const C=j.value.trim();if(!/^-?\d+$/.test(C)){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_not_number")));return}if(Number(C)!==k.answer){O.className="learn-game-feedback wrong",O.replaceChildren(H("p",{},p("web_learn_rescue_wrong")),...k.hint?[In("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),j.select();return}j.disabled=D.disabled=!0;const Z=i.alphabet.charAt(k.answer);S.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,Z),h++,g();const J=I+1===a,Y=H("button",{class:"primary"},p(J?"web_learn_rescue_to_crossword":"web_game_next"));Y.addEventListener("click",()=>J?b():x(I+1)),O.className="learn-game-feedback right",O.replaceChildren(H("p",{},p("web_game_right")),H("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,H("span",{"aria-hidden":"true"}," → "),H("code",{},`'${Z}'`)),In("div",{class:"learn-game-explain"},k.explanation),H("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Y),Y.focus({preventScroll:!0})};D.addEventListener("click",P),j.addEventListener("keydown",C=>{C.key==="Enter"&&P()}),c.replaceChildren(ym(k.code),In("p",{class:"learn-game-question"},k.question),H("div",{class:"learn-rescue-answer"},j,D),O,H("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),ym(`String alphabet = "${i.alphabet}";`),S.element,d.element),j.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const I=H("div",{class:"learn-game-feedback",role:"status"}),k=H("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){I.className="learn-game-feedback wrong",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const S=H("button",{class:"primary"},p("web_learn_rescue_to_gate"));S.addEventListener("click",v),I.className="learn-game-feedback right",I.replaceChildren(H("p",{},p("web_learn_rescue_cw_done")),S),S.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(In("p",{},i.crosswordText),d.element,k,I),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const I=H("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),k=i.gateCode.split(` +`).map(O=>{const P=O.indexOf(_s);return P<0?H("div",{class:"ln"},O||" "):H("div",{class:"ln"},O.slice(0,P),I,O.slice(P+_s.length))}),S=H("button",{class:"primary"},p("web_learn_rescue_open")),j=H("div",{class:"learn-game-feedback",role:"status"}),D=()=>{const O=I.value.trim();if(O!==i.keyword){const C=O.toUpperCase()===i.keyword.toUpperCase();j.className="learn-game-feedback wrong",j.replaceChildren(H("p",{},p(C?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=S.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=H("button",{},p("web_game_again"));P.addEventListener("click",w),j.className="learn-game-feedback right",j.replaceChildren(H("p",{},p("web_learn_rescue_freed")),In("div",{class:"learn-game-explain"},i.end),P)};S.addEventListener("click",D),I.addEventListener("keydown",O=>{O.key==="Enter"&&D()}),c.replaceChildren(In("p",{},i.gateText),H("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),S,j),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},z=H("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(In("p",{},i.intro),z),t}function _N(i){const e=AE(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=H("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var v;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(v=a.get(b))==null||v.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(H("span",{class:"learn-cw-empty"}));const v=`${f} ${b}`,w=H("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const S=o(f,b);S.some(j=>j.across===r)||(r=S[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",S=>{if(S.key==="Backspace"&&!w.value)l(f,b,-1);else if(S.key==="ArrowRight"||S.key==="ArrowLeft")r=!0,l(f,b,S.key==="ArrowRight"?1:-1);else if(S.key==="ArrowDown"||S.key==="ArrowUp")r=!1,l(f,b,S.key==="ArrowDown"?1:-1);else return;S.preventDefault()}),a.set(v,w);const z=t.get(v),I=H("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),k=n.get(v);k&&I.append(H("small",{class:"learn-cw-number"},String(k))),z!==void 0&&I.append(H("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=H("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,v)=>b.number-v.number)){const b=In("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var v;r=x.across,(v=a.get(`${x.row} ${x.col}`))==null||v.focus()}),f.append(b)}return H("div",{},H("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>H("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=H("div",{class:"learn-cw"},H("div",{class:"learn-cw-board"},s,H("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,H("span",{class:"mono",dir:"ltr"},...m))),H("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,x]of a){const[b,v]=f.split(" ").map(Number),w=x.value!==e[b][v];x.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}function _t(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function wm(i,e,t){const n=_t(i,e);return n.innerHTML=je(t),n}function jN(i){const e=_t("section",{class:"learn-cloze"});e.append(_t("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(wm("p",{},i.task)),e.append(_t("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=_t("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=_t("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=_t("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(x=>x.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` +`),c.append(h)}e.append(c)}const n=_t("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?wm("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=_t("button",{class:"learn-cloze-check"},p("web_learn_check")),r=_t("button",{},p("web_learn_cloze_solution")),o=_t("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=_t("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=ZE(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=zt("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function xa(i,e){return zt("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function zm(i,e,t,n){const a=zt("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function PN(i,e){const t=bg(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=zt("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=k0(i,o);return l.setAttribute("fill",I0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,Og(e,{...o,w:t.length>1?124:a},i)),r}function ON(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function DN(){const i=Ue("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=zt("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=k0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",I0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(Ue("dt",{},s),Ue("dd",{},p(n)))}return i}function BN(i){const e=Ue("section",{class:"learn-pap"});if(e.append(Ue("strong",{class:"learn-pap-title"},i.title)),i.task){const E=Ue("p");E.innerHTML=je(i.task),e.append(E)}e.append(Ue("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=GE(i),a=t.filter(Boolean),s=Math.min(...a.map(E=>E.x-E.w/2))-4,r=i.nodes.some(E=>E.shape==="raute"),o=Math.max(...a.map(E=>E.x+E.w/2),r?Math.max(...a.map(E=>E.x))+85+40:0)+4,l=zt("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++AN}`;l.innerHTML=``;const m=zt("g",{stroke:"#1c1c1e","stroke-width":2}),c=zt("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=E=>t[E].y-t[E].h/2,f=E=>t[E].y+t[E].h/2,x=i.nodes.map((E,A)=>A).filter(E=>!i.nodes[E].isSide);x.forEach((E,A)=>{const N=i.nodes[E],U=t[E],$=x[A+1];if($!==void 0&&(m.append(xa([[U.x,f(E)],[U.x,g($)-2]],u)),N.shape==="raute"&&c.append(zm(N.sideExit==="nein"?d:h,U.x+6,f(E)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const de=U.x+U.w/2;if(c.append(zm(N.sideExit==="ja"?d:h,de+5,U.y-6,N.sideExit==="ja")),N.backTo!==void 0){const X=g(N.backTo)-14;m.append(xa([[de,U.y],[de+22,U.y],[de+22,X],[U.x,X]],u))}else if(N.side!==void 0){const X=t[N.side],ce=g(E)-14;m.append(xa([[de,U.y],[X.x-X.w/2-2,U.y]],u)),m.append(xa([[X.x,X.y-X.h/2],[X.x,ce],[U.x,ce]],u))}}),l.append(m,c);const b=i.nodes.map(()=>{}),v=[],w=[];let z;const I=Ue("p",{class:"learn-pap-status",role:"status"}),k=i.explanation?Ue("p",{class:"learn-explanation"}):void 0;k&&(k.innerHTML=je(i.explanation),k.hidden=!0);let S=!1;const j=()=>{v.forEach(E=>E.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},D=E=>{const A=v[E];A.replaceChildren();const N=i.nodes[E],U=b[E],$=k0(N.shape,t[E]);if($.setAttribute("class","learn-pap-shape"),U===void 0)$.setAttribute("fill","#f7f7f9"),$.setAttribute("stroke-dasharray","6 4"),A.append($),A.setAttribute("aria-label",p("web_learn_pap_empty"));else{const de=i.nodes[U];$.setAttribute("fill",I0[de.shape]),A.append($,Og(de.text,t[E],N.shape)),A.setAttribute("aria-label",de.text)}},O=()=>{i.nodes.forEach((E,A)=>D(A)),w.forEach((E,A)=>{E.hidden=b.includes(A),E.classList.toggle("selected",z===A)})},P=(E,A)=>{if(S)return;const N=b.indexOf(A);N>=0&&(b[N]=void 0),b[E]=A,z=void 0,j(),O()};i.nodes.forEach((E,A)=>{const N=zt("g",{class:"learn-pap-slot","data-slot":A,tabindex:0,role:"button"}),U=()=>{S||(z!==void 0?P(A,z):b[A]!==void 0&&(b[A]=void 0,j(),O()))};N.addEventListener("click",U),N.addEventListener("keydown",$=>{$.key!=="Enter"&&$.key!==" "||($.preventDefault(),U())}),v.push(N),l.append(N)});const C=Ue("div",{class:"learn-pap-tray"});let Z=!1;for(const E of ON(i.nodes.length)){const A=i.nodes[E],N=Ue("button",{class:"learn-pap-card",type:"button","aria-label":A.text},PN(A.shape,A.text));w[E]=N,N.addEventListener("click",()=>{Z||S||(z=z===E?void 0:E,O())}),N.addEventListener("pointerdown",U=>{if(S)return;Z=!1;let $;const de=ue=>{var Se;!$&&Math.hypot(ue.clientX-U.clientX,ue.clientY-U.clientY)<6||($||(Z=!0,$=N.cloneNode(!0),$.classList.add("learn-pap-ghost"),document.body.append($),N.classList.add("dragging")),$.style.left=`${ue.clientX}px`,$.style.top=`${ue.clientY}px`,v.forEach(Fe=>Fe.classList.remove("over")),(Se=X(ue))==null||Se.classList.add("over"))},X=ue=>{var Fe;$&&($.style.display="none");const Se=(Fe=document.elementFromPoint(ue.clientX,ue.clientY))==null?void 0:Fe.closest("[data-slot]");return $&&($.style.display=""),Se&&v.includes(Se)?Se:void 0},ce=ue=>{if(N.removeEventListener("pointermove",de),N.removeEventListener("pointerup",ce),N.removeEventListener("pointercancel",ce),v.forEach(Fe=>Fe.classList.remove("over")),N.classList.remove("dragging"),!$)return;const Se=ue.type==="pointerup"?X(ue):void 0;$.remove(),Se&&P(Number(Se.getAttribute("data-slot")),E),setTimeout(()=>Z=!1)};N.setPointerCapture(U.pointerId),N.addEventListener("pointermove",de),N.addEventListener("pointerup",ce),N.addEventListener("pointercancel",ce)}),C.append(N)}const J=Ue("button",{class:"learn-pap-check"},p("web_learn_check")),Y=Ue("button",{},p("web_learn_cloze_solution")),ae=Ue("button",{},p("web_learn_cloze_again"));Y.hidden=!0,ae.hidden=!0;const ee=()=>{S=!0,J.hidden=!0,Y.hidden=!0,ae.hidden=!1,C.hidden=!0,re.classList.add("done"),k&&(k.hidden=!1)};J.addEventListener("click",()=>{const E=b.filter(U=>U===void 0).length;let A=0;b.forEach((U,$)=>{const de=U!==void 0&&WE(i,$,U);v[$].classList.toggle("right",de),v[$].classList.toggle("wrong",U!==void 0&&!de),de&&A++});const N=A===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):E?p("web_learn_pap_missing_fmt",E):p("web_learn_pap_score_fmt",A,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?ee():E||(Y.hidden=!1)}),Y.addEventListener("click",()=>{i.nodes.forEach((E,A)=>b[A]=A),z=void 0,O(),j(),v.forEach(E=>E.classList.add("shown")),ee()}),ae.addEventListener("click",()=>{i.nodes.forEach((E,A)=>b[A]=void 0),S=!1,z=void 0,v.forEach(E=>E.classList.remove("shown")),j(),O(),J.hidden=!1,ae.hidden=!0,C.hidden=!1,re.classList.remove("done"),k&&(k.hidden=!0)}),O();const fe=Ue("div",{class:"learn-pap-left"});fe.append(l),i.legend&&fe.append(DN());const re=Ue("div",{class:"learn-pap-work"},fe,C);return e.append(re,Ue("div",{class:"learn-pap-actions"},J,Y,ae),I),k&&e.append(k),e}const MN="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function Im(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=tm(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?nm(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(MN)||l.push(u)}for(let u of l)for(;;){const m=tm(a),c=m==null?void 0:m.exec(u.data),d=c?nm(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function ZN(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Dg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},Bg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),Mg=new Set(["ausfuehren","konsole","einzelschritt"]);function lr(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function km(i){return i==="elemente"?["editor","palette"]:Bg.has(i)?["editor"]:i==="codelive"||Mg.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function LN(i){return lr(i,new Set(["elemente"]))}function WN(i){return lr(i,new Set(["dateien"]))}function EN(i){return lr(i,Bg)}function NN(i){return lr(i,Mg)}function Sm(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Dg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function FN(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(Dg[h.dataset.target??""]??":not(*)")].find(x=>x.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(km(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=km(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const Ct='',JN=()=>{const i=[];for(const e of wt){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function _(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Ve(i,e,t){const n=_(i,e);return n.innerHTML=t,n}const RN=i=>p(`element_${T[i]}`);function GN(i){return{caption:i,elements:[Ce(T.anweisung,{textLines:["ø"]})]}}function Tm(i){const e=i.start?ui(i.start):void 0;return e?{...e,caption:e.caption||i.title}:GN(i.title)}class HN{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=_("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=ZN(this.element),this.pointers=FN(this.element,t=>this.host.reveal(t)),Cs(um(r1())),this.restore()}restore(){const e=be.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=wt.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=An.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),Cs(um(r1()));const e=_("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=_("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=Ve("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},Ct);t.addEventListener("click",()=>this.host.collapse());const n=_("div",{class:"learn-head"},e,t);if(this.body=_("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=wt.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=An.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=Xa.map(r=>`- **${r.term}:** ${r.text}`).join(` `),s=Ve("div",{class:"learn-text learn-reference"},_n(`${$a} ## ${p("web_learn_terms")} -${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=_("details",{class:"reference-group"});r.open=n.includes(s);const o=_("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){be.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}showLesson(e){wt.some(t=>t.id===e)&&this.openLesson(e)}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(_("p",{class:"hint"},p("web_learn_intro")));for(const e of WE()){this.body.append(_("h3",{class:"learn-section"},e.name));const t=_("ol",{class:"learn-list"});for(const n of e.lessons){const a=be.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=_("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},_("span",{class:"learn-num"},String(n.number)),_("span",{class:"learn-item-text"},_("strong",{},n.robot?`🤖 ${n.title}`:n.title),_("small",{},n.summary)),_("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(_("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=be.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=_("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=_("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(_("div",{class:"learn-lesson-head"},_("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),_("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),_("h2",{class:"learn-title"},_("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,_("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=_("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),Sm(this.body),pE(this.body),this.openNeededColumns(a.blocks),Im(this.body,Xa),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=_("div",{class:a}),r=_("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=_("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{be.updateLesson(e.id,{done:!0});const l=wt.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){be.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);BE(this.body)?(this.host.showEditor(),ME(this.body)&&this.host.reveal(["palette"])):DE(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),ZE(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(_("p",{class:"hint"},p("web_learn_tasks_intro")));const e=_("ul",{class:"learn-list"});for(const t of An){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>be.exercise(o.id).done),s=wt.find(o=>o.number===t.after),r=_("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},_("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),_("span",{class:"learn-item-text"},_("strong",{},t.title),_("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),_("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(_("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=_("details",{class:"learn-teacher"},_("summary",{},p("web_learn_teacher")));if(hm()){e.setAttribute("open","");const s=_("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{oE(),this.render()}),e.append(_("p",{},p("web_learn_teacher_on")),s),e}const t=_("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=_("p",{class:"learn-result",role:"status"}),a=_("form",{class:"group"},t,_("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await rE(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(_("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=_("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=wt.find(a=>a.number===e.after);if(this.body.append(t,_("h2",{class:"learn-title"},e.title)),n){const a=_("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(_("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Sm(this.body),this.openNeededColumns(e.blocks),Im(this.body,Xa)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(Ve("div",{class:"learn-text"},_n(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return e.animated?this.renderAnimation(e.file,e.caption):this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return xE(e.game,fa);case"rescueGame":return zE(e.game,fa);case"caesar":return dE(e.key,e.text);case"cloze":return kE(e.cloze);case"pap":return AE(e.pap);case"textFile":return _g(e.name,e.content);case"robotModel":return gE(e.focus,e.view,e.spin);case"robotQuiz":return fE(e.tasks,e.done)}}renderBrag(e,t=!1){const n=_("aside",{class:"learn-brag"});n.append(_("img",{src:fa,alt:"",width:"48",height:"48"}));const a=_("div",{},_("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(Ve("div",{class:"learn-text"},_n(e))),n.append(a),n}renderGame(e){const n=_("section",{class:"learn-game"}),a=_("div",{class:"learn-game-head"});a.append(_("img",{src:fa,alt:"",width:"40",height:"40"}),_("strong",{},p("web_game_title")));const s=_("p",{class:"learn-game-status"}),r=_("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=Hb(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=_("div",{class:"learn-game-values mono"});for(const[w,z]of Vb(d))h.append(_("code",{},`${w} = ${z}`));const g=_("div",{class:"group learn-game-answers"}),f=_("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=_("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=_("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=x.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=_("div",{class:"learn-game-steps mono"});Rb(d.condition,d.values).forEach((S,j)=>I.append(_("div",{},`${j?"→ ":""}${S}`)));const k=_("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(_("p",{},p(z?"web_game_right":"web_game_wrong")),I,k),k.focus()};f.addEventListener("click",()=>v(!0)),x.addEventListener("click",()=>v(!1)),r.replaceChildren(h,_("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=_("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(_("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),_("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=_("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(_("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=_("figure",{class:"learn-figure"}),a=_("div",{class:"learn-images"});for(const s of e){const r=pa(s);r&&a.append(_("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(Ve("figcaption",{},je(t))),n}renderGraphic(e,t,n){const a=_("figure",{class:"learn-figure"}),s=pa(e),r=n?pa(n):void 0;if(s&&r){const o=_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=_("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,_("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(Ve("figcaption",{},je(t))),a}renderAnimation(e,t){const n=_("figure",{class:"learn-figure"}),a=pa(e);if(!a)return n;const s=_("div",{class:"learn-graphic learn-animation"}),r=_("button",{class:"learn-replay",type:"button"},`↻ ${p("web_learn_replay")}`);let o=()=>{};return fetch(a).then(l=>l.text()).then(l=>{var d,h;s.innerHTML=l;const u=s.querySelector("svg"),m=(h=(d=u==null?void 0:u.getAttribute("class"))==null?void 0:d.match(/(\S+-)svg\b/))==null?void 0:h[1];if(!u||!m)return;if(o=()=>{u.classList.remove(`${m}play`),u.getBoundingClientRect(),u.classList.add(`${m}play`)},typeof IntersectionObserver>"u")return o();const c=new IntersectionObserver(g=>{g.some(f=>f.isIntersecting)&&(c.disconnect(),o())},{threshold:.6});c.observe(s)}).catch(()=>s.append(_("img",{src:a,alt:""}))),r.addEventListener("click",()=>o()),n.append(s,r),t&&n.append(Ve("figcaption",{},je(t))),n}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=_("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=ui(e),a=_("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(_("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(Ve("figcaption",{},je(t)));const r=_("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=_("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>be.exercise(e.id),a=_("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(_("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),JE(e),Ve("div",{class:"learn-text"},_n(e.task)));const s=_("div",{class:"learn-result",role:"status"}),r=_("div",{class:"learn-hints"}),o=_("div",{class:"group"}),l=_("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=Tm(e);if(c)try{d=Kl(c)}catch{}this.host.openExercise(e,d)});const u=_("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Ul)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Wb(c,e.tests,this.host.subprogramsFor(e.id),Ka),h=Eb(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in T&&!h.has(T[b])),f=e.loopDepth!==void 0&&Ho(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(be.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=_("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(Ve("aside",{class:"lesson-note"},_n(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=_("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}be.resetExercise(e.id),this.host.resetExercise(e.id,Tm(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),hm()&&e.solution){const c=ui(e.solution);if(c){const d=_("details",{class:"learn-solution"},_("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(_("div",{class:"learn-preview",dir:"ltr"},h));const g=_("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=ui(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=ui(f),b=x&&this.host.preview(x);b&&d.append(_("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(_("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(_("p",{},`✗ ${p("web_learn_missing_fmt",EE(T[d]))}`));s&&e.append(_("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=_("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,v])=>`mbot.${b}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=_("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},oi(d.test.drive)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},oi(d.result.drive??[])||"–"))),d.test.actions&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},oi(d.test.actions)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},oi(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");x.append(_("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(_("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(_("span",{},`📺 ${p("web_learn_expected")}: `,_("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,_("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Ka(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Ka(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(_("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(_("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},d.test.expected.join(" | ")||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(_("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,_("code",{},b.lines.join(" | ")||"–")),_("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,_("code",{},mg((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));!d.passed&&!d.result.error&&Lb(d.result.outputs,d.test.expected)&&x.append(_("span",{class:"learn-error"},p("web_learn_missing_line_break"))),d.result.error&&x.append(_("span",{class:"learn-error"},n1(d.result.error))),d.result.missingInput&&x.append(_("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(_("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(_("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(_("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderCompetences(e){const t=_("aside",{class:"learn-competences"},_("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=_("ul",{});for(const a of e)n.append(Ve("li",{},je(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=_("div",{class:"learn-checklist-wrap"}),r=_("p",{class:"learn-rating-legend"});for(const l of a)r.append(_("span",{},`${l.icon} ${l.label}`));const o=_("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=be.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=Ve("span",{class:"learn-check-text"},je(l.text)),g=_("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=_("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,x(),!n)return;const I={...be.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],be.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),x=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),b.dataset.rating=d??""};g.append(...f);const b=_("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=_("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:be.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),b.append(I)}x(),o.append(b)}),s}renderQuiz(e,t,n){const a=_("div",{class:"learn-quiz"}),s=_("p",{class:"learn-score",role:"status"}),r=()=>n?be.lesson(n.id).quiz??{}:{},o=_("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,x)=>f.pairs?f.pairs.every((b,v)=>u[`${t}-${x}-${v}`]!==void 0):u[`${t}-${x}`]!==void 0,c=(f,x)=>{var b;return!!(f.pairs?f.pairs.every((v,w)=>_m(f)[u[`${t}-${x}-${w}`]]===f.pairs[w].right):(b=f.options[u[`${t}-${x}`]])!=null&&b.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=_("fieldset",{},Ve("legend",{},je(u.question))),h=Ve("p",{class:"learn-explanation"},je(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((x,b)=>{x.classList.toggle("right",f!==void 0&&u.options[b].correct),x.classList.toggle("wrong",f===b&&!u.options[b].correct),x.setAttribute("aria-pressed",String(f===b))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,x)=>{const b=Ve("button",{class:"learn-option"},je(f.text));b.addEventListener("click",()=>{n&&be.updateLesson(n.id,{quiz:{...r(),[c]:x}}),g(x),l()}),d.append(b)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=be.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],x=f===!0?"sun":f||void 0,b=h.step===void 0?[]:n.map((k,S)=>k.step===h.step?S:-1).filter(k=>k>=0),v=b.filter(k=>!a(k));let w="";x==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(k=>k+1).join(", ")):x&&x!=="sun"&&b.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=_("li",{class:w?"learn-review-deviation":""}),I=Ve("span",{class:"learn-check-text"},je(h.text));if(w&&I.append(_("br",{}),_("em",{},w)),z.append(I,_("span",{class:"learn-review-icon","aria-label":p(x?`web_learn_rating_${x}`:"web_learn_review_unrated")},x?s[x]:"–")),w&&x==="sun"&&h.step!==void 0){const k=h.step,S=_("button",{class:"link-button learn-check-link"},p("web_learn_review"));S.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:be.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,k)}),z.append(S)}o.push(z)})})),o.length&&e.append(_("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),_("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),_("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=_m(e),u=_("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?be.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=_("select",{class:"learn-match-select"});b.append(_("option",{value:""},"–")),l.forEach((w,z)=>b.append(_("option",{value:String(z)},w)));const v=Ve("label",{class:"learn-match-left"},je(x.left));return v.append(b),u.append(v),b}),f=()=>{const x=o.every((b,v)=>h(v)!==void 0);g.forEach((b,v)=>{const w=h(v);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[v].right),b.classList.toggle("wrong",x&&l[w]!==o[v].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const v={...c()};x.value===""?delete v[`${t}-${b}`]:v[`${t}-${b}`]=Number(x.value),d(v),f(),r()})),f(),u}}function _m(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function JE(i){const e=vg(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=_("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(_("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const RE=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,ur="visustruct.visubot";function mr(){try{return localStorage.getItem(ur)}catch{return null}}function xi(){const i=mr();return i==="1"||i==="kurs"?"on":"off"}const Zg=()=>mr()==="2";function Uo(){try{localStorage.setItem(ur,"2")}catch{}}const Lg=()=>mr()==="3";function Wg(){try{localStorage.setItem(ur,"3")}catch{}}const Eg=()=>mr()!==null;function es(i){try{localStorage.setItem(ur,i==="on"?"1":"0")}catch{}}const GE=`VisuBot`,Vn=()=>xi()!=="off",jm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Yo(){const i=Zg()?"object":Lg()?"flow":xi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
+${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=_("details",{class:"reference-group"});r.open=n.includes(s);const o=_("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){be.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}showLesson(e){wt.some(t=>t.id===e)&&this.openLesson(e)}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(_("p",{class:"hint"},p("web_learn_intro")));for(const e of JN()){this.body.append(_("h3",{class:"learn-section"},e.name));const t=_("ol",{class:"learn-list"});for(const n of e.lessons){const a=be.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=_("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},_("span",{class:"learn-num"},String(n.number)),_("span",{class:"learn-item-text"},_("strong",{},n.robot?`🤖 ${n.title}`:n.title),_("small",{},n.summary)),_("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(_("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=be.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=_("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=_("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(_("div",{class:"learn-lesson-head"},_("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),_("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),_("h2",{class:"learn-title"},_("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,_("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=_("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),Sm(this.body),vN(this.body),this.openNeededColumns(a.blocks),Im(this.body,Xa),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=_("div",{class:a}),r=_("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=_("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{be.updateLesson(e.id,{done:!0});const l=wt.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){be.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);EN(this.body)?(this.host.showEditor(),LN(this.body)&&this.host.reveal(["palette"])):WN(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),NN(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(_("p",{class:"hint"},p("web_learn_tasks_intro")));const e=_("ul",{class:"learn-list"});for(const t of An){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>be.exercise(o.id).done),s=wt.find(o=>o.number===t.after),r=_("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},_("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),_("span",{class:"learn-item-text"},_("strong",{},t.title),_("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),_("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(_("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=_("details",{class:"learn-teacher"},_("summary",{},p("web_learn_teacher")));if(hm()){e.setAttribute("open","");const s=_("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{cN(),this.render()}),e.append(_("p",{},p("web_learn_teacher_on")),s),e}const t=_("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=_("p",{class:"learn-result",role:"status"}),a=_("form",{class:"group"},t,_("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await mN(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(_("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=_("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=wt.find(a=>a.number===e.after);if(this.body.append(t,_("h2",{class:"learn-title"},e.title)),n){const a=_("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(_("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Sm(this.body),this.openNeededColumns(e.blocks),Im(this.body,Xa)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(Ve("div",{class:"learn-text"},_n(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return e.animated?this.renderAnimation(e.file,e.caption):this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return wN(e.game,fa);case"rescueGame":return TN(e.game,fa);case"caesar":return fN(e.key,e.text);case"cloze":return jN(e.cloze);case"pap":return BN(e.pap);case"textFile":return _g(e.name,e.content);case"robotModel":return bN(e.focus,e.view,e.spin);case"robotQuiz":return yN(e.tasks,e.done)}}renderBrag(e,t=!1){const n=_("aside",{class:"learn-brag"});n.append(_("img",{src:fa,alt:"",width:"48",height:"48"}));const a=_("div",{},_("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(Ve("div",{class:"learn-text"},_n(e))),n.append(a),n}renderGame(e){const n=_("section",{class:"learn-game"}),a=_("div",{class:"learn-game-head"});a.append(_("img",{src:fa,alt:"",width:"40",height:"40"}),_("strong",{},p("web_game_title")));const s=_("p",{class:"learn-game-status"}),r=_("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=H4(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=_("div",{class:"learn-game-values mono"});for(const[w,z]of V4(d))h.append(_("code",{},`${w} = ${z}`));const g=_("div",{class:"group learn-game-answers"}),f=_("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=_("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=_("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=x.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=_("div",{class:"learn-game-steps mono"});R4(d.condition,d.values).forEach((S,j)=>I.append(_("div",{},`${j?"→ ":""}${S}`)));const k=_("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(_("p",{},p(z?"web_game_right":"web_game_wrong")),I,k),k.focus()};f.addEventListener("click",()=>v(!0)),x.addEventListener("click",()=>v(!1)),r.replaceChildren(h,_("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=_("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(_("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),_("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=_("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(_("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=_("figure",{class:"learn-figure"}),a=_("div",{class:"learn-images"});for(const s of e){const r=pa(s);r&&a.append(_("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(Ve("figcaption",{},je(t))),n}renderGraphic(e,t,n){const a=_("figure",{class:"learn-figure"}),s=pa(e),r=n?pa(n):void 0;if(s&&r){const o=_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=_("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,_("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(Ve("figcaption",{},je(t))),a}renderAnimation(e,t){const n=_("figure",{class:"learn-figure"}),a=pa(e);if(!a)return n;const s=_("div",{class:"learn-graphic learn-animation"}),r=_("button",{class:"learn-replay",type:"button"},`↻ ${p("web_learn_replay")}`);let o=()=>{};return fetch(a).then(l=>l.text()).then(l=>{var d,h;s.innerHTML=l;const u=s.querySelector("svg"),m=(h=(d=u==null?void 0:u.getAttribute("class"))==null?void 0:d.match(/(\S+-)svg\b/))==null?void 0:h[1];if(!u||!m)return;if(o=()=>{u.classList.remove(`${m}play`),u.getBoundingClientRect(),u.classList.add(`${m}play`)},typeof IntersectionObserver>"u")return o();const c=new IntersectionObserver(g=>{g.some(f=>f.isIntersecting)&&(c.disconnect(),o())},{threshold:.6});c.observe(s)}).catch(()=>s.append(_("img",{src:a,alt:""}))),r.addEventListener("click",()=>o()),n.append(s,r),t&&n.append(Ve("figcaption",{},je(t))),n}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=_("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=ui(e),a=_("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(_("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(Ve("figcaption",{},je(t)));const r=_("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=_("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>be.exercise(e.id),a=_("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(_("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),VN(e),Ve("div",{class:"learn-text"},_n(e.task)));const s=_("div",{class:"learn-result",role:"status"}),r=_("div",{class:"learn-hints"}),o=_("div",{class:"group"}),l=_("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=Tm(e);if(c)try{d=Kl(c)}catch{}this.host.openExercise(e,d)});const u=_("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Ql)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=W4(c,e.tests,this.host.subprogramsFor(e.id),Ka),h=E4(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in T&&!h.has(T[b])),f=e.loopDepth!==void 0&&Ho(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(be.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=_("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(Ve("aside",{class:"lesson-note"},_n(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=_("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}be.resetExercise(e.id),this.host.resetExercise(e.id,Tm(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),hm()&&e.solution){const c=ui(e.solution);if(c){const d=_("details",{class:"learn-solution"},_("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(_("div",{class:"learn-preview",dir:"ltr"},h));const g=_("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=ui(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=ui(f),b=x&&this.host.preview(x);b&&d.append(_("div",{class:"learn-preview",dir:"ltr"},b))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(_("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(_("p",{},`✗ ${p("web_learn_missing_fmt",RN(T[d]))}`));s&&e.append(_("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=_("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([b,v])=>`mbot.${b}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],x=_("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},oi(d.test.drive)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},oi(d.result.drive??[])||"–"))),d.test.actions&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},oi(d.test.actions)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},oi(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");x.append(_("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(_("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(_("span",{},`📺 ${p("web_learn_expected")}: `,_("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,_("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Ka(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Ka(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(_("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(_("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&x.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},d.test.expected.join(" | ")||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(_("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,_("code",{},b.lines.join(" | ")||"–")),_("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,_("code",{},mg((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));!d.passed&&!d.result.error&&L4(d.result.outputs,d.test.expected)&&x.append(_("span",{class:"learn-error"},p("web_learn_missing_line_break"))),d.result.error&&x.append(_("span",{class:"learn-error"},n1(d.result.error))),d.result.missingInput&&x.append(_("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(_("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(_("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(_("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderCompetences(e){const t=_("aside",{class:"learn-competences"},_("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=_("ul",{});for(const a of e)n.append(Ve("li",{},je(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=_("div",{class:"learn-checklist-wrap"}),r=_("p",{class:"learn-rating-legend"});for(const l of a)r.append(_("span",{},`${l.icon} ${l.label}`));const o=_("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=be.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=Ve("span",{class:"learn-check-text"},je(l.text)),g=_("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=_("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,x(),!n)return;const I={...be.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],be.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),x=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),b.dataset.rating=d??""};g.append(...f);const b=_("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=_("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:be.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),b.append(I)}x(),o.append(b)}),s}renderQuiz(e,t,n){const a=_("div",{class:"learn-quiz"}),s=_("p",{class:"learn-score",role:"status"}),r=()=>n?be.lesson(n.id).quiz??{}:{},o=_("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,x)=>f.pairs?f.pairs.every((b,v)=>u[`${t}-${x}-${v}`]!==void 0):u[`${t}-${x}`]!==void 0,c=(f,x)=>{var b;return!!(f.pairs?f.pairs.every((v,w)=>_m(f)[u[`${t}-${x}-${w}`]]===f.pairs[w].right):(b=f.options[u[`${t}-${x}`]])!=null&&b.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=_("fieldset",{},Ve("legend",{},je(u.question))),h=Ve("p",{class:"learn-explanation"},je(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((x,b)=>{x.classList.toggle("right",f!==void 0&&u.options[b].correct),x.classList.toggle("wrong",f===b&&!u.options[b].correct),x.setAttribute("aria-pressed",String(f===b))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,x)=>{const b=Ve("button",{class:"learn-option"},je(f.text));b.addEventListener("click",()=>{n&&be.updateLesson(n.id,{quiz:{...r(),[c]:x}}),g(x),l()}),d.append(b)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=be.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],x=f===!0?"sun":f||void 0,b=h.step===void 0?[]:n.map((k,S)=>k.step===h.step?S:-1).filter(k=>k>=0),v=b.filter(k=>!a(k));let w="";x==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(k=>k+1).join(", ")):x&&x!=="sun"&&b.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=_("li",{class:w?"learn-review-deviation":""}),I=Ve("span",{class:"learn-check-text"},je(h.text));if(w&&I.append(_("br",{}),_("em",{},w)),z.append(I,_("span",{class:"learn-review-icon","aria-label":p(x?`web_learn_rating_${x}`:"web_learn_review_unrated")},x?s[x]:"–")),w&&x==="sun"&&h.step!==void 0){const k=h.step,S=_("button",{class:"link-button learn-check-link"},p("web_learn_review"));S.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:be.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,k)}),z.append(S)}o.push(z)})})),o.length&&e.append(_("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),_("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),_("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=_m(e),u=_("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?be.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=_("select",{class:"learn-match-select"});b.append(_("option",{value:""},"–")),l.forEach((w,z)=>b.append(_("option",{value:String(z)},w)));const v=Ve("label",{class:"learn-match-left"},je(x.left));return v.append(b),u.append(v),b}),f=()=>{const x=o.every((b,v)=>h(v)!==void 0);g.forEach((b,v)=>{const w=h(v);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[v].right),b.classList.toggle("wrong",x&&l[w]!==o[v].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const v={...c()};x.value===""?delete v[`${t}-${b}`]:v[`${t}-${b}`]=Number(x.value),d(v),f(),r()})),f(),u}}function _m(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function VN(i){const e=vg(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=_("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(_("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const qN=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,ur="visustruct.visubot";function mr(){try{return localStorage.getItem(ur)}catch{return null}}function xi(){const i=mr();return i==="1"||i==="kurs"?"on":"off"}const Zg=()=>mr()==="2";function Qo(){try{localStorage.setItem(ur,"2")}catch{}}const Lg=()=>mr()==="3";function Wg(){try{localStorage.setItem(ur,"3")}catch{}}const Eg=()=>mr()!==null;function es(i){try{localStorage.setItem(ur,i==="on"?"1":"0")}catch{}}const UN=`VisuBot`,Vn=()=>xi()!=="off",jm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Yo(){const i=Zg()?"object":Lg()?"flow":xi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
${e("off","VisuStruct")}${e("on","VisuBot")}${e("object","VisuObject")}${e("flow","VisuFlow")}
- ${jm(p(t))}`}class HE{constructor(e=Oi){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new Ss(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${VE()}${QE()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=xe.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=K(async()=>{const{Robot3D:e}=await import("./robot3d-C6eyLYBE.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??Oi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new Ss(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;xe.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>xe.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&xe.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!xe.connected)break;const t=e.dataset.sensor,n=await xe.ask(At[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof At[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return xe.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await xe.ask(At[a].python);typeof At[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof At[a].simulated=="string"?n[a]=typeof s=="string"?s:String(At[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){xe.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=Fg(),this.liveStatus.classList.toggle("connected",xe.connected),this.check.hidden=!xe.connected,xe.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(v0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&xe.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let K1;function Ng(i,e){try{K1??(K1=new AudioContext);const t=K1.createOscillator(),n=K1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(K1.destination);const a=K1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function VE(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} + ${jm(p(t))}`}class QN{constructor(e=Oi){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new Ss(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${YN()}${$N()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=xe.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=K(async()=>{const{Robot3D:e}=await import("./robot3d-DEkrf1Uk.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??Oi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new Ss(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;xe.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>xe.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&xe.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!xe.connected)break;const t=e.dataset.sensor,n=await xe.ask(At[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof At[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return xe.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await xe.ask(At[a].python);typeof At[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof At[a].simulated=="string"?n[a]=typeof s=="string"?s:String(At[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){xe.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=Fg(),this.liveStatus.classList.toggle("connected",xe.connected),this.check.hidden=!xe.connected,xe.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(v0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&xe.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let K1;function Ng(i,e){try{K1??(K1=new AudioContext);const t=K1.createOscillator(),n=K1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(K1.destination);const a=K1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function YN(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")}

${p("web_visubot_controls_hint")}

${i("getBrightness","web_visubot_sensor_brightness",0,100,50)} ${i("getLoudness","web_visubot_sensor_loudness",0,100,0)} @@ -70744,7 +74090,7 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis ${e("isJoystickLeft","←","web_visubot_sensor_joy_left")}${e("isJoystickRight","→","web_visubot_sensor_joy_right")} ${e("isShaken",`〰 ${p("web_visubot_shake")}`,"web_visubot_sensor_shake")}
- `}function QE(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=Jg.map(a=>`${p(a.key)}…`).join("");return``}function $N(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=Jg.map(a=>`${p(a.key)}…`).join("");return``}function Fg(){return xe.connecting?p("web_visubot_connecting"):xe.connected?`✓ ${p("web_visubot_connected")}`:xe.error?`⚠︎ ${p("web_visubot_link_error")}: ${xe.error}`:""}async function qE(){if(xe.connected||xe.connecting)return xe.disconnect();try{await xe.connect()}catch(i){await xe.disconnect(i.name==="NotFoundError"?void 0:i.message)}}const ht=i=>()=>Ce(T.anweisung,{textLines:[i]}),UE=[{key:"web_visubot_el_forward",group:"drive",type:T.anweisung,make:ht("mbot.forward()")},{key:"web_visubot_el_backward",group:"drive",type:T.anweisung,make:ht("mbot.backward()")},{key:"web_visubot_el_right",group:"drive",type:T.anweisung,make:ht("mbot.turnRight()")},{key:"web_visubot_el_left",group:"drive",type:T.anweisung,make:ht("mbot.turnLeft()")},{key:"web_visubot_el_drive",group:"wheels",type:T.anweisung,make:ht("mbot.drive(30, 30)")},{key:"web_visubot_el_stop",group:"wheels",type:T.anweisung,make:ht("mbot.stop()")},{key:"web_visubot_el_led",group:"leds",type:T.anweisung,make:ht("mbot.setLed(255, 0, 0)")},{key:"web_visubot_el_led_off",group:"leds",type:T.anweisung,make:ht("mbot.ledOff()")},{key:"web_visubot_el_led_color",group:"leds",type:T.anweisung,make:ht('mbot.led(0).setColor("grün")')},{key:"web_visubot_el_tone",group:"sound",type:T.anweisung,make:ht("mbot.playTone(440, 300)")},{key:"web_visubot_el_text",group:"screen",type:T.anweisung,make:ht('mbot.showText("Hallo")')},{key:"web_visubot_el_emotion",group:"emotion",type:T.anweisung,make:ht('mbot.emotion("smile")')},{key:"web_visubot_el_wait",group:"wait",type:T.anweisung,make:ht("mbot.pause(100)")},{key:"web_visubot_el_timer",group:"wait",type:T.anweisung,make:ht("mbot.resetTimer()")}];function Cm(i){return{drive:"fahren",wheels:"fahren",leds:"licht",sound:"ton",screen:"anzeige",emotion:"anzeige",wait:"warten"}[i]??"sensor"}const YE={drive:"🚗",wheels:"⚙️",leds:"💡",sound:"🔊",screen:"🖥️",emotion:"😊",wait:"⏱️",distance:"📏",line:"➖",color:"🎨",buttons:"🕹️",light:"🔆",tilt:"📐",timer:"🔋"},Jg=[{key:"web_visubot_sensor_distance",group:"distance",text:"mbot.getDistance()"},{key:"web_visubot_sensor_line",group:"line",text:"mbot.getLine()"},{key:"web_visubot_sensor_line_left",group:"line",text:"mbot.isLineLeft()"},{key:"web_visubot_sensor_line_right",group:"line",text:"mbot.isLineRight()"},{key:"web_visubot_sensor_color",group:"color",get text(){return`mbot.getColor().equals("${Oh("red")}")`}},{key:"web_visubot_sensor_button_a",group:"buttons",text:"mbot.isButtonA()"},{key:"web_visubot_sensor_button_b",group:"buttons",text:"mbot.isButtonB()"},{key:"web_visubot_sensor_joy_up",group:"buttons",text:"mbot.isJoystickUp()"},{key:"web_visubot_sensor_joy_down",group:"buttons",text:"mbot.isJoystickDown()"},{key:"web_visubot_sensor_joy_left",group:"buttons",text:"mbot.isJoystickLeft()"},{key:"web_visubot_sensor_joy_right",group:"buttons",text:"mbot.isJoystickRight()"},{key:"web_visubot_sensor_brightness",group:"light",text:"mbot.getBrightness()"},{key:"web_visubot_sensor_loudness",group:"light",text:"mbot.getLoudness()"},{key:"web_visubot_sensor_pitch",group:"tilt",text:"mbot.getPitch()"},{key:"web_visubot_sensor_roll",group:"tilt",text:"mbot.getRoll()"},{key:"web_visubot_sensor_shake",group:"tilt",text:"mbot.isShaken()"},{key:"web_visubot_sensor_timer",group:"timer",text:"mbot.getTimer()"},{key:"web_visubot_sensor_battery",group:"timer",text:"mbot.getBattery()"}],ba=()=>typeof window.showDirectoryPicker=="function";class cr{constructor(e){this.handle=e}get name(){return this.handle.name}async list(){const e=[];for await(const t of this.handle.values())t.name.startsWith(".")||e.push({kind:t.kind,name:t.name});return e}async dir(e,t=!1){return new cr(await this.handle.getDirectoryHandle(e,{create:t}))}async read(e){return(await(await this.handle.getFileHandle(e)).getFile()).text()}async write(e,t){const a=await(await this.handle.getFileHandle(e,{create:!0})).createWritable();await a.write(t),await a.close()}async has(e){try{return await this.handle.getFileHandle(e),!0}catch{try{return await this.handle.getDirectoryHandle(e),!0}catch{return!1}}}async remove(e){await this.handle.removeEntry(e,{recursive:!0})}}const $E="visustruct-workspace";function XE(){return new Promise((i,e)=>{const t=indexedDB.open($E,1);t.onupgradeneeded=()=>{t.result.createObjectStore("files"),t.result.createObjectStore("meta")},t.onsuccess=()=>i(t.result),t.onerror=()=>e(t.error)})}async function jt(i,e,t){const n=await XE();return new Promise((a,s)=>{const r=t(n.transaction(i,e).objectStore(i));r.onsuccess=()=>a(r.result),r.onerror=()=>s(r.error)})}class S0{constructor(e,t){this.name=e,this.path=t}key(e){return this.path+e}async list(){const e=await jt("files","readonly",n=>n.getAllKeys()),t=new Map;for(const n of e){if(!n.startsWith(this.path)||n===this.path)continue;const a=n.slice(this.path.length),s=a.indexOf("/"),r=s<0?a:a.slice(0,s);t.has(r)||t.set(r,{kind:s<0?"file":"directory",name:r})}return[...t.values()]}async dir(e,t=!1){const n=this.key(e)+"/";if(!(await jt("files","readonly",s=>s.count(n))>0)){if(!t)throw new DOMException(e,"NotFoundError");await jt("files","readwrite",s=>s.put("",n))}return new S0(e,n)}async read(e){const t=await jt("files","readonly",n=>n.get(this.key(e)));if(typeof t!="string")throw new DOMException(e,"NotFoundError");return t}async write(e,t){await jt("files","readwrite",n=>n.put(t,this.key(e)))}async has(e){const t=await jt("files","readonly",a=>a.count(this.key(e))),n=await jt("files","readonly",a=>a.count(this.key(e)+"/"));return t+n>0}async remove(e){const t=this.key(e);await jt("files","readwrite",n=>n.delete(t)),await jt("files","readwrite",n=>n.delete(IDBKeyRange.bound(t+"/",t+"/￿")))}}async function KE(i,e="folder"){const t=await window.showDirectoryPicker({id:e==="folder"?"visustruct-workspace":e,mode:"readwrite"}),n=i&&t.name!==i?await t.getDirectoryHandle(i,{create:!0}):t;return await jt("meta","readwrite",a=>a.put(n,e)),{kind:"folder",root:new cr(n)}}function Am(){return{kind:"browser",root:new S0("VisuStruct","")}}async function eN(i="folder"){var e;try{const t=await jt("meta","readonly",a=>a.get(i));if(!t)return;const n=await((e=t.queryPermission)==null?void 0:e.call(t,{mode:"readwrite"}))??"granted";return{handle:t,ready:n==="granted"}}catch{return}}async function Pm(i){var t;return(await((t=i.requestPermission)==null?void 0:t.call(i,{mode:"readwrite"}))??"granted")==="granted"?{kind:"folder",root:new cr(i)}:void 0}async function tN(i="folder"){try{await jt("meta","readwrite",e=>e.delete(i))}catch{}}const va="learnProgress.json",ya="lernstand.json",wa="visustruct.files.mode",Om="visustruct.files.expanded";function nN(i){try{const e=JSON.parse(Rg(i)??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}function Rg(i){try{return localStorage.getItem(i)}catch{return null}}function za(i,e){try{e===null?localStorage.removeItem(i):localStorage.setItem(i,e)}catch{}}const te=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Mm(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=(i.choices??[]).map(o=>``).join("");t.innerHTML=``;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class iN{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(nN(Om)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),be.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){za(Om,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=` + `;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class oF{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(rF(Om)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),be.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){za(Om,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=`

${te(p("web_files_title"))}

@@ -70768,7 +74114,7 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis
- `,this.body=this.element.querySelector(".files-body");const e=(t,n)=>this.element.querySelector(`[data-files=${t}]`).addEventListener("click",n);e("hide",()=>this.host.hide()),e("new-folder",()=>void this.newFolder()),e("switch",()=>void this.switchWorkspace()),this.body.addEventListener("click",t=>void this.onTreeClick(t)),this.render()}async restore(){if(Rg(wa)==="browser")this.workspace=Am();else if(ba()){const e=await eN();e!=null&&e.ready?this.workspace=await Pm(e.handle):this.pending=e==null?void 0:e.handle}await this.render(),this.workspace||this.startDialog()}async startDialog(){var r;const e=p("web_learn_start_folder"),t=(o,l,u=!1,m)=>`${m?`

${te(m)}

`:""}`,n=ba()?[this.pending?t("reconnect",`${oe.open} ${te(p("web_learn_start_continue_fmt",this.pending.name))}`,!0):"",t("pick",`${oe.open} ${te(p("web_learn_start_open"))}`,!this.pending),t("create",`${oe.newFolder} ${te(p("web_learn_start_create_fmt",e))}`,!1,p("web_learn_start_create_hint"))]:[t("browser",te(p("web_files_browser")),!0,p("web_files_browser_hint"))],a=document.createElement("div");a.className="confirm",a.innerHTML=` @@ -315,7 +315,7 @@ public String toString() { `,"in"),this.consolePane().input.hidden=!0,t.vm.input(e),this.debugRun())}debugError(e){var o;const t=e.pos?String(e.pos.line+1):"",s=((o=e.pos)==null?void 0:o.file.split("/").pop())??"",i=e.detail.replace(/^expected:/,""),n={syntax:"web_visuobject_dbg_err_syntax",symbol:"web_visuobject_dbg_err_symbol",unsupported:"web_visuobject_dbg_err_unsupported",nomain:"web_visuobject_no_main",type:"web_visuobject_dbg_err_type",import:"web_visuobject_dbg_err_import",typename:"web_visuobject_dbg_err_typename"}[e.code];e.pos&&this.showLine(e.pos.file,e.pos.line),this.stopDebug(),this.debugStatus(d(n,s,t,i),!0)}showDebugButtons(){const e=this.dbg,t=(e==null?void 0:e.state)==="paused";for(const s of this.shell.querySelectorAll("[data-dbg]"))s.disabled=!e||(s.dataset.dbg==="pause"?e.state!=="running":!t)}showLine(e,t){this.project.files.some(s=>s.path===e)&&e!==this.active&&this.openFile(e),this.editor.setMarks({placeholders:[],problems:[],current:t},!0)}showDebugState(){const e=this.dbg;if(!e)return;e.frames=e.vm.stack();const t=e.vm.heap(),s=e.frames[e.frame];s&&this.showLine(s.pos.file,s.pos.line);const i=e.values.size===0&&e.vars.size===0,n=new Set,o=new Map;for(const h of t)for(const u of h.fields){const f=`dbg${h.id}.${u.name}`;o.set(f,u.value),!i&&e.values.get(f)!==u.value&&n.add(f)}e.values=o;const r=new Set,c=new Map;e.frames.forEach((h,u)=>{for(const f of h.vars){const m=`${e.frames.length-u}|${h.title}|${f.name}`;c.set(m,f.value),!i&&e.vars.get(m)!==f.value&&r.add(`${h.title}|${f.name}`)}}),e.vars=c;const l={objects:this.liveObjects(t),changed:n,frames:e.frames,frame:e.frame,changedVars:r,onFrame:h=>{e.frame=h,l.frame=h;const u=e.frames[h];u&&this.showLine(u.pos.file,u.pos.line),this.objectDiagram.renderInspector()},move:(h,u)=>e.places.set(h,u)};this.objectDiagram.live=l,this.sequence=e.vm.sequence(),this.diagramMode==="object"&&this.objectDiagram.render(),this.diagramMode==="sequence"&&this.renderSequence()}renderSequence(){var n,o,r;const e=this.shell.querySelector(".vo-seqcanvas"),t=e.querySelector(".vo-seq"),s=e.querySelector(".vo-empty"),i=this.sequence;if(s.hidden=!!i&&i.events.length>0,s.textContent=d(i?"web_visuobject_seq_no_calls":"web_visuobject_seq_empty"),!i||!i.events.length)t.innerHTML="",t.setAttribute("width","0");else{const c=((n=this.dbg)==null?void 0:n.state)==="paused"||((o=this.dbg)==null?void 0:o.state)==="input",{svg:l,width:h,height:u}=Ai(i,c?i.events.length-1:void 0);t.innerHTML=l+(i.truncated?`${b(d("web_visuobject_seq_truncated"))}`:""),t.setAttribute("width",String(h)),t.setAttribute("height",String(u)),c&&((r=t.querySelector(".vo-seq-msg.current"))==null||r.scrollIntoView({block:"nearest",inline:"nearest"}))}this.renderSequenceInspector()}renderSequenceInspector(){if(this.objectDiagram.live)return this.objectDiagram.renderInspector();this.inspector.innerHTML=`

${b(d("web_visuobject_seq_hint"))}

`}liveObjects(e){const t=this.dbg,s=this.project.objects??[],i=c=>40+c.fields.length*20,n=[],o=[],r=[];for(const c of e){const l=`dbg${c.id}`,h=t.places.get(l)??s.find(u=>u.name===c.name&&u.cls===c.cls);if(!h){r.push(c);continue}t.places.set(l,{x:h.x,y:h.y}),n.push({x:h.x,y:h.y,w:260,h:i(c)})}for(const c of r){const l=i(c);let h={x:24,y:24};e:for(let u=24;u<6e3;u+=30)for(let f=24;f<=24+3*320;f+=320)if(n.every(m=>f+260+30<=m.x||m.x+m.w+30<=f||u+l+30<=m.y||m.y+m.h+30<=u)){h={x:f,y:u};break e}t.places.set(`dbg${c.id}`,h),n.push({...h,w:260,h:l})}for(const c of e){const l=`dbg${c.id}`;o.push({id:l,name:c.name,cls:c.cls,...t.places.get(l),values:Object.fromEntries(c.fields.map(h=>[h.name,h.value]))})}return o}stopDebug(e,t=!1){const s=this.dbg;s&&clearTimeout(s.timer),this.dbg=void 0,s&&(this.sequence=s.vm.sequence()),this.objectDiagram.live=void 0,this.consolePane().input.hidden=!0,this.shell.querySelector(".vo-dbg-controls").hidden=!0,this.shell.querySelector("[data-action=stop]").disabled=!0,this.shell.querySelector("[data-action=run]").disabled=!1,t||this.editor.setMarks({placeholders:[],problems:[]},!1),e&&this.debugStatus(d(e),t),this.diagramMode==="object"&&this.objectDiagram.render(),this.diagramMode==="sequence"&&this.renderSequence()}chooseWorld(e){if(e!=="object"){if(e==="flow"){Us(),location.href=`${location.pathname}?visuflow${location.hash}`;return}Js(e),location.href=`${location.pathname}?${e==="on"?"visubot":"visustruct"}${location.hash}`}}get activeFile(){return this.project.files.find(e=>e.path===this.active)}showActive(){const e=this.activeFile;this.editor.setText((e==null?void 0:e.text)??""),this.editor.setBreakpoints(e?this.breakpoints.get(e.path)??[]:[]),this.editor.setReadOnly(!e),e&&!this.openTabs.includes(e.path)&&this.openTabs.push(e.path),this.renderTabs(),J(ot,this.active??"")}renderTabs(){if(this.openTabs=this.openTabs.filter(e=>this.project.files.some(t=>t.path===e)),J(cs,JSON.stringify(this.openTabs)),this.openTabs.length===0){this.tabs.innerHTML=`${b(d("web_visuobject_no_file"))}`;return}this.tabs.innerHTML=this.openTabs.map(e=>{const t=e===this.active,s=this.isDirty(e);return`
-
`}).join("")}onTabClick(e){var i;const t=e.target,s=(i=t.closest("[data-tab]"))==null?void 0:i.dataset.tab;if(s){if(t.closest("[data-close]"))return this.closeTab(s);this.treeSelection=`file:${s}`,this.openFile(s)}}closeTab(e){const t=this.openTabs.indexOf(e);t<0||(this.openTabs.splice(t,1),e===this.active?(this.active=this.openTabs[Math.min(t,this.openTabs.length-1)],this.lastTyping=0,this.showActive(),this.refresh()):this.renderTabs())}snapshot(){return JSON.stringify({project:this.project,active:this.active})}remember(){this.history.push(this.snapshot()),this.history.length>jn&&this.history.shift(),this.future=[]}setProject(e,t=this.active){var s;this.remember(),this.lastTyping=0,this.project=e,this.active=e.files.some(i=>i.path===t)?t:(s=e.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}openFile(e){if(e===this.active)return;this.active=e,this.lastTyping=0,this.showActive();const t=D(e);this.currentPackage=t,this.open.set(`pkg:${t}`,!0),this.refresh()}typed(){const e=this.activeFile;if(!e)return;const t=Date.now();t-this.lastTyping>1500&&this.remember(),this.lastTyping=t,this.project=$e(this.project,e.path,this.editor.text),this.saveBreakpoints(),this.dbg&&this.stopDebug("web_visuobject_dbg_code_changed"),this.refresh(),clearTimeout(this.renameTimer),this.renameTimer=window.setTimeout(()=>this.syncFileName(),700)}syncFileName(){var c;const e=this.activeFile;if(!e||this.editing)return;const t=Q(e.path).replace(/\.java$/i,""),s=this.classes.filter(l=>l.path===e.path);if(s.length===0||s.some(l=>l.name===t))return;const i=((c=/\bpublic\s+(?:abstract\s+|final\s+)*(?:class|interface|enum)\s+(\w+)/.exec(e.text))==null?void 0:c[1])??s[0].name;if(!pe.test(i)||s.filter(l=>l.name===i).length!==1)return;const n=le(D(e.path),`${i}.java`);if(this.project.files.some(l=>l.path===n))return;let o=Oe(this.project,e.path,n);const r=this.positions.get(t);r&&!this.positions.has(i)&&this.positions.set(i,r);for(const l of Object.keys(o.uml??{}))l.startsWith(`${t}.`)&&(o={...o,uml:ke(o.uml,l,i+l.slice(t.length))});this.openTabs=this.openTabs.map(l=>l===e.path?n:l),this.treeSelection===`file:${e.path}`&&(this.treeSelection=`file:${n}`),this.isOpen(`file:${e.path}`)&&this.open.set(`file:${n}`,!0),this.project=o,this.active=n,J(ot,n),this.savePositions(),this.refresh()}undo(e){const t=e?this.future:this.history,s=e?this.history:this.future,i=t.pop();if(i===void 0)return;s.push(this.snapshot());const n=JSON.parse(i);this.project=n.project,this.active=n.active,this.lastTyping=0,this.showActive(),this.refresh()}refresh(){J(os,Pe(this.project)),this.renderTabs(),this.classes=Ct(this.project),this.selection&&!this.findClass(this.selection.cls)&&(this.selection=void 0),this.relSelection&&!this.findRelation(this.relSelection)&&!this.findDependency(this.relSelection)&&(this.relSelection=void 0),this.editing||(this.render(),this.renderTree())}ownTypesAt(e){const t=this.activeFile;if(!t)return;const s=this.editor.view.state.doc.toString(),i=X(D(t.path)),n=oe(s).map(l=>({...l,pkg:i})),o=new Set(n.map(l=>l.name)),r=n.find(l=>l.headerFrom<=e&&e<=l.bodyEnd),c=ct()==="de"?"de":ct()==="pt-PT"?"pt":"en";return Ki([...n,...this.classes.filter(l=>l.path!==t.path&&!o.has(l.name))],{cls:r==null?void 0:r.name,pkg:i},c)}findClass(e){return this.classes.find(t=>t.name===e)}caretMoved(){var n,o;const e=this.editor.caret,t=this.classes.find(r=>r.path===this.active&&e>=r.from&&e<=r.to),s=t==null?void 0:t.members.findIndex(r=>e>=r.from&&e<=r.to),i=t?{cls:t.name,member:s!==void 0&&s>=0?s:void 0}:void 0;(i==null?void 0:i.cls)===((n=this.selection)==null?void 0:n.cls)&&(i==null?void 0:i.member)===((o=this.selection)==null?void 0:o.member)||(this.selection=i,this.editing||(this.render(),this.renderTree()))}showInCode(e,t){e.path!==this.active&&(this.active=e.path,this.lastTyping=0,this.showActive());const s=this.editor.view,[i,n]=t?[t.headerFrom,t.headerTo]:[e.nameFrom,e.nameTo],o=Math.min(n,s.state.doc.length);s.dispatch({selection:{anchor:Math.min(i,o),head:o},scrollIntoView:!0})}message(e,t=!1){this.status.textContent=e,this.status.classList.toggle("hint",t)}openFiles(){const e=document.createElement("input");e.type="file",e.multiple=!0,e.accept=".zip,.java,.visuobject,application/zip,text/plain",e.addEventListener("change",()=>void this.readFiles([...e.files??[]])),e.click()}async readFiles(e){var t;if(e.length!==0)try{const s=e.find(r=>/\.zip$/i.test(r.name));if(s){const{projectFromZip:r}=await wt(async()=>{const{projectFromZip:l}=await import("./projectZip-CTDq_c8B.js");return{projectFromZip:l}},__vite__mapDeps([0,1,2]),import.meta.url),c=r(new Uint8Array(await s.arrayBuffer()),s.name.replace(/\.zip$/i,""));await this.newProject(c);return}const i=e.find(r=>/\.visuobject$/i.test(r.name));if(i){const r=qt(await i.text());if(!r)throw new Error("format");await this.newProject(r);return}const n=At(this.project.name,await Promise.all(e.map(async r=>({name:r.name,text:await r.text()}))));let o=this.project;for(const r of n.files)o=et(o,r.path,r.text);this.setProject(o,(t=n.files[0])==null?void 0:t.path)}catch{this.message(d("web_visuobject_open_failed"))}}async save(){this.workspace?await this.writeCurrent():await this.downloadZip()}async downloadZip(){const{projectToZip:e}=await wt(async()=>{const{projectToZip:s}=await import("./projectZip-CTDq_c8B.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);Ln(`${this.project.name||"Projekt"}.zip`,t.slice().buffer,"application/zip")}isDirty(e){var t;return!this.workspace||this.saved===void 0?!1:e===void 0?this.saved!==Pe(this.project):this.savedFiles.get(e)!==((t=this.project.files.find(s=>s.path===e))==null?void 0:t.text)}markSaved(){this.saved=Pe(this.project),this.savedFiles=new Map(this.project.files.map(e=>[e.path,e.text]))}async restoreWorkspace(){if(!$t())return;const e=await Ks(us);if(e!=null&&e.ready){const t=await _t(e.handle);if(t)return this.useWorkspace(t.root,!0)}this.pendingFolder=e==null?void 0:e.handle,this.renderWorkspace()}async useWorkspace(e,t=!1){var s;this.workspace=e,this.pendingFolder=void 0,J(rt,"0");try{this.projects=await is(e);const i=se(We),n=this.project;if(t&&i&&this.projects.includes(i)){const o={active:this.active,tabs:[...this.openTabs],positions:new Map(this.positions)};await this.loadProject(i),this.positions=o.positions,this.savePositions(),Pe(n)!==this.saved&&(this.project=n),this.openTabs=o.tabs.filter(r=>this.project.files.some(c=>c.path===r)),this.active=this.project.files.some(r=>r.path===o.active)?o.active:(s=this.project.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}else!this.projects.some(o=>o.toLowerCase()===ge(n.name).toLowerCase())&&n.files.length?(this.folder=ge(n.name),await this.writeCurrent(!1)):this.projects.length?await this.loadProject(this.projects.includes(i??"")?i:this.projects[0]):(this.folder=ge(n.name),await this.writeCurrent(!1))}catch(i){this.message(d("web_visuobject_ws_failed",String((i==null?void 0:i.message)??i)))}this.renderWorkspace(),this.refresh()}async loadProject(e){var i;const{project:t,positions:s}=await wn(this.workspace,e);this.folder=e,this.project=t,this.markSaved(),this.message(""),this.history=[],this.future=[],this.lastTyping=0,this.selection=void 0,this.relSelection=void 0,this.treeSelection=void 0,this.currentPackage=void 0,this.positions=new Map(Object.entries(s)),this.savePositions(),this.openTabs=[],this.active=(i=t.files[0])==null?void 0:i.path,J(We,e),this.showActive(),this.refresh()}async writeCurrent(e=!0){const t=this.workspace;if(!t)return!1;const s=ge(this.project.name),i=this.folder,n=new Set(this.classes.map(r=>r.name)),o=Object.fromEntries([...this.positions].filter(([r])=>n.has(r)));if(s!==i&&this.projects.some(r=>r!==i&&r.toLowerCase()===s.toLowerCase()))return this.message(d("web_visuobject_ws_taken",this.project.name)),!1;try{return await xn(t,s,this.project,o),i&&i!==s&&this.projects.includes(i)&&await t.remove(i),this.folder=s,this.projects=await is(t),J(We,s),this.markSaved(),e&&this.message(d("web_visuobject_ws_saved",t.name,s),!0),this.refresh(),!0}catch(r){return this.message(d("web_visuobject_ws_failed",String((r==null?void 0:r.message)??r))),!1}}async switchProject(e){if(!(!this.workspace||e===this.folder)&&!(this.isDirty()&&!await this.writeCurrent(!1)))try{await this.loadProject(e)}catch(t){this.message(d("web_visuobject_ws_failed",String((t==null?void 0:t.message)??t)))}}async newProject(e,t,s=!1){var n,o;if(!this.workspace){this.setProject(e,t??((n=e.files[0])==null?void 0:n.path)),e.files.length===0&&!s&&this.editProjectName();return}if(this.isDirty()&&!await this.writeCurrent(!1))return;const i=ns(ge(e.name),this.projects);this.project={...e,name:i},this.folder=i,this.history=[],this.future=[],this.openTabs=[],this.positions.clear(),this.savePositions(),this.active=e.files.some(r=>r.path===t)?t:(o=e.files[0])==null?void 0:o.path,this.showActive(),this.refresh(),await this.writeCurrent(!1)&&(this.message(d("web_visuobject_ws_created",i),!0),e.files.length===0&&!s&&this.editProjectName())}get currentPlace(){const e=this.currentPackage??(this.active?D(this.active):ce(this.project)[0]??"");return{root:U(e),pkg:X(e)}}async newFromWizard(e){var u;const t=this.currentPlace,s=(f,m)=>{let g=f;for(let _=2;m(g);_++)g=f+_;return g},i=await an(e,{roots:ue(this.project),packagesIn:f=>ce(this.project,f).map(X),classes:this.classes,root:t.root,pkg:t.pkg,suggest:f=>f==="project"?ns(d("web_visuobject_project_name"),this.workspace?[...this.projects,this.folder??""]:[]):f==="folder"?s("test",m=>ue(this.project).includes(m)):f==="package"?s(d("web_visuobject_new_package_name"),m=>ce(this.project).includes(re(t.root,m))):this.uniqueClassName(d(f==="class"?"web_visuobject_new_class_name":"web_visuobject_new_interface_name")),check:(f,m,g,_)=>{if(!m)return d("web_visuobject_new_name_missing");if(f==="project")return this.workspace&&this.projects.some(y=>y!==this.folder&&y.toLowerCase()===ge(m).toLowerCase())?d("web_visuobject_ws_taken",m):void 0;if(f==="folder")return!Je(m)||ue(this.project).includes(m)?d("web_visuobject_bad_folder",m):void 0;if(f==="package")return!Mt(m)||ce(this.project).includes(re(g,m))?d("web_visuobject_bad_package",m):void 0;if(!pe.test(m))return d("web_visuobject_bad_name",m);if(this.findClass(m)||this.project.files.some(y=>y.path===le(re(g,_),`${m}.java`)))return d("web_visuobject_new_exists",m);if(m.charAt(0)!==m.charAt(0).toUpperCase())return d("web_visuobject_new_upper")}});if(!i)return;const{name:n,root:o,pkg:r}=i;if(e==="project")return this.newProject({name:n,files:[],packages:[]},void 0,!0);if(this.message(""),e==="folder")return this.currentPackage=re(n,""),this.treeSelection=`root:${n}`,this.open.set(`root:${n}`,!0),this.setProject(vi(this.project,n));if(e==="package"){const f=re(o,n);return this.currentPackage=f,this.treeSelection=`pkg:${f}`,this.open.set(`root:${o}`,!0),this.setProject(mi(this.project,f))}const c=re(o,r),l=le(c,`${n}.java`);this.currentPackage=c,this.selection={cls:n},this.open.set(`root:${o}`,!0),this.open.set(`pkg:${c}`,!0),this.setProject(et(this.project,l,this.sectioned(nn(i.options),n)),l);const h=this.findClass(n);h&&this.showInCode(h),(u=this.canvas.querySelector(`.uml-class[data-class="${CSS.escape(n)}"]`))==null||u.scrollIntoView({block:"nearest",inline:"nearest"})}editProjectName(){this.treeSelection="project",this.renderTree(),this.startEditing(this.tree.querySelector('[data-node="project"] > .vo-row .vo-label'))}renderWorkspace(){const e=this.wsBox;e.hidden=!$t();const t=this.shell.querySelector("[data-action=save]");if(t.dataset.tip=d(this.workspace?"web_visuobject_save_ws_tip":"web_visuobject_save_tip"),e.hidden)return;const s=(i,n,o="text-button",r)=>``;this.workspace?(e.className="vo-ws",e.innerHTML=`${b(this.workspace.name)} + `}).join("")}onTabClick(e){var i;const t=e.target,s=(i=t.closest("[data-tab]"))==null?void 0:i.dataset.tab;if(s){if(t.closest("[data-close]"))return this.closeTab(s);this.treeSelection=`file:${s}`,this.openFile(s)}}closeTab(e){const t=this.openTabs.indexOf(e);t<0||(this.openTabs.splice(t,1),e===this.active?(this.active=this.openTabs[Math.min(t,this.openTabs.length-1)],this.lastTyping=0,this.showActive(),this.refresh()):this.renderTabs())}snapshot(){return JSON.stringify({project:this.project,active:this.active})}remember(){this.history.push(this.snapshot()),this.history.length>jn&&this.history.shift(),this.future=[]}setProject(e,t=this.active){var s;this.remember(),this.lastTyping=0,this.project=e,this.active=e.files.some(i=>i.path===t)?t:(s=e.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}openFile(e){if(e===this.active)return;this.active=e,this.lastTyping=0,this.showActive();const t=D(e);this.currentPackage=t,this.open.set(`pkg:${t}`,!0),this.refresh()}typed(){const e=this.activeFile;if(!e)return;const t=Date.now();t-this.lastTyping>1500&&this.remember(),this.lastTyping=t,this.project=$e(this.project,e.path,this.editor.text),this.saveBreakpoints(),this.dbg&&this.stopDebug("web_visuobject_dbg_code_changed"),this.refresh(),clearTimeout(this.renameTimer),this.renameTimer=window.setTimeout(()=>this.syncFileName(),700)}syncFileName(){var c;const e=this.activeFile;if(!e||this.editing)return;const t=Q(e.path).replace(/\.java$/i,""),s=this.classes.filter(l=>l.path===e.path);if(s.length===0||s.some(l=>l.name===t))return;const i=((c=/\bpublic\s+(?:abstract\s+|final\s+)*(?:class|interface|enum)\s+(\w+)/.exec(e.text))==null?void 0:c[1])??s[0].name;if(!pe.test(i)||s.filter(l=>l.name===i).length!==1)return;const n=le(D(e.path),`${i}.java`);if(this.project.files.some(l=>l.path===n))return;let o=Oe(this.project,e.path,n);const r=this.positions.get(t);r&&!this.positions.has(i)&&this.positions.set(i,r);for(const l of Object.keys(o.uml??{}))l.startsWith(`${t}.`)&&(o={...o,uml:ke(o.uml,l,i+l.slice(t.length))});this.openTabs=this.openTabs.map(l=>l===e.path?n:l),this.treeSelection===`file:${e.path}`&&(this.treeSelection=`file:${n}`),this.isOpen(`file:${e.path}`)&&this.open.set(`file:${n}`,!0),this.project=o,this.active=n,J(ot,n),this.savePositions(),this.refresh()}undo(e){const t=e?this.future:this.history,s=e?this.history:this.future,i=t.pop();if(i===void 0)return;s.push(this.snapshot());const n=JSON.parse(i);this.project=n.project,this.active=n.active,this.lastTyping=0,this.showActive(),this.refresh()}refresh(){J(os,Pe(this.project)),this.renderTabs(),this.classes=Ct(this.project),this.selection&&!this.findClass(this.selection.cls)&&(this.selection=void 0),this.relSelection&&!this.findRelation(this.relSelection)&&!this.findDependency(this.relSelection)&&(this.relSelection=void 0),this.editing||(this.render(),this.renderTree())}ownTypesAt(e){const t=this.activeFile;if(!t)return;const s=this.editor.view.state.doc.toString(),i=X(D(t.path)),n=oe(s).map(l=>({...l,pkg:i})),o=new Set(n.map(l=>l.name)),r=n.find(l=>l.headerFrom<=e&&e<=l.bodyEnd),c=ct()==="de"?"de":ct()==="pt-PT"?"pt":"en";return Ki([...n,...this.classes.filter(l=>l.path!==t.path&&!o.has(l.name))],{cls:r==null?void 0:r.name,pkg:i},c)}findClass(e){return this.classes.find(t=>t.name===e)}caretMoved(){var n,o;const e=this.editor.caret,t=this.classes.find(r=>r.path===this.active&&e>=r.from&&e<=r.to),s=t==null?void 0:t.members.findIndex(r=>e>=r.from&&e<=r.to),i=t?{cls:t.name,member:s!==void 0&&s>=0?s:void 0}:void 0;(i==null?void 0:i.cls)===((n=this.selection)==null?void 0:n.cls)&&(i==null?void 0:i.member)===((o=this.selection)==null?void 0:o.member)||(this.selection=i,this.editing||(this.render(),this.renderTree()))}showInCode(e,t){e.path!==this.active&&(this.active=e.path,this.lastTyping=0,this.showActive());const s=this.editor.view,[i,n]=t?[t.headerFrom,t.headerTo]:[e.nameFrom,e.nameTo],o=Math.min(n,s.state.doc.length);s.dispatch({selection:{anchor:Math.min(i,o),head:o},scrollIntoView:!0})}message(e,t=!1){this.status.textContent=e,this.status.classList.toggle("hint",t)}openFiles(){const e=document.createElement("input");e.type="file",e.multiple=!0,e.accept=".zip,.java,.visuobject,application/zip,text/plain",e.addEventListener("change",()=>void this.readFiles([...e.files??[]])),e.click()}async readFiles(e){var t;if(e.length!==0)try{const s=e.find(r=>/\.zip$/i.test(r.name));if(s){const{projectFromZip:r}=await wt(async()=>{const{projectFromZip:l}=await import("./projectZip-9121iP6s.js");return{projectFromZip:l}},__vite__mapDeps([0,1,2]),import.meta.url),c=r(new Uint8Array(await s.arrayBuffer()),s.name.replace(/\.zip$/i,""));await this.newProject(c);return}const i=e.find(r=>/\.visuobject$/i.test(r.name));if(i){const r=qt(await i.text());if(!r)throw new Error("format");await this.newProject(r);return}const n=At(this.project.name,await Promise.all(e.map(async r=>({name:r.name,text:await r.text()}))));let o=this.project;for(const r of n.files)o=et(o,r.path,r.text);this.setProject(o,(t=n.files[0])==null?void 0:t.path)}catch{this.message(d("web_visuobject_open_failed"))}}async save(){this.workspace?await this.writeCurrent():await this.downloadZip()}async downloadZip(){const{projectToZip:e}=await wt(async()=>{const{projectToZip:s}=await import("./projectZip-9121iP6s.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);Ln(`${this.project.name||"Projekt"}.zip`,t.slice().buffer,"application/zip")}isDirty(e){var t;return!this.workspace||this.saved===void 0?!1:e===void 0?this.saved!==Pe(this.project):this.savedFiles.get(e)!==((t=this.project.files.find(s=>s.path===e))==null?void 0:t.text)}markSaved(){this.saved=Pe(this.project),this.savedFiles=new Map(this.project.files.map(e=>[e.path,e.text]))}async restoreWorkspace(){if(!$t())return;const e=await Ks(us);if(e!=null&&e.ready){const t=await _t(e.handle);if(t)return this.useWorkspace(t.root,!0)}this.pendingFolder=e==null?void 0:e.handle,this.renderWorkspace()}async useWorkspace(e,t=!1){var s;this.workspace=e,this.pendingFolder=void 0,J(rt,"0");try{this.projects=await is(e);const i=se(We),n=this.project;if(t&&i&&this.projects.includes(i)){const o={active:this.active,tabs:[...this.openTabs],positions:new Map(this.positions)};await this.loadProject(i),this.positions=o.positions,this.savePositions(),Pe(n)!==this.saved&&(this.project=n),this.openTabs=o.tabs.filter(r=>this.project.files.some(c=>c.path===r)),this.active=this.project.files.some(r=>r.path===o.active)?o.active:(s=this.project.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}else!this.projects.some(o=>o.toLowerCase()===ge(n.name).toLowerCase())&&n.files.length?(this.folder=ge(n.name),await this.writeCurrent(!1)):this.projects.length?await this.loadProject(this.projects.includes(i??"")?i:this.projects[0]):(this.folder=ge(n.name),await this.writeCurrent(!1))}catch(i){this.message(d("web_visuobject_ws_failed",String((i==null?void 0:i.message)??i)))}this.renderWorkspace(),this.refresh()}async loadProject(e){var i;const{project:t,positions:s}=await wn(this.workspace,e);this.folder=e,this.project=t,this.markSaved(),this.message(""),this.history=[],this.future=[],this.lastTyping=0,this.selection=void 0,this.relSelection=void 0,this.treeSelection=void 0,this.currentPackage=void 0,this.positions=new Map(Object.entries(s)),this.savePositions(),this.openTabs=[],this.active=(i=t.files[0])==null?void 0:i.path,J(We,e),this.showActive(),this.refresh()}async writeCurrent(e=!0){const t=this.workspace;if(!t)return!1;const s=ge(this.project.name),i=this.folder,n=new Set(this.classes.map(r=>r.name)),o=Object.fromEntries([...this.positions].filter(([r])=>n.has(r)));if(s!==i&&this.projects.some(r=>r!==i&&r.toLowerCase()===s.toLowerCase()))return this.message(d("web_visuobject_ws_taken",this.project.name)),!1;try{return await xn(t,s,this.project,o),i&&i!==s&&this.projects.includes(i)&&await t.remove(i),this.folder=s,this.projects=await is(t),J(We,s),this.markSaved(),e&&this.message(d("web_visuobject_ws_saved",t.name,s),!0),this.refresh(),!0}catch(r){return this.message(d("web_visuobject_ws_failed",String((r==null?void 0:r.message)??r))),!1}}async switchProject(e){if(!(!this.workspace||e===this.folder)&&!(this.isDirty()&&!await this.writeCurrent(!1)))try{await this.loadProject(e)}catch(t){this.message(d("web_visuobject_ws_failed",String((t==null?void 0:t.message)??t)))}}async newProject(e,t,s=!1){var n,o;if(!this.workspace){this.setProject(e,t??((n=e.files[0])==null?void 0:n.path)),e.files.length===0&&!s&&this.editProjectName();return}if(this.isDirty()&&!await this.writeCurrent(!1))return;const i=ns(ge(e.name),this.projects);this.project={...e,name:i},this.folder=i,this.history=[],this.future=[],this.openTabs=[],this.positions.clear(),this.savePositions(),this.active=e.files.some(r=>r.path===t)?t:(o=e.files[0])==null?void 0:o.path,this.showActive(),this.refresh(),await this.writeCurrent(!1)&&(this.message(d("web_visuobject_ws_created",i),!0),e.files.length===0&&!s&&this.editProjectName())}get currentPlace(){const e=this.currentPackage??(this.active?D(this.active):ce(this.project)[0]??"");return{root:U(e),pkg:X(e)}}async newFromWizard(e){var u;const t=this.currentPlace,s=(f,m)=>{let g=f;for(let _=2;m(g);_++)g=f+_;return g},i=await an(e,{roots:ue(this.project),packagesIn:f=>ce(this.project,f).map(X),classes:this.classes,root:t.root,pkg:t.pkg,suggest:f=>f==="project"?ns(d("web_visuobject_project_name"),this.workspace?[...this.projects,this.folder??""]:[]):f==="folder"?s("test",m=>ue(this.project).includes(m)):f==="package"?s(d("web_visuobject_new_package_name"),m=>ce(this.project).includes(re(t.root,m))):this.uniqueClassName(d(f==="class"?"web_visuobject_new_class_name":"web_visuobject_new_interface_name")),check:(f,m,g,_)=>{if(!m)return d("web_visuobject_new_name_missing");if(f==="project")return this.workspace&&this.projects.some(y=>y!==this.folder&&y.toLowerCase()===ge(m).toLowerCase())?d("web_visuobject_ws_taken",m):void 0;if(f==="folder")return!Je(m)||ue(this.project).includes(m)?d("web_visuobject_bad_folder",m):void 0;if(f==="package")return!Mt(m)||ce(this.project).includes(re(g,m))?d("web_visuobject_bad_package",m):void 0;if(!pe.test(m))return d("web_visuobject_bad_name",m);if(this.findClass(m)||this.project.files.some(y=>y.path===le(re(g,_),`${m}.java`)))return d("web_visuobject_new_exists",m);if(m.charAt(0)!==m.charAt(0).toUpperCase())return d("web_visuobject_new_upper")}});if(!i)return;const{name:n,root:o,pkg:r}=i;if(e==="project")return this.newProject({name:n,files:[],packages:[]},void 0,!0);if(this.message(""),e==="folder")return this.currentPackage=re(n,""),this.treeSelection=`root:${n}`,this.open.set(`root:${n}`,!0),this.setProject(vi(this.project,n));if(e==="package"){const f=re(o,n);return this.currentPackage=f,this.treeSelection=`pkg:${f}`,this.open.set(`root:${o}`,!0),this.setProject(mi(this.project,f))}const c=re(o,r),l=le(c,`${n}.java`);this.currentPackage=c,this.selection={cls:n},this.open.set(`root:${o}`,!0),this.open.set(`pkg:${c}`,!0),this.setProject(et(this.project,l,this.sectioned(nn(i.options),n)),l);const h=this.findClass(n);h&&this.showInCode(h),(u=this.canvas.querySelector(`.uml-class[data-class="${CSS.escape(n)}"]`))==null||u.scrollIntoView({block:"nearest",inline:"nearest"})}editProjectName(){this.treeSelection="project",this.renderTree(),this.startEditing(this.tree.querySelector('[data-node="project"] > .vo-row .vo-label'))}renderWorkspace(){const e=this.wsBox;e.hidden=!$t();const t=this.shell.querySelector("[data-action=save]");if(t.dataset.tip=d(this.workspace?"web_visuobject_save_ws_tip":"web_visuobject_save_tip"),e.hidden)return;const s=(i,n,o="text-button",r)=>``;this.workspace?(e.className="vo-ws",e.innerHTML=`${b(this.workspace.name)} ${s("zip",d("web_visuobject_ws_zip"),"text-button",d("web_visuobject_ws_zip_tip"))} ${s("switch",d("web_visuobject_ws_switch"),"text-button")}`):this.pendingFolder?(e.className="vo-ws",e.innerHTML=`${s("reopen",d("web_visuobject_ws_reopen",this.pendingFolder.name),"text-button primary")}${s("switch",d("web_visuobject_ws_switch"),"text-button")}`):se(rt)==="1"?(e.className="vo-ws",e.innerHTML=s("open",d("web_visuobject_ws_choose"),"text-button",d("web_visuobject_ws_hint"))):(e.className="vo-ws ask",e.innerHTML=`

${b(d("web_visuobject_ws_question"))}

${b(d("web_visuobject_ws_hint"))}

diff --git a/website/app/assets/projectZip-CTDq_c8B.js b/website/app/assets/projectZip-9121iP6s.js similarity index 99% rename from website/app/assets/projectZip-CTDq_c8B.js rename to website/app/assets/projectZip-9121iP6s.js index 458c15c4..0ad9a7ba 100644 --- a/website/app/assets/projectZip-CTDq_c8B.js +++ b/website/app/assets/projectZip-9121iP6s.js @@ -1 +1 @@ -import{p as Br,d as Er,a as mr,i as Gr,b as Qr,c as Vr,u as Lr,n as _r,o as pr,e as br,r as dr,f as re,s as ee}from"./objectApp-DNr8EWA4.js";import"./index-Bqz7Z8YJ.js";var M=Uint8Array,K=Uint16Array,Tr=Int32Array,hr=new M([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gr=new M([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Sr=new M([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wr=function(r,e){for(var n=new K(31),a=0;a<31;++a)n[a]=e+=1<>1|(F&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,Cr[F]=((b&65280)>>8|(b&255)<<8)>>1}var V=(function(r,e,n){for(var a=r.length,f=0,v=new K(e);f>l]=c}else for(s=new K(a),f=0;f>15-r[f]);return s}),d=new M(288);for(var F=0;F<144;++F)d[F]=8;for(var F=144;F<256;++F)d[F]=9;for(var F=256;F<280;++F)d[F]=7;for(var F=280;F<288;++F)d[F]=8;var ir=new M(32);for(var F=0;F<32;++F)ir[F]=5;var ae=V(d,9,0),fe=V(d,9,1),ve=V(ir,5,0),te=V(ir,5,1),xr=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},X=function(r,e,n){var a=e/8|0;return(r[a]|r[a+1]<<8)>>(e&7)&n},yr=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},Ur=function(r){return(r+7)/8|0},lr=function(r,e,n){return(e==null||e<0)&&(e=0),(n==null||n>r.length)&&(n=r.length),new M(r.subarray(e,n))},oe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],I=function(r,e,n){var a=new Error(e||oe[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,I),!n)throw a;return a},ie=function(r,e,n,a){var f=r.length,v=a?a.length:0;if(!f||e.f&&!e.l)return n||new M(0);var i=!n,s=i||e.i!=2,l=e.i;i&&(n=new M(f*3));var c=function(fr){var vr=n.length;if(fr>vr){var nr=new M(Math.max(vr*2,fr));nr.set(n),n=nr}},t=e.f||0,o=e.p||0,u=e.b||0,h=e.l,y=e.d,w=e.m,x=e.n,T=f*8;do{if(!h){t=X(r,o,1);var z=X(r,o+1,3);if(o+=3,z)if(z==1)h=fe,y=te,w=9,x=5;else if(z==2){var U=X(r,o,31)+257,A=X(r,o+10,15)+4,m=U+X(r,o+5,31)+1;o+=14;for(var g=new M(m),B=new M(19),j=0;j>4;if(C<16)g[j++]=C;else{var E=0,k=0;for(C==16?(k=3+X(r,o,3),o+=2,E=g[j-1]):C==17?(k=3+X(r,o,7),o+=3):C==18&&(k=11+X(r,o,127),o+=7);k--;)g[j++]=E}}var W=g.subarray(0,U),J=g.subarray(U);w=xr(W),x=xr(J),h=V(W,w,1),y=V(J,x,1)}else I(1);else{var C=Ur(o)+4,O=r[C-4]|r[C-3]<<8,$=C+O;if($>f){l&&I(0);break}s&&c(u+O),n.set(r.subarray(C,$),u),e.b=u+=O,e.p=o=$*8,e.f=t;continue}if(o>T){l&&I(0);break}}s&&c(u+131072);for(var ar=(1<>4;if(o+=E&15,o>T){l&&I(0);break}if(E||I(2),q<256)n[u++]=q;else if(q==256){L=o,h=null;break}else{var H=q-254;if(q>264){var j=q-257,S=hr[j];H=X(r,o,(1<>4;G||I(3),o+=G&15;var J=ne[rr];if(rr>3){var S=gr[rr];J+=yr(r,o)&(1<T){l&&I(0);break}s&&c(u+131072);var er=u+H;if(u>8},tr=function(r,e,n){n<<=e&7;var a=e/8|0;r[a]|=n,r[a+1]|=n>>8,r[a+2]|=n>>16},Fr=function(r,e){for(var n=[],a=0;au&&(u=v[a].s);var h=new K(u+1),y=Or(n[t-1],h,0);if(y>e){var a=0,w=0,x=y-e,T=1<e)w+=T-(1<>=x;w>0;){var C=v[a].s;h[C]=0&&w;--a){var O=v[a].s;h[O]==e&&(--h[O],++w)}y=e}return{t:new M(h),l:y}},Or=function(r,e,n){return r.s==-1?Math.max(Or(r.l,e,n+1),Or(r.r,e,n+1)):e[r.s]=n},Nr=function(r){for(var e=r.length;e&&!r[--e];);for(var n=new K(++e),a=0,f=r[0],v=1,i=function(l){n[a++]=l},s=1;s<=e;++s)if(r[s]==f&&s!=e)++v;else{if(!f&&v>2){for(;v>138;v-=138)i(32754);v>2&&(i(v>10?v-11<<5|28690:v-3<<5|12305),v=0)}else if(v>3){for(i(f),--v;v>6;v-=6)i(8304);v>2&&(i(v-3<<5|8208),v=0)}for(;v--;)i(f);v=1,f=r[s]}return{c:n.subarray(0,a),n:e}},or=function(r,e){for(var n=0,a=0;a>8,r[f+2]=r[f]^255,r[f+3]=r[f+1]^255;for(var v=0;v4&&!B[Sr[D-1]];--D);var p=c+5<<3,Z=or(f,d)+or(v,ir)+i,P=or(f,u)+or(v,w)+i+14+3*D+or(A,B)+2*A[16]+3*A[17]+7*A[18];if(l>=0&&p<=Z&&p<=P)return Kr(e,t,r.subarray(l,l+c));var E,k,W,J;if(_(e,t,1+(P15&&(_(e,t,q[m]>>5&127),t+=q[m]>>12)}}else E=ae,k=d,W=ve,J=ir;for(var m=0;m255){var H=S>>18&31;tr(e,t,E[H+257]),t+=k[H+257],H>7&&(_(e,t,S>>23&31),t+=hr[H]);var G=S&31;tr(e,t,W[G]),t+=J[G],G>3&&(tr(e,t,S>>5&8191),t+=gr[G])}else tr(e,t,E[S]),t+=k[S]}return tr(e,t,E[256]),t+k[256]},le=new Tr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Rr=new M(0),se=function(r,e,n,a,f,v){var i=v.z||r.length,s=new M(a+i+5*(1+Math.ceil(i/7e3))+f),l=s.subarray(a,s.length-f),c=v.l,t=(v.r||0)&7;if(e){t&&(l[0]=v.r>>3);for(var o=le[e-1],u=o>>13,h=o&8191,y=(1<7e3||B>24576)&&(E>423||!c)){t=Dr(r,l,0,O,$,U,m,B,D,g-D,t),B=A=m=0,D=g;for(var k=0;k<286;++k)$[k]=0;for(var k=0;k<30;++k)U[k]=0}var W=2,J=0,ar=h,R=Z-P&32767;if(E>2&&p==C(g-R))for(var L=Math.min(u,E)-1,q=Math.min(32767,g),H=Math.min(258,E);R<=q&&--ar&&Z!=P;){if(r[g+W]==r[g+W-R]){for(var S=0;SW){if(W=S,J=R,S>L)break;for(var G=Math.min(R,S-2),rr=0,k=0;krr&&(rr=ur,P=er)}}}Z=P,P=w[Z],R+=Z-P&32767}if(J){O[B++]=268435456|Mr[W]<<18|Jr[J];var fr=Mr[W]&31,vr=Jr[J]&31;m+=hr[fr]+gr[vr],++$[257+fr],++U[vr],j=g+W,++A}else O[B++]=r[g],++$[r[g]]}}for(g=Math.max(g,j);g=i&&(l[t/8|0]=c,nr=i),t=Kr(l,t+1,r.subarray(g,nr))}v.i=i}return lr(s,0,a+Ur(t)+f)},ue=(function(){for(var r=new Int32Array(256),e=0;e<256;++e){for(var n=e,a=9;--a;)n=(n&1&&-306674912)^n>>>1;r[e]=n}return r})(),ce=function(){var r=-1;return{p:function(e){for(var n=r,a=0;a>>8;r=n},d:function(){return~r}}},he=function(r,e,n,a,f){if(!f&&(f={l:1},e.dictionary)){var v=e.dictionary.subarray(-32768),i=new M(v.length+r.length);i.set(v),i.set(r,v.length),r=i,f.w=v.length}return se(r,e.level==null?6:e.level,e.mem==null?f.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+e.mem,n,a,f)},Xr=function(r,e){var n={};for(var a in r)n[a]=r[a];for(var a in e)n[a]=e[a];return n},Q=function(r,e){return r[e]|r[e+1]<<8},Y=function(r,e){return(r[e]|r[e+1]<<8|r[e+2]<<16|r[e+3]<<24)>>>0},kr=function(r,e){return Y(r,e)+Y(r,e+4)*4294967296},N=function(r,e,n){for(;n;++e)r[e]=n,n>>>=8};function ge(r,e){return he(r,e||{},0,0)}function we(r,e){return ie(r,{i:2},e&&e.out,e&&e.dictionary)}var Yr=function(r,e,n,a){for(var f in r){var v=r[f],i=e+f,s=a;Array.isArray(v)&&(s=Xr(a,v[1]),v=v[0]),v instanceof M?n[i]=[v,s]:(n[i+="/"]=[new M(0),s],Yr(v,i,n,a))}},Ir=typeof TextEncoder<"u"&&new TextEncoder,Ar=typeof TextDecoder<"u"&&new TextDecoder,me=0;try{Ar.decode(Rr,{stream:!0}),me=1}catch{}var xe=function(r){for(var e="",n=0;;){var a=r[n++],f=(a>127)+(a>223)+(a>239);if(n+f>r.length)return{s:e,r:lr(r,n-1)};f?f==3?(a=((a&15)<<18|(r[n++]&63)<<12|(r[n++]&63)<<6|r[n++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):f&1?e+=String.fromCharCode((a&31)<<6|r[n++]&63):e+=String.fromCharCode((a&15)<<12|(r[n++]&63)<<6|r[n++]&63):e+=String.fromCharCode(a)}};function cr(r,e){var n;if(Ir)return Ir.encode(r);for(var a=r.length,f=new M(r.length+(r.length>>1)),v=0,i=function(c){f[v++]=c},n=0;nf.length){var s=new M(v+8+(a-n<<1));s.set(f),f=s}var l=r.charCodeAt(n);l<128||e?i(l):l<2048?(i(192|l>>6),i(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|r.charCodeAt(++n)&1023,i(240|l>>18),i(128|l>>12&63),i(128|l>>6&63),i(128|l&63)):(i(224|l>>12),i(128|l>>6&63),i(128|l&63))}return lr(f,0,v)}function jr(r,e){if(e){for(var n="",a=0;a65535&&I(9),e+=a+4}return e},Pr=function(r,e,n,a,f,v,i,s){var l=a.length,c=n.extra,t=s&&s.length,o=zr(c);N(r,e,i!=null?33639248:67324752),e+=4,i!=null&&(r[e++]=20,r[e++]=n.os),r[e]=20,e+=2,r[e++]=n.flag<<1|(v<0&&8),r[e++]=f&&8,r[e++]=n.compression&255,r[e++]=n.compression>>8;var u=new Date(n.mtime==null?Date.now():n.mtime),h=u.getFullYear()-1980;if((h<0||h>119)&&I(10),N(r,e,h<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>1),e+=4,v!=-1&&(N(r,e,n.crc),N(r,e+4,v<0?-v-2:v),N(r,e+8,n.size)),N(r,e+12,l),N(r,e+14,o),e+=16,i!=null&&(N(r,e,t),N(r,e+6,n.attrs),N(r,e+10,i),e+=14),r.set(a,e),e+=l,o)for(var y in c){var w=c[y],x=w.length;N(r,e,+y),N(r,e+2,x),r.set(w,e+4),e+=4+x}return t&&(r.set(s,e),e+=t),e},Se=function(r,e,n,a,f){N(r,e,101010256),N(r,e+8,n),N(r,e+10,n),N(r,e+12,a),N(r,e+16,f)};function Me(r,e){e||(e={});var n={},a=[];Yr(r,"",n,e);var f=0,v=0;for(var i in n){var s=n[i],l=s[0],c=s[1],t=c.level==0?0:8,o=cr(i),u=o.length,h=c.comment,y=h&&cr(h),w=y&&y.length,x=zr(c.extra);u>65535&&I(11);var T=t?ge(l,c):l,z=T.length,C=ce();C.p(l),a.push(Xr(c,{size:l.length,crc:C.d(),c:T,f:o,m:y,u:u!=i.length||y&&h.length!=w,o:f,compression:t})),f+=30+u+x+z,v+=76+2*(u+x)+(w||0)+z}for(var O=new M(v+22),$=f,U=v-f,A=0;A65558)&&I(13);var f=Q(r,a+8);if(!f)return{};var v=Y(r,a+16),i=v==4294967295||f==65535;if(i){var s=Y(r,a-12);i=Y(r,s)==101075792,i&&(f=Y(r,s+32),v=Y(r,s+48))}for(var l=0;l|]/g,"_")||"Projekt",n={};for(const l of r.files)n[`${e}/${br(l.path)}`]=new Uint8Array(cr(l.text));const a=[...r.packages.map(l=>`${e}/${dr(l)}/${re(l).replace(/\./g,"/")}/`),...ee(r).map(l=>`${e}/${l}/`)];for(const l of a)Object.keys(n).some(c=>c.startsWith(l))||(n[l.replace(/\/\/$/,"/")]=new Uint8Array);return(r.uml&&Object.keys(r.uml).length||(f=r.notes)!=null&&f.length||(v=r.objects)!=null&&v.length)&&(n[`${e}/${$r}`]=new Uint8Array(cr(JSON.stringify({format:"visuobject",version:1,uml:r.uml??{},...(i=r.notes)!=null&&i.length?{notes:r.notes}:{},...(s=r.objects)!=null&&s.length?{objects:r.objects}:{}},null,2)))),Me(n,{level:6})}function ze(r,e){var c;const n=Ce(r),a=Object.entries(n).filter(([t])=>/\.java$/i.test(t)&&!t.startsWith("__MACOSX/")).map(([t,o])=>({name:t,text:jr(o)})),f=new Set(Object.keys(n).map(t=>t.split("/")[0])),v=f.size===1&&Object.keys(n).some(t=>t.includes("/"))?[...f][0]:e,i=v!==e,s=Br(v,[]);for(const t of a){const o=Br(v,[{name:t.name.slice(t.name.lastIndexOf("/")+1),text:t.text}]).files[0],u=t.name.split("/").slice(i?1:0,-1),h=Er(o.text).split(".").filter(Boolean),w=u.slice(u.length-h.length).join("/")===h.join("/")?u.slice(0,u.length-h.length).join("/"):"",x=w&&w!==mr&&w.split("/").every(Gr)&&!w.includes(":")?w:mr,T=Qr(Vr(x,Er(o.text)),o.path.slice(o.path.lastIndexOf("/")+1));s.files=[...s.files.filter(z=>z.path!==T),{...o,path:T}],x!==mr&&!((c=s.sourceFolders)!=null&&c.includes(x))&&(s.sourceFolders=[...s.sourceFolders??[],x])}const l=Object.entries(n).find(([t])=>t===$r||t.endsWith(`/${$r}`));if(l)try{const t=JSON.parse(jr(l[1])),o=Lr(t.uml);o&&(s.uml=o);const u=_r(t.notes);u&&(s.notes=u);const h=pr(t.objects);h&&(s.objects=h)}catch{}return s}export{ze as projectFromZip,je as projectToZip}; +import{p as Br,d as Er,a as mr,i as Gr,b as Qr,c as Vr,u as Lr,n as _r,o as pr,e as br,r as dr,f as re,s as ee}from"./objectApp-eF0YC-Hb.js";import"./index-CnxP9nEG.js";var M=Uint8Array,K=Uint16Array,Tr=Int32Array,hr=new M([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gr=new M([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Sr=new M([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wr=function(r,e){for(var n=new K(31),a=0;a<31;++a)n[a]=e+=1<>1|(F&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,Cr[F]=((b&65280)>>8|(b&255)<<8)>>1}var V=(function(r,e,n){for(var a=r.length,f=0,v=new K(e);f>l]=c}else for(s=new K(a),f=0;f>15-r[f]);return s}),d=new M(288);for(var F=0;F<144;++F)d[F]=8;for(var F=144;F<256;++F)d[F]=9;for(var F=256;F<280;++F)d[F]=7;for(var F=280;F<288;++F)d[F]=8;var ir=new M(32);for(var F=0;F<32;++F)ir[F]=5;var ae=V(d,9,0),fe=V(d,9,1),ve=V(ir,5,0),te=V(ir,5,1),xr=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},X=function(r,e,n){var a=e/8|0;return(r[a]|r[a+1]<<8)>>(e&7)&n},yr=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},Ur=function(r){return(r+7)/8|0},lr=function(r,e,n){return(e==null||e<0)&&(e=0),(n==null||n>r.length)&&(n=r.length),new M(r.subarray(e,n))},oe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],I=function(r,e,n){var a=new Error(e||oe[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,I),!n)throw a;return a},ie=function(r,e,n,a){var f=r.length,v=a?a.length:0;if(!f||e.f&&!e.l)return n||new M(0);var i=!n,s=i||e.i!=2,l=e.i;i&&(n=new M(f*3));var c=function(fr){var vr=n.length;if(fr>vr){var nr=new M(Math.max(vr*2,fr));nr.set(n),n=nr}},t=e.f||0,o=e.p||0,u=e.b||0,h=e.l,y=e.d,w=e.m,x=e.n,T=f*8;do{if(!h){t=X(r,o,1);var z=X(r,o+1,3);if(o+=3,z)if(z==1)h=fe,y=te,w=9,x=5;else if(z==2){var U=X(r,o,31)+257,A=X(r,o+10,15)+4,m=U+X(r,o+5,31)+1;o+=14;for(var g=new M(m),B=new M(19),j=0;j>4;if(C<16)g[j++]=C;else{var E=0,k=0;for(C==16?(k=3+X(r,o,3),o+=2,E=g[j-1]):C==17?(k=3+X(r,o,7),o+=3):C==18&&(k=11+X(r,o,127),o+=7);k--;)g[j++]=E}}var W=g.subarray(0,U),J=g.subarray(U);w=xr(W),x=xr(J),h=V(W,w,1),y=V(J,x,1)}else I(1);else{var C=Ur(o)+4,O=r[C-4]|r[C-3]<<8,$=C+O;if($>f){l&&I(0);break}s&&c(u+O),n.set(r.subarray(C,$),u),e.b=u+=O,e.p=o=$*8,e.f=t;continue}if(o>T){l&&I(0);break}}s&&c(u+131072);for(var ar=(1<>4;if(o+=E&15,o>T){l&&I(0);break}if(E||I(2),q<256)n[u++]=q;else if(q==256){L=o,h=null;break}else{var H=q-254;if(q>264){var j=q-257,S=hr[j];H=X(r,o,(1<>4;G||I(3),o+=G&15;var J=ne[rr];if(rr>3){var S=gr[rr];J+=yr(r,o)&(1<T){l&&I(0);break}s&&c(u+131072);var er=u+H;if(u>8},tr=function(r,e,n){n<<=e&7;var a=e/8|0;r[a]|=n,r[a+1]|=n>>8,r[a+2]|=n>>16},Fr=function(r,e){for(var n=[],a=0;au&&(u=v[a].s);var h=new K(u+1),y=Or(n[t-1],h,0);if(y>e){var a=0,w=0,x=y-e,T=1<e)w+=T-(1<>=x;w>0;){var C=v[a].s;h[C]=0&&w;--a){var O=v[a].s;h[O]==e&&(--h[O],++w)}y=e}return{t:new M(h),l:y}},Or=function(r,e,n){return r.s==-1?Math.max(Or(r.l,e,n+1),Or(r.r,e,n+1)):e[r.s]=n},Nr=function(r){for(var e=r.length;e&&!r[--e];);for(var n=new K(++e),a=0,f=r[0],v=1,i=function(l){n[a++]=l},s=1;s<=e;++s)if(r[s]==f&&s!=e)++v;else{if(!f&&v>2){for(;v>138;v-=138)i(32754);v>2&&(i(v>10?v-11<<5|28690:v-3<<5|12305),v=0)}else if(v>3){for(i(f),--v;v>6;v-=6)i(8304);v>2&&(i(v-3<<5|8208),v=0)}for(;v--;)i(f);v=1,f=r[s]}return{c:n.subarray(0,a),n:e}},or=function(r,e){for(var n=0,a=0;a>8,r[f+2]=r[f]^255,r[f+3]=r[f+1]^255;for(var v=0;v4&&!B[Sr[D-1]];--D);var p=c+5<<3,Z=or(f,d)+or(v,ir)+i,P=or(f,u)+or(v,w)+i+14+3*D+or(A,B)+2*A[16]+3*A[17]+7*A[18];if(l>=0&&p<=Z&&p<=P)return Kr(e,t,r.subarray(l,l+c));var E,k,W,J;if(_(e,t,1+(P15&&(_(e,t,q[m]>>5&127),t+=q[m]>>12)}}else E=ae,k=d,W=ve,J=ir;for(var m=0;m255){var H=S>>18&31;tr(e,t,E[H+257]),t+=k[H+257],H>7&&(_(e,t,S>>23&31),t+=hr[H]);var G=S&31;tr(e,t,W[G]),t+=J[G],G>3&&(tr(e,t,S>>5&8191),t+=gr[G])}else tr(e,t,E[S]),t+=k[S]}return tr(e,t,E[256]),t+k[256]},le=new Tr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Rr=new M(0),se=function(r,e,n,a,f,v){var i=v.z||r.length,s=new M(a+i+5*(1+Math.ceil(i/7e3))+f),l=s.subarray(a,s.length-f),c=v.l,t=(v.r||0)&7;if(e){t&&(l[0]=v.r>>3);for(var o=le[e-1],u=o>>13,h=o&8191,y=(1<7e3||B>24576)&&(E>423||!c)){t=Dr(r,l,0,O,$,U,m,B,D,g-D,t),B=A=m=0,D=g;for(var k=0;k<286;++k)$[k]=0;for(var k=0;k<30;++k)U[k]=0}var W=2,J=0,ar=h,R=Z-P&32767;if(E>2&&p==C(g-R))for(var L=Math.min(u,E)-1,q=Math.min(32767,g),H=Math.min(258,E);R<=q&&--ar&&Z!=P;){if(r[g+W]==r[g+W-R]){for(var S=0;SW){if(W=S,J=R,S>L)break;for(var G=Math.min(R,S-2),rr=0,k=0;krr&&(rr=ur,P=er)}}}Z=P,P=w[Z],R+=Z-P&32767}if(J){O[B++]=268435456|Mr[W]<<18|Jr[J];var fr=Mr[W]&31,vr=Jr[J]&31;m+=hr[fr]+gr[vr],++$[257+fr],++U[vr],j=g+W,++A}else O[B++]=r[g],++$[r[g]]}}for(g=Math.max(g,j);g=i&&(l[t/8|0]=c,nr=i),t=Kr(l,t+1,r.subarray(g,nr))}v.i=i}return lr(s,0,a+Ur(t)+f)},ue=(function(){for(var r=new Int32Array(256),e=0;e<256;++e){for(var n=e,a=9;--a;)n=(n&1&&-306674912)^n>>>1;r[e]=n}return r})(),ce=function(){var r=-1;return{p:function(e){for(var n=r,a=0;a>>8;r=n},d:function(){return~r}}},he=function(r,e,n,a,f){if(!f&&(f={l:1},e.dictionary)){var v=e.dictionary.subarray(-32768),i=new M(v.length+r.length);i.set(v),i.set(r,v.length),r=i,f.w=v.length}return se(r,e.level==null?6:e.level,e.mem==null?f.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+e.mem,n,a,f)},Xr=function(r,e){var n={};for(var a in r)n[a]=r[a];for(var a in e)n[a]=e[a];return n},Q=function(r,e){return r[e]|r[e+1]<<8},Y=function(r,e){return(r[e]|r[e+1]<<8|r[e+2]<<16|r[e+3]<<24)>>>0},kr=function(r,e){return Y(r,e)+Y(r,e+4)*4294967296},N=function(r,e,n){for(;n;++e)r[e]=n,n>>>=8};function ge(r,e){return he(r,e||{},0,0)}function we(r,e){return ie(r,{i:2},e&&e.out,e&&e.dictionary)}var Yr=function(r,e,n,a){for(var f in r){var v=r[f],i=e+f,s=a;Array.isArray(v)&&(s=Xr(a,v[1]),v=v[0]),v instanceof M?n[i]=[v,s]:(n[i+="/"]=[new M(0),s],Yr(v,i,n,a))}},Ir=typeof TextEncoder<"u"&&new TextEncoder,Ar=typeof TextDecoder<"u"&&new TextDecoder,me=0;try{Ar.decode(Rr,{stream:!0}),me=1}catch{}var xe=function(r){for(var e="",n=0;;){var a=r[n++],f=(a>127)+(a>223)+(a>239);if(n+f>r.length)return{s:e,r:lr(r,n-1)};f?f==3?(a=((a&15)<<18|(r[n++]&63)<<12|(r[n++]&63)<<6|r[n++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):f&1?e+=String.fromCharCode((a&31)<<6|r[n++]&63):e+=String.fromCharCode((a&15)<<12|(r[n++]&63)<<6|r[n++]&63):e+=String.fromCharCode(a)}};function cr(r,e){var n;if(Ir)return Ir.encode(r);for(var a=r.length,f=new M(r.length+(r.length>>1)),v=0,i=function(c){f[v++]=c},n=0;nf.length){var s=new M(v+8+(a-n<<1));s.set(f),f=s}var l=r.charCodeAt(n);l<128||e?i(l):l<2048?(i(192|l>>6),i(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|r.charCodeAt(++n)&1023,i(240|l>>18),i(128|l>>12&63),i(128|l>>6&63),i(128|l&63)):(i(224|l>>12),i(128|l>>6&63),i(128|l&63))}return lr(f,0,v)}function jr(r,e){if(e){for(var n="",a=0;a65535&&I(9),e+=a+4}return e},Pr=function(r,e,n,a,f,v,i,s){var l=a.length,c=n.extra,t=s&&s.length,o=zr(c);N(r,e,i!=null?33639248:67324752),e+=4,i!=null&&(r[e++]=20,r[e++]=n.os),r[e]=20,e+=2,r[e++]=n.flag<<1|(v<0&&8),r[e++]=f&&8,r[e++]=n.compression&255,r[e++]=n.compression>>8;var u=new Date(n.mtime==null?Date.now():n.mtime),h=u.getFullYear()-1980;if((h<0||h>119)&&I(10),N(r,e,h<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>1),e+=4,v!=-1&&(N(r,e,n.crc),N(r,e+4,v<0?-v-2:v),N(r,e+8,n.size)),N(r,e+12,l),N(r,e+14,o),e+=16,i!=null&&(N(r,e,t),N(r,e+6,n.attrs),N(r,e+10,i),e+=14),r.set(a,e),e+=l,o)for(var y in c){var w=c[y],x=w.length;N(r,e,+y),N(r,e+2,x),r.set(w,e+4),e+=4+x}return t&&(r.set(s,e),e+=t),e},Se=function(r,e,n,a,f){N(r,e,101010256),N(r,e+8,n),N(r,e+10,n),N(r,e+12,a),N(r,e+16,f)};function Me(r,e){e||(e={});var n={},a=[];Yr(r,"",n,e);var f=0,v=0;for(var i in n){var s=n[i],l=s[0],c=s[1],t=c.level==0?0:8,o=cr(i),u=o.length,h=c.comment,y=h&&cr(h),w=y&&y.length,x=zr(c.extra);u>65535&&I(11);var T=t?ge(l,c):l,z=T.length,C=ce();C.p(l),a.push(Xr(c,{size:l.length,crc:C.d(),c:T,f:o,m:y,u:u!=i.length||y&&h.length!=w,o:f,compression:t})),f+=30+u+x+z,v+=76+2*(u+x)+(w||0)+z}for(var O=new M(v+22),$=f,U=v-f,A=0;A65558)&&I(13);var f=Q(r,a+8);if(!f)return{};var v=Y(r,a+16),i=v==4294967295||f==65535;if(i){var s=Y(r,a-12);i=Y(r,s)==101075792,i&&(f=Y(r,s+32),v=Y(r,s+48))}for(var l=0;l|]/g,"_")||"Projekt",n={};for(const l of r.files)n[`${e}/${br(l.path)}`]=new Uint8Array(cr(l.text));const a=[...r.packages.map(l=>`${e}/${dr(l)}/${re(l).replace(/\./g,"/")}/`),...ee(r).map(l=>`${e}/${l}/`)];for(const l of a)Object.keys(n).some(c=>c.startsWith(l))||(n[l.replace(/\/\/$/,"/")]=new Uint8Array);return(r.uml&&Object.keys(r.uml).length||(f=r.notes)!=null&&f.length||(v=r.objects)!=null&&v.length)&&(n[`${e}/${$r}`]=new Uint8Array(cr(JSON.stringify({format:"visuobject",version:1,uml:r.uml??{},...(i=r.notes)!=null&&i.length?{notes:r.notes}:{},...(s=r.objects)!=null&&s.length?{objects:r.objects}:{}},null,2)))),Me(n,{level:6})}function ze(r,e){var c;const n=Ce(r),a=Object.entries(n).filter(([t])=>/\.java$/i.test(t)&&!t.startsWith("__MACOSX/")).map(([t,o])=>({name:t,text:jr(o)})),f=new Set(Object.keys(n).map(t=>t.split("/")[0])),v=f.size===1&&Object.keys(n).some(t=>t.includes("/"))?[...f][0]:e,i=v!==e,s=Br(v,[]);for(const t of a){const o=Br(v,[{name:t.name.slice(t.name.lastIndexOf("/")+1),text:t.text}]).files[0],u=t.name.split("/").slice(i?1:0,-1),h=Er(o.text).split(".").filter(Boolean),w=u.slice(u.length-h.length).join("/")===h.join("/")?u.slice(0,u.length-h.length).join("/"):"",x=w&&w!==mr&&w.split("/").every(Gr)&&!w.includes(":")?w:mr,T=Qr(Vr(x,Er(o.text)),o.path.slice(o.path.lastIndexOf("/")+1));s.files=[...s.files.filter(z=>z.path!==T),{...o,path:T}],x!==mr&&!((c=s.sourceFolders)!=null&&c.includes(x))&&(s.sourceFolders=[...s.sourceFolders??[],x])}const l=Object.entries(n).find(([t])=>t===$r||t.endsWith(`/${$r}`));if(l)try{const t=JSON.parse(jr(l[1])),o=Lr(t.uml);o&&(s.uml=o);const u=_r(t.notes);u&&(s.notes=u);const h=pr(t.objects);h&&(s.objects=h)}catch{}return s}export{ze as projectFromZip,je as projectToZip}; diff --git a/website/app/assets/robot3d-C6eyLYBE.js b/website/app/assets/robot3d-DEkrf1Uk.js similarity index 99% rename from website/app/assets/robot3d-C6eyLYBE.js rename to website/app/assets/robot3d-DEkrf1Uk.js index 6a21a058..3a0ec750 100644 --- a/website/app/assets/robot3d-C6eyLYBE.js +++ b/website/app/assets/robot3d-DEkrf1Uk.js @@ -1,4 +1,4 @@ -var gl=Object.defineProperty;var _l=(i,t,e)=>t in i?gl(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var le=(i,t,e)=>_l(i,typeof t!="symbol"?t+"":t,e);import{C as rn,L as oo}from"./index-Bqz7Z8YJ.js";/** +var gl=Object.defineProperty;var _l=(i,t,e)=>t in i?gl(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var le=(i,t,e)=>_l(i,typeof t!="symbol"?t+"":t,e);import{C as rn,L as oo}from"./index-CnxP9nEG.js";/** * @license * Copyright 2010-2025 Three.js Authors * SPDX-License-Identifier: MIT diff --git a/website/app/index.html b/website/app/index.html index 872c71c9..fed57933 100644 --- a/website/app/index.html +++ b/website/app/index.html @@ -6,7 +6,7 @@ VisuStruct Web - +