diff --git a/composer.json b/composer.json
index a234fe37d4a78173f413820382b19bffa382747f..002359412207034c766c8f87576a8c16e3496c80 100755
--- a/composer.json
+++ b/composer.json
@@ -25,10 +25,11 @@
 
     "require": {
         "slim/slim": "4.11.0",
-        "respect/validation": "^2.2.3",
-        "setasign/fpdi-tcpdf": "^2.3.0",
-        "phpmailer/phpmailer": "^6.1",
-        "firebase/php-jwt": "^5.2",
+        "respect/validation": "~2.2",
+        "tecnickcom/tcpdf": "~6.6",
+        "setasign/fpdi": "~2.3",
+        "phpmailer/phpmailer": "~6.7",
+        "firebase/php-jwt": "~6.4",
         "psr/log":  "1.1",
         "psr/cache": "1.0.1",
         "slim/psr7": "1.6",
diff --git a/composer.lock b/composer.lock
index 9ed1c490291dc48bfaa0a254a9e4d0868a623aa3..aef732dfad34f271a9c300d590197938312d8bc0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "4f140f6fd12829c06afb1a2d5378d7c2",
+    "content-hash": "12f77a09ecbd0eeaef092d33e01135a9",
     "packages": [
         {
             "name": "fig/http-message-util",
@@ -64,25 +64,31 @@
         },
         {
             "name": "firebase/php-jwt",
-            "version": "v5.5.1",
+            "version": "v6.4.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/firebase/php-jwt.git",
-                "reference": "83b609028194aa042ea33b5af2d41a7427de80e6"
+                "reference": "4dd1e007f22a927ac77da5a3fbb067b42d3bc224"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/firebase/php-jwt/zipball/83b609028194aa042ea33b5af2d41a7427de80e6",
-                "reference": "83b609028194aa042ea33b5af2d41a7427de80e6",
+                "url": "https://api.github.com/repos/firebase/php-jwt/zipball/4dd1e007f22a927ac77da5a3fbb067b42d3bc224",
+                "reference": "4dd1e007f22a927ac77da5a3fbb067b42d3bc224",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.0"
+                "php": "^7.1||^8.0"
             },
             "require-dev": {
-                "phpunit/phpunit": ">=4.8 <=9"
+                "guzzlehttp/guzzle": "^6.5||^7.4",
+                "phpspec/prophecy-phpunit": "^1.1",
+                "phpunit/phpunit": "^7.5||^9.5",
+                "psr/cache": "^1.0||^2.0",
+                "psr/http-client": "^1.0",
+                "psr/http-factory": "^1.0"
             },
             "suggest": {
+                "ext-sodium": "Support EdDSA (Ed25519) signatures",
                 "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present"
             },
             "type": "library",
@@ -115,9 +121,9 @@
             ],
             "support": {
                 "issues": "https://github.com/firebase/php-jwt/issues",
-                "source": "https://github.com/firebase/php-jwt/tree/v5.5.1"
+                "source": "https://github.com/firebase/php-jwt/tree/v6.4.0"
             },
-            "time": "2021-11-08T20:18:51+00:00"
+            "time": "2023-02-09T21:01:23+00:00"
         },
         {
             "name": "jasig/phpcas",
@@ -791,20 +797,20 @@
         },
         {
             "name": "respect/validation",
-            "version": "2.2.3",
+            "version": "2.2.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Respect/Validation.git",
-                "reference": "4c21a7ffc9a4915673cb2c2843963919e664e627"
+                "reference": "d304ace5325efd7180daffb1f8627bb0affd4e3a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Respect/Validation/zipball/4c21a7ffc9a4915673cb2c2843963919e664e627",
-                "reference": "4c21a7ffc9a4915673cb2c2843963919e664e627",
+                "url": "https://api.github.com/repos/Respect/Validation/zipball/d304ace5325efd7180daffb1f8627bb0affd4e3a",
+                "reference": "d304ace5325efd7180daffb1f8627bb0affd4e3a",
                 "shasum": ""
             },
             "require": {
-                "php": "^7.3 || ^8.0",
+                "php": "^7.4 || ^8.0 || ^8.1 || ^8.2",
                 "respect/stringifier": "^0.2.0",
                 "symfony/polyfill-mbstring": "^1.2"
             },
@@ -812,23 +818,20 @@
                 "egulias/email-validator": "^3.0",
                 "malukenho/docheader": "^0.1",
                 "mikey179/vfsstream": "^1.6",
-                "phpstan/phpstan": "^0.12",
-                "phpstan/phpstan-deprecation-rules": "^0.12",
-                "phpstan/phpstan-phpunit": "^0.12",
-                "phpunit/phpunit": "^9.3",
+                "phpstan/phpstan": "^1.9",
+                "phpstan/phpstan-deprecation-rules": "^1.1",
+                "phpstan/phpstan-phpunit": "^1.3",
+                "phpunit/phpunit": "^9.6",
                 "psr/http-message": "^1.0",
                 "respect/coding-standard": "^3.0",
-                "squizlabs/php_codesniffer": "^3.5",
-                "symfony/validator": "^3.0||^4.0",
-                "zendframework/zend-validator": "^2.1"
+                "squizlabs/php_codesniffer": "^3.7",
+                "symfony/validator": "^3.0||^4.0"
             },
             "suggest": {
                 "egulias/email-validator": "Strict (RFC compliant) email validation",
                 "ext-bcmath": "Arbitrary Precision Mathematics",
                 "ext-fileinfo": "File Information",
-                "ext-mbstring": "Multibyte String Functions",
-                "symfony/validator": "Use Symfony validator through Respect\\Validation",
-                "zendframework/zend-validator": "Use Zend Framework validator through Respect\\Validation"
+                "ext-mbstring": "Multibyte String Functions"
             },
             "type": "library",
             "autoload": {
@@ -855,9 +858,9 @@
             ],
             "support": {
                 "issues": "https://github.com/Respect/Validation/issues",
-                "source": "https://github.com/Respect/Validation/tree/2.2.3"
+                "source": "https://github.com/Respect/Validation/tree/2.2.4"
             },
-            "time": "2021-03-19T14:12:45+00:00"
+            "time": "2023-02-15T01:05:24+00:00"
         },
         {
             "name": "setasign/fpdi",
@@ -931,49 +934,6 @@
             ],
             "time": "2023-02-09T10:38:43+00:00"
         },
-        {
-            "name": "setasign/fpdi-tcpdf",
-            "version": "v2.3.0",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/Setasign/FPDI-TCPDF.git",
-                "reference": "f6711a95cba64db16e1a63e1b6195827a2150c93"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/Setasign/FPDI-TCPDF/zipball/f6711a95cba64db16e1a63e1b6195827a2150c93",
-                "reference": "f6711a95cba64db16e1a63e1b6195827a2150c93",
-                "shasum": ""
-            },
-            "require": {
-                "setasign/fpdi": "^2.3",
-                "tecnickcom/tcpdf": "^6.3.5"
-            },
-            "type": "library",
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "MIT"
-            ],
-            "authors": [
-                {
-                    "name": "Jan Slabon",
-                    "email": "jan.slabon@setasign.com",
-                    "homepage": "https://www.setasign.com"
-                }
-            ],
-            "description": "Kind of metadata package for dependencies of the latest versions of FPDI and TCPDF.",
-            "homepage": "https://www.setasign.com/fpdi",
-            "keywords": [
-                "TCPDF",
-                "fpdi",
-                "pdf"
-            ],
-            "support": {
-                "source": "https://github.com/Setasign/FPDI-TCPDF/tree/v2.3.0"
-            },
-            "abandoned": true,
-            "time": "2020-02-19T11:40:30+00:00"
-        },
         {
             "name": "slim/psr7",
             "version": "1.6",
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index e803c89c6a0ea864978765f7d689493f1db04025..cffdeb0acec66c5494f0c5147dc30737ddd73879 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -383,7 +383,7 @@ class UserController
         if (!empty($body['pictureOrientation'])) {
             $imagick->rotateImage(new \ImagickPixel(), $body['pictureOrientation']);
         }
-        $imagick->thumbnailImage(100, null);
+        $imagick->thumbnailImage(100, 0);
         $body['picture'] = base64_encode($imagick->getImagesBlob());
 
         $set = [
@@ -767,12 +767,13 @@ class UserController
         }
 
         try {
-            $jwt = JWT::decode($body['token'], CoreConfigModel::getEncryptKey(), ['HS256']);
+            $jwt = AuthenticationModel::decodeToken($body['token'], CoreConfigModel::getEncryptKey());
+            $jwt['user'] = (array)$jwt['user'] ?? [];
         } catch (\Exception $e) {
             return $response->withStatus(403)->withJson(['errors' => 'Invalid token', 'lang' => 'invalidToken']);
         }
 
-        $user = UserModel::getById(['id' => $jwt->user->id, 'select' => ['id', 'reset_token']]);
+        $user = UserModel::getById(['id' => $jwt['user']['id'], 'select' => ['id', 'reset_token']]);
         if (empty($user)) {
             return $response->withStatus(400)->withJson(['errors' => 'User does not exist']);
         }
diff --git a/src/app/workflow/controllers/FastOTPController.php b/src/app/workflow/controllers/FastOTPController.php
index 5402f90b15be69905f91adeb05647e99735e15f2..53c3887211142afdd36a52bcd1626026f522eb24 100644
--- a/src/app/workflow/controllers/FastOTPController.php
+++ b/src/app/workflow/controllers/FastOTPController.php
@@ -21,8 +21,8 @@ use SrcCore\models\AuthenticationModel;
 use Respect\Validation\Validator;
 use SrcCore\models\ValidatorModel;
 use Configuration\models\ConfigurationModel;
-use Slim\Http\Request;
-use Slim\Http\Response;
+use Slim\Psr7\Request;
+use SrcCore\http\Response;
 use Workflow\models\WorkflowModel;
 use Document\controllers\DocumentController;
 use Docserver\controllers\DocserverController;
@@ -496,7 +496,7 @@ class FastOTPController
         ValidatorModel::notEmpty($args, ['payload']);
         ValidatorModel::arrayType($args, ['payload']);
 
-        return JWT::encode($args['payload'], CoreConfigModel::getEncryptKey());
+        return AuthenticationModel::generateToken($args['payload'], CoreConfigModel::getEncryptKey());
     }
 
     private static function checkToken(array $args)
@@ -506,16 +506,16 @@ class FastOTPController
         }
 
         try {
-            $jwt = JWT::decode($args['token'], CoreConfigModel::getEncryptKey(), ['HS256']);
+            $jwt = AuthenticationModel::decodeToken($args['token'], CoreConfigModel::getEncryptKey());
         } catch (\Exception $e) {
             return ['errors' => 'FastParapheur access token is invalid'];
         }
 
-        if (empty($jwt->documentId) || empty($jwt->workflowId)) {
+        if (empty($jwt['documentId']) || empty($jwt['workflowId'])) {
             return ['errors' => 'FastParapheur access token is invalid'];
         }
 
-        $workflowExternalInformations = WorkflowExternalInformationModel::getByWorkflowId(['select' => ['informations'], 'workflowId' => $jwt->workflowId]);
+        $workflowExternalInformations = WorkflowExternalInformationModel::getByWorkflowId(['select' => ['informations'], 'workflowId' => $jwt['workflowId']]);
         if (empty($workflowExternalInformations)) {
             return ['errors' => 'Workflow external informations does not exist'];
         }
@@ -525,7 +525,7 @@ class FastOTPController
             return ['errors' => 'FastParapheur access token is invalid'];
         }
 
-        return ['documentId' => $jwt->documentId, 'workflowId' => $jwt->workflowId];
+        return ['documentId' => $jwt['documentId'], 'workflowId' => $jwt['workflowId']];
     }
 
     public static function getProof(array $args)
diff --git a/src/core/controllers/AuthenticationController.php b/src/core/controllers/AuthenticationController.php
index 253dfa35c2100fed2f2d199c8cf98ff0b933de29..1df635b98bb926a3ae6a143e32657570fb999796 100755
--- a/src/core/controllers/AuthenticationController.php
+++ b/src/core/controllers/AuthenticationController.php
@@ -16,7 +16,6 @@ namespace SrcCore\controllers;
 
 use Configuration\models\ConfigurationModel;
 use Email\controllers\EmailController;
-use Firebase\JWT\JWT;
 use History\controllers\HistoryController;
 use Respect\Validation\Validator;
 use Slim\Psr7\Request;
@@ -97,7 +96,7 @@ class AuthenticationController
                 }
                 if (!empty($token)) {
                     try {
-                        $jwt = (array)JWT::decode($token, CoreConfigModel::getEncryptKey(), ['HS256']);
+                        $jwt = AuthenticationModel::decodeToken($token, CoreConfigModel::getEncryptKey());
                     } catch (\Exception $e) {
                         return null;
                     }
@@ -225,7 +224,7 @@ class AuthenticationController
         $user['refresh_token'] = json_decode($user['refresh_token'], true);
         foreach ($user['refresh_token'] as $key => $refreshToken) {
             try {
-                JWT::decode($refreshToken, CoreConfigModel::getEncryptKey(), ['HS256']);
+                AuthenticationModel::decodeToken($refreshToken, CoreConfigModel::getEncryptKey());
             } catch (\Exception $e) {
                 unset($user['refresh_token'][$key]);
             }
@@ -364,12 +363,13 @@ class AuthenticationController
         }
 
         try {
-            $jwt = JWT::decode($queryParams['refreshToken'], CoreConfigModel::getEncryptKey(), ['HS256']);
+            $jwt = AuthenticationModel::decodeToken($queryParams['refreshToken'], CoreConfigModel::getEncryptKey());
+            $jwt['user'] = (array)$jwt['user'] ?? [];
         } catch (\Exception $e) {
             return $response->withStatus(401)->withJson(['errors' => 'Authentication Failed']);
         }
 
-        $user = UserModel::getById(['select' => ['id', 'refresh_token'], 'id' => $jwt->user->id]);
+        $user = UserModel::getById(['select' => ['id', 'refresh_token'], 'id' => $jwt['user']['id']]);
         if (empty($user['refresh_token'])) {
             return $response->withStatus(401)->withJson(['errors' => 'Authentication Failed']);
         }
@@ -426,9 +426,7 @@ class AuthenticationController
             'connection' => ConfigurationModel::getConnection()
         ];
 
-        $jwt = JWT::encode($token, CoreConfigModel::getEncryptKey());
-
-        return $jwt;
+        return AuthenticationModel::generateToken($token, CoreConfigModel::getEncryptKey());
     }
 
     public static function getRefreshJWT()
@@ -449,9 +447,7 @@ class AuthenticationController
             ]
         ];
 
-        $jwt = JWT::encode($token, CoreConfigModel::getEncryptKey());
-
-        return $jwt;
+        return AuthenticationModel::generateToken($token, CoreConfigModel::getEncryptKey());
     }
 
     public static function getResetJWT($args = [])
@@ -464,9 +460,7 @@ class AuthenticationController
             'connection' => ConfigurationModel::getConnection()
         ];
 
-        $jwt = JWT::encode($token, CoreConfigModel::getEncryptKey());
-
-        return $jwt;
+        return AuthenticationModel::generateToken($token, CoreConfigModel::getEncryptKey());
     }
 
     public static function sendAccountActivationNotification(array $args)
diff --git a/src/core/http/JsonErrorRenderer.php b/src/core/http/JsonErrorRenderer.php
index 5f872fe0eb2df47afe071670ce3a2bc19c7f48bd..caf44cbd8896a3e79562b8882daf22eb6b1605ef 100644
--- a/src/core/http/JsonErrorRenderer.php
+++ b/src/core/http/JsonErrorRenderer.php
@@ -37,4 +37,4 @@ class JsonErrorRenderer extends AbstractErrorRenderer
             'trace' => $exception->getTrace()
         ];
     }
-}
\ No newline at end of file
+}
diff --git a/src/core/models/AuthenticationModel.php b/src/core/models/AuthenticationModel.php
index 06d0bffa8b5a6323e62348cc702734ddd880182c..2dd379d7c233e848f06bc01a7161db7002906338 100755
--- a/src/core/models/AuthenticationModel.php
+++ b/src/core/models/AuthenticationModel.php
@@ -14,6 +14,9 @@
 
 namespace SrcCore\models;
 
+use Firebase\JWT\JWT;
+use Firebase\JWT\Key;
+
 class AuthenticationModel
 {
     public static function getPasswordHash($password)
@@ -81,4 +84,16 @@ class AuthenticationModel
 
         return $password;
     }
+
+    public static function generateToken(array $token, string $encryptKey): string
+    {
+        return JWT::encode($token, $encryptKey, 'HS256');
+    }
+
+    public static function decodeToken(string $token, string $encryptKey): array
+    {
+        $key = new Key($encryptKey, 'HS256');
+
+        return (array)JWT::decode($token, $key, ['HS256']);
+    }
 }
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
deleted file mode 100644
index c6b54af7ba2e1e3e960134233321efe47aa4528c..0000000000000000000000000000000000000000
--- a/vendor/composer/InstalledVersions.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-/*
- * This file is part of Composer.
- *
- * (c) Nils Adermann <naderman@naderman.de>
- *     Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer;
-
-use Composer\Autoload\ClassLoader;
-use Composer\Semver\VersionParser;
-
-/**
- * This class is copied in every Composer installed project and available to all
- *
- * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
- *
- * To require its presence, you can require `composer-runtime-api ^2.0`
- *
- * @final
- */
-class InstalledVersions
-{
-    /**
-     * @var mixed[]|null
-     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
-     */
-    private static $installed;
-
-    /**
-     * @var bool|null
-     */
-    private static $canGetVendors;
-
-    /**
-     * @var array[]
-     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
-     */
-    private static $installedByVendor = array();
-
-    /**
-     * Returns a list of all package names which are present, either by being installed, replaced or provided
-     *
-     * @return string[]
-     * @psalm-return list<string>
-     */
-    public static function getInstalledPackages()
-    {
-        $packages = array();
-        foreach (self::getInstalled() as $installed) {
-            $packages[] = array_keys($installed['versions']);
-        }
-
-        if (1 === \count($packages)) {
-            return $packages[0];
-        }
-
-        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
-    }
-
-    /**
-     * Returns a list of all package names with a specific type e.g. 'library'
-     *
-     * @param  string   $type
-     * @return string[]
-     * @psalm-return list<string>
-     */
-    public static function getInstalledPackagesByType($type)
-    {
-        $packagesByType = array();
-
-        foreach (self::getInstalled() as $installed) {
-            foreach ($installed['versions'] as $name => $package) {
-                if (isset($package['type']) && $package['type'] === $type) {
-                    $packagesByType[] = $name;
-                }
-            }
-        }
-
-        return $packagesByType;
-    }
-
-    /**
-     * Checks whether the given package is installed
-     *
-     * This also returns true if the package name is provided or replaced by another package
-     *
-     * @param  string $packageName
-     * @param  bool   $includeDevRequirements
-     * @return bool
-     */
-    public static function isInstalled($packageName, $includeDevRequirements = true)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (isset($installed['versions'][$packageName])) {
-                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Checks whether the given package satisfies a version constraint
-     *
-     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
-     *
-     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
-     *
-     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
-     * @param  string        $packageName
-     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
-     * @return bool
-     */
-    public static function satisfies(VersionParser $parser, $packageName, $constraint)
-    {
-        $constraint = $parser->parseConstraints($constraint);
-        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
-
-        return $provided->matches($constraint);
-    }
-
-    /**
-     * Returns a version constraint representing all the range(s) which are installed for a given package
-     *
-     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
-     * whether a given version of a package is installed, and not just whether it exists
-     *
-     * @param  string $packageName
-     * @return string Version constraint usable with composer/semver
-     */
-    public static function getVersionRanges($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            $ranges = array();
-            if (isset($installed['versions'][$packageName]['pretty_version'])) {
-                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
-            }
-            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
-                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
-            }
-            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
-                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
-            }
-            if (array_key_exists('provided', $installed['versions'][$packageName])) {
-                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
-            }
-
-            return implode(' || ', $ranges);
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
-     */
-    public static function getVersion($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            if (!isset($installed['versions'][$packageName]['version'])) {
-                return null;
-            }
-
-            return $installed['versions'][$packageName]['version'];
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
-     */
-    public static function getPrettyVersion($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
-                return null;
-            }
-
-            return $installed['versions'][$packageName]['pretty_version'];
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
-     */
-    public static function getReference($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            if (!isset($installed['versions'][$packageName]['reference'])) {
-                return null;
-            }
-
-            return $installed['versions'][$packageName]['reference'];
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @param  string      $packageName
-     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
-     */
-    public static function getInstallPath($packageName)
-    {
-        foreach (self::getInstalled() as $installed) {
-            if (!isset($installed['versions'][$packageName])) {
-                continue;
-            }
-
-            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
-        }
-
-        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
-    }
-
-    /**
-     * @return array
-     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
-     */
-    public static function getRootPackage()
-    {
-        $installed = self::getInstalled();
-
-        return $installed[0]['root'];
-    }
-
-    /**
-     * Returns the raw installed.php data for custom implementations
-     *
-     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
-     * @return array[]
-     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
-     */
-    public static function getRawData()
-    {
-        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
-
-        if (null === self::$installed) {
-            // only require the installed.php file if this file is loaded from its dumped location,
-            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
-            if (substr(__DIR__, -8, 1) !== 'C') {
-                self::$installed = include __DIR__ . '/installed.php';
-            } else {
-                self::$installed = array();
-            }
-        }
-
-        return self::$installed;
-    }
-
-    /**
-     * Returns the raw data of all installed.php which are currently loaded for custom implementations
-     *
-     * @return array[]
-     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
-     */
-    public static function getAllRawData()
-    {
-        return self::getInstalled();
-    }
-
-    /**
-     * Lets you reload the static array from another file
-     *
-     * This is only useful for complex integrations in which a project needs to use
-     * this class but then also needs to execute another project's autoloader in process,
-     * and wants to ensure both projects have access to their version of installed.php.
-     *
-     * A typical case would be PHPUnit, where it would need to make sure it reads all
-     * the data it needs from this class, then call reload() with
-     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
-     * the project in which it runs can then also use this class safely, without
-     * interference between PHPUnit's dependencies and the project's dependencies.
-     *
-     * @param  array[] $data A vendor/composer/installed.php data set
-     * @return void
-     *
-     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
-     */
-    public static function reload($data)
-    {
-        self::$installed = $data;
-        self::$installedByVendor = array();
-    }
-
-    /**
-     * @return array[]
-     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
-     */
-    private static function getInstalled()
-    {
-        if (null === self::$canGetVendors) {
-            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
-        }
-
-        $installed = array();
-
-        if (self::$canGetVendors) {
-            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
-                if (isset(self::$installedByVendor[$vendorDir])) {
-                    $installed[] = self::$installedByVendor[$vendorDir];
-                } elseif (is_file($vendorDir.'/composer/installed.php')) {
-                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
-                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
-                        self::$installed = $installed[count($installed) - 1];
-                    }
-                }
-            }
-        }
-
-        if (null === self::$installed) {
-            // only require the installed.php file if this file is loaded from its dumped location,
-            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
-            if (substr(__DIR__, -8, 1) !== 'C') {
-                self::$installed = require __DIR__ . '/installed.php';
-            } else {
-                self::$installed = array();
-            }
-        }
-        $installed[] = self::$installed;
-
-        return $installed;
-    }
-}
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
deleted file mode 100644
index eb814bdf4fddc0e22ca4639c3bd8cb7ef2619edc..0000000000000000000000000000000000000000
--- a/vendor/composer/installed.php
+++ /dev/null
@@ -1,416 +0,0 @@
-<?php return array(
-    'root' => array(
-        'name' => '__root__',
-        'pretty_version' => 'dev-develop',
-        'version' => 'dev-develop',
-        'reference' => 'ea1861a64fad1b68bf43e4a6a4656f2c60ecd661',
-        'type' => 'library',
-        'install_path' => __DIR__ . '/../../',
-        'aliases' => array(),
-        'dev' => true,
-    ),
-    'versions' => array(
-        '__root__' => array(
-            'pretty_version' => 'dev-develop',
-            'version' => 'dev-develop',
-            'reference' => 'ea1861a64fad1b68bf43e4a6a4656f2c60ecd661',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../../',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'doctrine/instantiator' => array(
-            'pretty_version' => '1.4.1',
-            'version' => '1.4.1.0',
-            'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../doctrine/instantiator',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'firebase/php-jwt' => array(
-            'pretty_version' => 'v5.5.1',
-            'version' => '5.5.1.0',
-            'reference' => '83b609028194aa042ea33b5af2d41a7427de80e6',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../firebase/php-jwt',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'jasig/phpcas' => array(
-            'pretty_version' => '1.5.0',
-            'version' => '1.5.0.0',
-            'reference' => 'd6f5797fb568726f34c8e48741776d81e4a2646b',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../jasig/phpcas',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'myclabs/deep-copy' => array(
-            'pretty_version' => '1.11.0',
-            'version' => '1.11.0.0',
-            'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../myclabs/deep-copy',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'nikic/fast-route' => array(
-            'pretty_version' => 'v1.3.0',
-            'version' => '1.3.0.0',
-            'reference' => '181d480e08d9476e61381e04a71b34dc0432e812',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../nikic/fast-route',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'nikic/php-parser' => array(
-            'pretty_version' => 'v4.15.2',
-            'version' => '4.15.2.0',
-            'reference' => 'f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../nikic/php-parser',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phar-io/manifest' => array(
-            'pretty_version' => '2.0.3',
-            'version' => '2.0.3.0',
-            'reference' => '97803eca37d319dfa7826cc2437fc020857acb53',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phar-io/manifest',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phar-io/version' => array(
-            'pretty_version' => '3.2.1',
-            'version' => '3.2.1.0',
-            'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phar-io/version',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phpmailer/phpmailer' => array(
-            'pretty_version' => 'v6.7.1',
-            'version' => '6.7.1.0',
-            'reference' => '49cd7ea3d2563f028d7811f06864a53b1f15ff55',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpmailer/phpmailer',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'phpunit/php-code-coverage' => array(
-            'pretty_version' => '9.2.22',
-            'version' => '9.2.22.0',
-            'reference' => 'e4bf60d2220b4baaa0572986b5d69870226b06df',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpunit/php-code-coverage',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phpunit/php-file-iterator' => array(
-            'pretty_version' => '3.0.6',
-            'version' => '3.0.6.0',
-            'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpunit/php-file-iterator',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phpunit/php-invoker' => array(
-            'pretty_version' => '3.1.1',
-            'version' => '3.1.1.0',
-            'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpunit/php-invoker',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phpunit/php-text-template' => array(
-            'pretty_version' => '2.0.4',
-            'version' => '2.0.4.0',
-            'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpunit/php-text-template',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phpunit/php-timer' => array(
-            'pretty_version' => '5.0.3',
-            'version' => '5.0.3.0',
-            'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpunit/php-timer',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'phpunit/phpunit' => array(
-            'pretty_version' => '9.5.27',
-            'version' => '9.5.27.0',
-            'reference' => 'a2bc7ffdca99f92d959b3f2270529334030bba38',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../phpunit/phpunit',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'pimple/pimple' => array(
-            'pretty_version' => 'v3.5.0',
-            'version' => '3.5.0.0',
-            'reference' => 'a94b3a4db7fb774b3d78dad2315ddc07629e1bed',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../pimple/pimple',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'psr/container' => array(
-            'pretty_version' => '1.1.2',
-            'version' => '1.1.2.0',
-            'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/container',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'psr/http-message' => array(
-            'pretty_version' => '1.0.1',
-            'version' => '1.0.1.0',
-            'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/http-message',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'psr/http-message-implementation' => array(
-            'dev_requirement' => false,
-            'provided' => array(
-                0 => '1.0',
-            ),
-        ),
-        'psr/log' => array(
-            'pretty_version' => '1.1.4',
-            'version' => '1.1.4.0',
-            'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../psr/log',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'respect/stringifier' => array(
-            'pretty_version' => '0.2.0',
-            'version' => '0.2.0.0',
-            'reference' => 'e55af3c8aeaeaa2abb5fa47a58a8e9688cc23b59',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../respect/stringifier',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'respect/validation' => array(
-            'pretty_version' => '2.2.3',
-            'version' => '2.2.3.0',
-            'reference' => '4c21a7ffc9a4915673cb2c2843963919e664e627',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../respect/validation',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'sebastian/cli-parser' => array(
-            'pretty_version' => '1.0.1',
-            'version' => '1.0.1.0',
-            'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/cli-parser',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/code-unit' => array(
-            'pretty_version' => '1.0.8',
-            'version' => '1.0.8.0',
-            'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/code-unit',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/code-unit-reverse-lookup' => array(
-            'pretty_version' => '2.0.3',
-            'version' => '2.0.3.0',
-            'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/comparator' => array(
-            'pretty_version' => '4.0.8',
-            'version' => '4.0.8.0',
-            'reference' => 'fa0f136dd2334583309d32b62544682ee972b51a',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/comparator',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/complexity' => array(
-            'pretty_version' => '2.0.2',
-            'version' => '2.0.2.0',
-            'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/complexity',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/diff' => array(
-            'pretty_version' => '4.0.4',
-            'version' => '4.0.4.0',
-            'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/diff',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/environment' => array(
-            'pretty_version' => '5.1.4',
-            'version' => '5.1.4.0',
-            'reference' => '1b5dff7bb151a4db11d49d90e5408e4e938270f7',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/environment',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/exporter' => array(
-            'pretty_version' => '4.0.5',
-            'version' => '4.0.5.0',
-            'reference' => 'ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/exporter',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/global-state' => array(
-            'pretty_version' => '5.0.5',
-            'version' => '5.0.5.0',
-            'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/global-state',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/lines-of-code' => array(
-            'pretty_version' => '1.0.3',
-            'version' => '1.0.3.0',
-            'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/lines-of-code',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/object-enumerator' => array(
-            'pretty_version' => '4.0.4',
-            'version' => '4.0.4.0',
-            'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/object-enumerator',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/object-reflector' => array(
-            'pretty_version' => '2.0.4',
-            'version' => '2.0.4.0',
-            'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/object-reflector',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/recursion-context' => array(
-            'pretty_version' => '4.0.4',
-            'version' => '4.0.4.0',
-            'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/recursion-context',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/resource-operations' => array(
-            'pretty_version' => '3.0.3',
-            'version' => '3.0.3.0',
-            'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/resource-operations',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/type' => array(
-            'pretty_version' => '3.2.0',
-            'version' => '3.2.0.0',
-            'reference' => 'fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/type',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'sebastian/version' => array(
-            'pretty_version' => '3.0.2',
-            'version' => '3.0.2.0',
-            'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../sebastian/version',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-        'setasign/fpdi' => array(
-            'pretty_version' => 'v2.3.6',
-            'version' => '2.3.6.0',
-            'reference' => '6231e315f73e4f62d72b73f3d6d78ff0eed93c31',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../setasign/fpdi',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'setasign/fpdi-tcpdf' => array(
-            'pretty_version' => 'v2.3.0',
-            'version' => '2.3.0.0',
-            'reference' => 'f6711a95cba64db16e1a63e1b6195827a2150c93',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../setasign/fpdi-tcpdf',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'slim/slim' => array(
-            'pretty_version' => '3.12.4',
-            'version' => '3.12.4.0',
-            'reference' => 'ce3cb65a06325fc9fe3d0223f2ae23113a767304',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../slim/slim',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'symfony/polyfill-mbstring' => array(
-            'pretty_version' => 'v1.27.0',
-            'version' => '1.27.0.0',
-            'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'tecnickcom/tcpdf' => array(
-            'pretty_version' => '6.6.2',
-            'version' => '6.6.2.0',
-            'reference' => 'e3cffc9bcbc76e89e167e9eb0bbda0cab7518459',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../tecnickcom/tcpdf',
-            'aliases' => array(),
-            'dev_requirement' => false,
-        ),
-        'theseer/tokenizer' => array(
-            'pretty_version' => '1.2.1',
-            'version' => '1.2.1.0',
-            'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e',
-            'type' => 'library',
-            'install_path' => __DIR__ . '/../theseer/tokenizer',
-            'aliases' => array(),
-            'dev_requirement' => true,
-        ),
-    ),
-);
diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php
deleted file mode 100644
index 580fa9609554b6be9fc475f7e0dc71c59d47138e..0000000000000000000000000000000000000000
--- a/vendor/composer/platform_check.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-// platform_check.php @generated by Composer
-
-$issues = array();
-
-if (!(PHP_VERSION_ID >= 70400)) {
-    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
-}
-
-if ($issues) {
-    if (!headers_sent()) {
-        header('HTTP/1.1 500 Internal Server Error');
-    }
-    if (!ini_get('display_errors')) {
-        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
-            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
-        } elseif (!headers_sent()) {
-            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
-        }
-    }
-    trigger_error(
-        'Composer detected issues in your platform: ' . implode(' ', $issues),
-        E_USER_ERROR
-    );
-}
diff --git a/vendor/fig/http-message-util/.gitignore b/vendor/fig/http-message-util/.gitignore
deleted file mode 100644
index 48b8bf9072d8716346ec810e5a1808305c97d50f..0000000000000000000000000000000000000000
--- a/vendor/fig/http-message-util/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vendor/
diff --git a/vendor/fig/http-message-util/CHANGELOG.md b/vendor/fig/http-message-util/CHANGELOG.md
deleted file mode 100644
index 1a02e547f0b2f22b04d038df6be7a1cfd418d16f..0000000000000000000000000000000000000000
--- a/vendor/fig/http-message-util/CHANGELOG.md
+++ /dev/null
@@ -1,147 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file, in reverse chronological order by release.
-
-## 1.1.5 - 2020-11-24
-
-### Added
-
-- [#19](https://github.com/php-fig/http-message-util/pull/19) adds support for PHP 8.
-
-### Changed
-
-- Nothing.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- Nothing.
-
-## 1.1.4 - 2020-02-05
-
-### Added
-
-- Nothing.
-
-### Changed
-
-- Nothing.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- [#15](https://github.com/php-fig/http-message-util/pull/15) removes the dependency on psr/http-message, as it is not technically necessary for usage of this package.
-
-### Fixed
-
-- Nothing.
-
-## 1.1.3 - 2018-11-19
-
-### Added
-
-- [#10](https://github.com/php-fig/http-message-util/pull/10) adds the constants `StatusCodeInterface::STATUS_EARLY_HINTS` (103) and
-  `StatusCodeInterface::STATUS_TOO_EARLY` (425).
-
-### Changed
-
-- Nothing.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- Nothing.
-
-## 1.1.2 - 2017-02-09
-
-### Added
-
-- [#4](https://github.com/php-fig/http-message-util/pull/4) adds the constant
-  `StatusCodeInterface::STATUS_MISDIRECTED_REQUEST` (421).
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- Nothing.
-
-## 1.1.1 - 2017-02-06
-
-### Added
-
-- [#3](https://github.com/php-fig/http-message-util/pull/3) adds the constant
-  `StatusCodeInterface::STATUS_IM_A_TEAPOT` (418).
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- Nothing.
-
-## 1.1.0 - 2016-09-19
-
-### Added
-
-- [#1](https://github.com/php-fig/http-message-util/pull/1) adds
-  `Fig\Http\Message\StatusCodeInterface`, with constants named after common
-  status reason phrases, with values indicating the status codes themselves.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- Nothing.
-
-## 1.0.0 - 2017-08-05
-
-### Added
-
-- Adds `Fig\Http\Message\RequestMethodInterface`, with constants covering the
-  most common HTTP request methods as specified by the IETF.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- Nothing.
diff --git a/vendor/fig/http-message-util/LICENSE b/vendor/fig/http-message-util/LICENSE
deleted file mode 100644
index e2fa347aea05f86399386a14434ab98e8c7bee26..0000000000000000000000000000000000000000
--- a/vendor/fig/http-message-util/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2016 PHP Framework Interoperability Group
-
-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/vendor/fig/http-message-util/README.md b/vendor/fig/http-message-util/README.md
deleted file mode 100644
index ea5b5aa75539030f2077cb623fb78fa3d66872b3..0000000000000000000000000000000000000000
--- a/vendor/fig/http-message-util/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# PSR Http Message Util
-
-This repository holds utility classes and constants to facilitate common
-operations of [PSR-7](https://www.php-fig.org/psr/psr-7/); the primary purpose is
-to provide constants for referring to request methods, response status codes and
-messages, and potentially common headers.
-
-Implementation of PSR-7 interfaces is **not** within the scope of this package.
-
-## Installation
-
-Install by adding the package as a [Composer](https://getcomposer.org)
-requirement:
-
-```bash
-$ composer require fig/http-message-util
-```
diff --git a/vendor/fig/http-message-util/composer.json b/vendor/fig/http-message-util/composer.json
deleted file mode 100644
index 8645893b040af2063c315901fcea4b7f36af336d..0000000000000000000000000000000000000000
--- a/vendor/fig/http-message-util/composer.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-    "name": "fig/http-message-util",
-    "description": "Utility classes and constants for use with PSR-7 (psr/http-message)",
-    "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"],
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "PHP-FIG",
-            "homepage": "https://www.php-fig.org/"
-        }
-    ],
-    "require": {
-        "php": "^5.3 || ^7.0 || ^8.0"
-    },
-    "suggest": {
-        "psr/http-message": "The package containing the PSR-7 interfaces"
-    },
-    "autoload": {
-        "psr-4": {
-            "Fig\\Http\\Message\\": "src/"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.1.x-dev"
-        }
-    }
-}
diff --git a/vendor/fig/http-message-util/src/RequestMethodInterface.php b/vendor/fig/http-message-util/src/RequestMethodInterface.php
deleted file mode 100644
index 97d9a93bce88e8c8e6ca76bd97f299272eb9d513..0000000000000000000000000000000000000000
--- a/vendor/fig/http-message-util/src/RequestMethodInterface.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Fig\Http\Message;
-
-/**
- * Defines constants for common HTTP request methods.
- *
- * Usage:
- *
- * <code>
- * class RequestFactory implements RequestMethodInterface
- * {
- *     public static function factory(
- *         $uri = '/',
- *         $method = self::METHOD_GET,
- *         $data = []
- *     ) {
- *     }
- * }
- * </code>
- */
-interface RequestMethodInterface
-{
-    const METHOD_HEAD    = 'HEAD';
-    const METHOD_GET     = 'GET';
-    const METHOD_POST    = 'POST';
-    const METHOD_PUT     = 'PUT';
-    const METHOD_PATCH   = 'PATCH';
-    const METHOD_DELETE  = 'DELETE';
-    const METHOD_PURGE   = 'PURGE';
-    const METHOD_OPTIONS = 'OPTIONS';
-    const METHOD_TRACE   = 'TRACE';
-    const METHOD_CONNECT = 'CONNECT';
-}
diff --git a/vendor/fig/http-message-util/src/StatusCodeInterface.php b/vendor/fig/http-message-util/src/StatusCodeInterface.php
deleted file mode 100644
index 99b7e780d4af8cc3b70de8902611d3c851d41b17..0000000000000000000000000000000000000000
--- a/vendor/fig/http-message-util/src/StatusCodeInterface.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-namespace Fig\Http\Message;
-
-/**
- * Defines constants for common HTTP status code.
- *
- * @see https://tools.ietf.org/html/rfc2295#section-8.1
- * @see https://tools.ietf.org/html/rfc2324#section-2.3
- * @see https://tools.ietf.org/html/rfc2518#section-9.7
- * @see https://tools.ietf.org/html/rfc2774#section-7
- * @see https://tools.ietf.org/html/rfc3229#section-10.4
- * @see https://tools.ietf.org/html/rfc4918#section-11
- * @see https://tools.ietf.org/html/rfc5842#section-7.1
- * @see https://tools.ietf.org/html/rfc5842#section-7.2
- * @see https://tools.ietf.org/html/rfc6585#section-3
- * @see https://tools.ietf.org/html/rfc6585#section-4
- * @see https://tools.ietf.org/html/rfc6585#section-5
- * @see https://tools.ietf.org/html/rfc6585#section-6
- * @see https://tools.ietf.org/html/rfc7231#section-6
- * @see https://tools.ietf.org/html/rfc7238#section-3
- * @see https://tools.ietf.org/html/rfc7725#section-3
- * @see https://tools.ietf.org/html/rfc7540#section-9.1.2
- * @see https://tools.ietf.org/html/rfc8297#section-2
- * @see https://tools.ietf.org/html/rfc8470#section-7
- * Usage:
- *
- * <code>
- * class ResponseFactory implements StatusCodeInterface
- * {
- *     public function createResponse($code = self::STATUS_OK)
- *     {
- *     }
- * }
- * </code>
- */
-interface StatusCodeInterface
-{
-    // Informational 1xx
-    const STATUS_CONTINUE = 100;
-    const STATUS_SWITCHING_PROTOCOLS = 101;
-    const STATUS_PROCESSING = 102;
-    const STATUS_EARLY_HINTS = 103;
-    // Successful 2xx
-    const STATUS_OK = 200;
-    const STATUS_CREATED = 201;
-    const STATUS_ACCEPTED = 202;
-    const STATUS_NON_AUTHORITATIVE_INFORMATION = 203;
-    const STATUS_NO_CONTENT = 204;
-    const STATUS_RESET_CONTENT = 205;
-    const STATUS_PARTIAL_CONTENT = 206;
-    const STATUS_MULTI_STATUS = 207;
-    const STATUS_ALREADY_REPORTED = 208;
-    const STATUS_IM_USED = 226;
-    // Redirection 3xx
-    const STATUS_MULTIPLE_CHOICES = 300;
-    const STATUS_MOVED_PERMANENTLY = 301;
-    const STATUS_FOUND = 302;
-    const STATUS_SEE_OTHER = 303;
-    const STATUS_NOT_MODIFIED = 304;
-    const STATUS_USE_PROXY = 305;
-    const STATUS_RESERVED = 306;
-    const STATUS_TEMPORARY_REDIRECT = 307;
-    const STATUS_PERMANENT_REDIRECT = 308;
-    // Client Errors 4xx
-    const STATUS_BAD_REQUEST = 400;
-    const STATUS_UNAUTHORIZED = 401;
-    const STATUS_PAYMENT_REQUIRED = 402;
-    const STATUS_FORBIDDEN = 403;
-    const STATUS_NOT_FOUND = 404;
-    const STATUS_METHOD_NOT_ALLOWED = 405;
-    const STATUS_NOT_ACCEPTABLE = 406;
-    const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407;
-    const STATUS_REQUEST_TIMEOUT = 408;
-    const STATUS_CONFLICT = 409;
-    const STATUS_GONE = 410;
-    const STATUS_LENGTH_REQUIRED = 411;
-    const STATUS_PRECONDITION_FAILED = 412;
-    const STATUS_PAYLOAD_TOO_LARGE = 413;
-    const STATUS_URI_TOO_LONG = 414;
-    const STATUS_UNSUPPORTED_MEDIA_TYPE = 415;
-    const STATUS_RANGE_NOT_SATISFIABLE = 416;
-    const STATUS_EXPECTATION_FAILED = 417;
-    const STATUS_IM_A_TEAPOT = 418;
-    const STATUS_MISDIRECTED_REQUEST = 421;
-    const STATUS_UNPROCESSABLE_ENTITY = 422;
-    const STATUS_LOCKED = 423;
-    const STATUS_FAILED_DEPENDENCY = 424;
-    const STATUS_TOO_EARLY = 425;
-    const STATUS_UPGRADE_REQUIRED = 426;
-    const STATUS_PRECONDITION_REQUIRED = 428;
-    const STATUS_TOO_MANY_REQUESTS = 429;
-    const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431;
-    const STATUS_UNAVAILABLE_FOR_LEGAL_REASONS = 451;
-    // Server Errors 5xx
-    const STATUS_INTERNAL_SERVER_ERROR = 500;
-    const STATUS_NOT_IMPLEMENTED = 501;
-    const STATUS_BAD_GATEWAY = 502;
-    const STATUS_SERVICE_UNAVAILABLE = 503;
-    const STATUS_GATEWAY_TIMEOUT = 504;
-    const STATUS_VERSION_NOT_SUPPORTED = 505;
-    const STATUS_VARIANT_ALSO_NEGOTIATES = 506;
-    const STATUS_INSUFFICIENT_STORAGE = 507;
-    const STATUS_LOOP_DETECTED = 508;
-    const STATUS_NOT_EXTENDED = 510;
-    const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511;
-}
diff --git a/vendor/jasig/phpcas/.codecov.yml b/vendor/jasig/phpcas/.codecov.yml
deleted file mode 100644
index ddfdd0effb1e4281e5c491fdc9ca17732e90decf..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/.codecov.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-codecov:
-  strict_yaml_branch: master
-
-coverage:
-  round: up
-  precision: 2
-  status:
-    project:
-      default:
-        target: "70%"
-        informational: true
-    patch: # temporarily disabled
-      default:
-        target: "70%"
-        informational: true
-
-comment: false
diff --git a/vendor/jasig/phpcas/.gitattributes b/vendor/jasig/phpcas/.gitattributes
deleted file mode 100644
index 3e28f4e42547c0a169f22cdd635821f6c1aa0cbb..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/.gitattributes
+++ /dev/null
@@ -1,7 +0,0 @@
-/docs/ export-ignore
-/test/ export-ignore
-/utils/ export-ignore
-/.buildpath export-ignore
-/.gitignore export-ignore
-/.project export-ignore
-/.travis.yml export-ignore
diff --git a/vendor/jasig/phpcas/.github/dependabot.yml b/vendor/jasig/phpcas/.github/dependabot.yml
deleted file mode 100644
index c630ffa6b3f0586c39cd467330f7578bfbba94ef..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/.github/dependabot.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-version: 2
-updates:
-- package-ecosystem: composer
-  directory: "/"
-  schedule:
-    interval: daily
-  open-pull-requests-limit: 10
diff --git a/vendor/jasig/phpcas/.github/workflows/test.yml b/vendor/jasig/phpcas/.github/workflows/test.yml
deleted file mode 100644
index 081e334d61d21cac856cbfcd937a39829e3c0f9b..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/.github/workflows/test.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-name: Test
-
-on:
-  - push
-  - pull_request
-
-jobs:
-  test:
-    runs-on: ubuntu-latest
-
-    strategy:
-      fail-fast: false
-      matrix:
-        php-version:
-          - php: '7.2'
-            phpunit: '8' 
-          - php: '7.3'
-            phpunit: latest
-          - php: '7.4'
-            phpunit: latest
-          - php: '8.0'
-            phpunit: latest
-          - php: '8.1'
-            phpunit: latest
-    steps:
-      - uses: actions/checkout@v2
-      - uses: php-actions/composer@v6
-        with:
-          php_version: "${{ matrix.php-version.php }}"
-      - name: Run PHPUnit
-        uses: php-actions/phpunit@v3
-        with:
-          version: "${{ matrix.php-version.phpunit }}"
-          php_version: "${{ matrix.php-version.php }}"
-          php_extensions: xdebug
-          args: --verbose --coverage-clover=coverage.xml
-          bootstrap: vendor/autoload.php
-        env:
-          XDEBUG_MODE: coverage
-      - name: Report coverage
-        uses: codecov/codecov-action@v1
-        with:
-          files: coverage.xml
diff --git a/vendor/jasig/phpcas/CAS.php b/vendor/jasig/phpcas/CAS.php
deleted file mode 100644
index 6ddcf07bce13189b8f89d2c910fb43d652501773..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/CAS.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-require_once __DIR__.'/source/CAS.php';
-
-trigger_error('Including CAS.php is deprecated. Install phpCAS using composer instead.', E_USER_DEPRECATED);
diff --git a/vendor/jasig/phpcas/LICENSE b/vendor/jasig/phpcas/LICENSE
deleted file mode 100644
index 261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/vendor/jasig/phpcas/NOTICE b/vendor/jasig/phpcas/NOTICE
deleted file mode 100644
index 70d9ffcd4c5c5cf06c9356ec2b988d6888441944..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/NOTICE
+++ /dev/null
@@ -1,81 +0,0 @@
-Copyright 2007-2011, JA-SIG, Inc.
-This project includes software developed by Jasig.
-http://www.jasig.org/
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this software except in compliance with the License.
-You may obtain a copy of the License at:
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-===========================================================================
-
-Copyright © 2003-2007, The ESUP-Portail consortium
-
-Requirements for sources originally licensed under the New BSD License:
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-- Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation
-and/or other materials provided with the distribution.
-
-- Neither the name of JA-SIG, Inc. nor the names of its contributors may be
-used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-===========================================================================
-
-Copyright (c) 2009, Regents of the University of Nebraska
-All rights reserved.
-
-Requirements for CAS_Autloader originally licensed under the New BSD License:
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this list
-of conditions and the following disclaimer.
-
-Redistributions in binary form must reproduce the above copyright notice, this
-list of conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution.
-
-Neither the name of the University of Nebraska nor the names of its contributors
-may be used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/jasig/phpcas/README.md b/vendor/jasig/phpcas/README.md
deleted file mode 100644
index d48128912e8a7eb1d977af95aa210b45b6c2820f..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-phpCAS
-=======
-
-phpCAS is an authentication library that allows PHP applications to easily authenticate
-users via a Central Authentication Service (CAS) server.
-
-Please see the wiki website for more information:
-
-https://apereo.github.io/phpCAS/
-
-Api documentation can be found here:
-
-https://apereo.github.io/phpCAS/api/
-
-
-[![Test](https://github.com/apereo/phpCAS/actions/workflows/test.yml/badge.svg)](https://github.com/apereo/phpCAS/actions/workflows/test.yml)
-
-LICENSE
--------
-
-Copyright 2007-2020, Apereo Foundation.
-This project includes software developed by Apereo Foundation.
-http://www.apereo.org/
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this software except in compliance with the License.
-You may obtain a copy of the License at:
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/vendor/jasig/phpcas/composer.json b/vendor/jasig/phpcas/composer.json
deleted file mode 100644
index 89ab7b9f61d61bdf934b4a6e9f741318450af999..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/composer.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-	"name" : "apereo/phpcas",
-	"description" : "Provides a simple API for authenticating users against a CAS server",
-	"keywords" : [
-		"cas",
-		"jasig",
-		"apereo"
-	],
-	"homepage" : "https://wiki.jasig.org/display/CASC/phpCAS",
-	"type" : "library",
-	"license" : "Apache-2.0",
-	"authors" : [{
-			"name" : "Joachim Fritschi",
-			"homepage" : "https://github.com/jfritschi",
-			"email" : "jfritschi@freenet.de"
-		}, {
-			"name" : "Adam Franco",
-			"homepage" : "https://github.com/adamfranco"
-		}, {
-			"name" : "Henry Pan",
-			"homepage" : "https://github.com/phy25"
-		}
-	],
-	"require" : {
-		"php" : ">=7.1.0",
-		"ext-curl" : "*",
-		"ext-dom"  : "*",
-		"psr/log" : "^1.0 || ^2.0 || ^3.0"
-    },
-	"require-dev" : {
-		"monolog/monolog" : "^1.0.0 || ^2.0.0",
-		"phpunit/phpunit" : ">=7.5", 
-		"phpstan/phpstan" : "^1.5"
-	},
-	"autoload" : {
-		"classmap" : [
-			"source/"
-		]
-	},
-	"autoload-dev" : {
-		"files": ["source/CAS.php"],
-		"psr-4" : {
-			"PhpCas\\" : "test/CAS/"
-		}
-	},
-	"scripts" : {
-		"test" : "phpunit", 
-		"phpstan" : "phpstan"
-	},
-	"extra" : {
-		"branch-alias" : {
-			"dev-master" : "1.3.x-dev"
-		}
-	}
-}
diff --git a/vendor/jasig/phpcas/phpunit.xml.dist b/vendor/jasig/phpcas/phpunit.xml.dist
deleted file mode 100644
index f0431f153faf9f4b1a2f8b4a1d4a3a780d4ebfb9..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/phpunit.xml.dist
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="source/CAS.php" convertNoticesToExceptions="false" colors="true" stderr="true" backupGlobals="true" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
-  <coverage includeUncoveredFiles="false">
-    <include>
-      <directory>source/</directory>
-    </include>
-  </coverage>
-  <testsuites>
-    <testsuite name="phpCAS Tests">
-      <directory>test/CAS/Tests/</directory>
-    </testsuite>
-  </testsuites>
-</phpunit>
diff --git a/vendor/jasig/phpcas/source/CAS.php b/vendor/jasig/phpcas/source/CAS.php
deleted file mode 100644
index c30e22d0ab570d5a1550aa3b9f383b9f2eae42cb..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS.php
+++ /dev/null
@@ -1,2065 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- *
- * Interface class of the phpCAS library
- * PHP Version 7
- *
- * @file     CAS/CAS.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @author   Olivier Berger <olivier.berger@it-sudparis.eu>
- * @author   Brett Bieber <brett.bieber@gmail.com>
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- * @ingroup public
- */
-
-use Psr\Log\LoggerInterface;
-
-//
-// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI']
-// in IIS
-//
-if (!isset($_SERVER['REQUEST_URI']) && isset($_SERVER['SCRIPT_NAME']) && isset($_SERVER['QUERY_STRING'])) {
-    $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
-}
-
-
-// ########################################################################
-//  CONSTANTS
-// ########################################################################
-
-// ------------------------------------------------------------------------
-//  CAS VERSIONS
-// ------------------------------------------------------------------------
-
-/**
- * phpCAS version. accessible for the user by phpCAS::getVersion().
- */
-define('PHPCAS_VERSION', '1.5.0');
-
-/**
- * @addtogroup public
- * @{
- */
-
-/**
- * phpCAS supported protocols. accessible for the user by phpCAS::getSupportedProtocols().
- */
-
-/**
- * CAS version 1.0
- */
-define("CAS_VERSION_1_0", '1.0');
-/*!
- * CAS version 2.0
-*/
-define("CAS_VERSION_2_0", '2.0');
-/**
- * CAS version 3.0
- */
-define("CAS_VERSION_3_0", '3.0');
-
-// ------------------------------------------------------------------------
-//  SAML defines
-// ------------------------------------------------------------------------
-
-/**
- * SAML protocol
- */
-define("SAML_VERSION_1_1", 'S1');
-
-/**
- * XML header for SAML POST
- */
-define("SAML_XML_HEADER", '<?xml version="1.0" encoding="UTF-8"?>');
-
-/**
- * SOAP envelope for SAML POST
- */
-define("SAML_SOAP_ENV", '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/>');
-
-/**
- * SOAP body for SAML POST
- */
-define("SAML_SOAP_BODY", '<SOAP-ENV:Body>');
-
-/**
- * SAMLP request
- */
-define("SAMLP_REQUEST", '<samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"  MajorVersion="1" MinorVersion="1" RequestID="_192.168.16.51.1024506224022" IssueInstant="2002-06-19T17:03:44.022Z">');
-define("SAMLP_REQUEST_CLOSE", '</samlp:Request>');
-
-/**
- * SAMLP artifact tag (for the ticket)
- */
-define("SAML_ASSERTION_ARTIFACT", '<samlp:AssertionArtifact>');
-
-/**
- * SAMLP close
- */
-define("SAML_ASSERTION_ARTIFACT_CLOSE", '</samlp:AssertionArtifact>');
-
-/**
- * SOAP body close
- */
-define("SAML_SOAP_BODY_CLOSE", '</SOAP-ENV:Body>');
-
-/**
- * SOAP envelope close
- */
-define("SAML_SOAP_ENV_CLOSE", '</SOAP-ENV:Envelope>');
-
-/**
- * SAML Attributes
- */
-define("SAML_ATTRIBUTES", 'SAMLATTRIBS');
-
-/** @} */
-/**
- * @addtogroup publicPGTStorage
- * @{
- */
-// ------------------------------------------------------------------------
-//  FILE PGT STORAGE
-// ------------------------------------------------------------------------
-/**
- * Default path used when storing PGT's to file
- */
-define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH", session_save_path());
-/** @} */
-// ------------------------------------------------------------------------
-// SERVICE ACCESS ERRORS
-// ------------------------------------------------------------------------
-/**
- * @addtogroup publicServices
- * @{
- */
-
-/**
- * phpCAS::service() error code on success
- */
-define("PHPCAS_SERVICE_OK", 0);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the CAS server did not respond.
- */
-define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE", 1);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the response of the CAS server was ill-formed.
- */
-define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE", 2);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the CAS server did not want to.
- */
-define("PHPCAS_SERVICE_PT_FAILURE", 3);
-/**
- * phpCAS::service() error code when the service was not available.
- */
-define("PHPCAS_SERVICE_NOT_AVAILABLE", 4);
-
-// ------------------------------------------------------------------------
-// SERVICE TYPES
-// ------------------------------------------------------------------------
-/**
- * phpCAS::getProxiedService() type for HTTP GET
- */
-define("PHPCAS_PROXIED_SERVICE_HTTP_GET", 'CAS_ProxiedService_Http_Get');
-/**
- * phpCAS::getProxiedService() type for HTTP POST
- */
-define("PHPCAS_PROXIED_SERVICE_HTTP_POST", 'CAS_ProxiedService_Http_Post');
-/**
- * phpCAS::getProxiedService() type for IMAP
- */
-define("PHPCAS_PROXIED_SERVICE_IMAP", 'CAS_ProxiedService_Imap');
-
-
-/** @} */
-// ------------------------------------------------------------------------
-//  LANGUAGES
-// ------------------------------------------------------------------------
-/**
- * @addtogroup publicLang
- * @{
- */
-
-define("PHPCAS_LANG_ENGLISH", 'CAS_Languages_English');
-define("PHPCAS_LANG_FRENCH", 'CAS_Languages_French');
-define("PHPCAS_LANG_GREEK", 'CAS_Languages_Greek');
-define("PHPCAS_LANG_GERMAN", 'CAS_Languages_German');
-define("PHPCAS_LANG_JAPANESE", 'CAS_Languages_Japanese');
-define("PHPCAS_LANG_SPANISH", 'CAS_Languages_Spanish');
-define("PHPCAS_LANG_CATALAN", 'CAS_Languages_Catalan');
-define("PHPCAS_LANG_CHINESE_SIMPLIFIED", 'CAS_Languages_ChineseSimplified');
-define("PHPCAS_LANG_GALEGO", 'CAS_Languages_Galego');
-define("PHPCAS_LANG_PORTUGUESE", 'CAS_Languages_Portuguese');
-
-/** @} */
-
-/**
- * @addtogroup internalLang
- * @{
- */
-
-/**
- * phpCAS default language (when phpCAS::setLang() is not used)
- */
-define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);
-
-/** @} */
-// ------------------------------------------------------------------------
-//  DEBUG
-// ------------------------------------------------------------------------
-/**
- * @addtogroup publicDebug
- * @{
- */
-
-/**
- * The default directory for the debug file under Unix.
- * @return  string directory for the debug file
- */
-function gettmpdir() {
-if (!empty($_ENV['TMP'])) { return realpath($_ENV['TMP']); }
-if (!empty($_ENV['TMPDIR'])) { return realpath( $_ENV['TMPDIR']); }
-if (!empty($_ENV['TEMP'])) { return realpath( $_ENV['TEMP']); }
-return "/tmp";
-}
-define('DEFAULT_DEBUG_DIR', gettmpdir()."/");
-
-/** @} */
-
-// include the class autoloader
-require_once __DIR__ . '/CAS/Autoload.php';
-
-/**
- * The phpCAS class is a simple container for the phpCAS library. It provides CAS
- * authentication for web applications written in PHP.
- *
- * @ingroup public
- * @class phpCAS
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @author   Olivier Berger <olivier.berger@it-sudparis.eu>
- * @author   Brett Bieber <brett.bieber@gmail.com>
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-class phpCAS
-{
-
-    /**
-     * This variable is used by the interface class phpCAS.
-     *
-     * @var CAS_Client
-     * @hideinitializer
-     */
-    private static $_PHPCAS_CLIENT;
-
-    /**
-     * @var array
-     * This variable is used to store where the initializer is called from
-     * (to print a comprehensive error in case of multiple calls).
-     *
-     * @hideinitializer
-     */
-    private static $_PHPCAS_INIT_CALL;
-
-    /**
-     * @var array
-     * This variable is used to store phpCAS debug mode.
-     *
-     * @hideinitializer
-     */
-    private static $_PHPCAS_DEBUG;
-
-    /**
-     * This variable is used to enable verbose mode
-     * This pevents debug info to be show to the user. Since it's a security
-     * feature the default is false
-     *
-     * @hideinitializer
-     */
-    private static $_PHPCAS_VERBOSE = false;
-
-
-    // ########################################################################
-    //  INITIALIZATION
-    // ########################################################################
-
-    /**
-     * @addtogroup publicInit
-     * @{
-     */
-
-    /**
-     * phpCAS client initializer.
-     *
-     * @param string                   $server_version  the version of the CAS server
-     * @param string                   $server_hostname the hostname of the CAS server
-     * @param int                      $server_port     the port the CAS server is running on
-     * @param string                   $server_uri      the URI the CAS server is responding on
-     * @param bool                     $changeSessionID Allow phpCAS to change the session_id
-     *                                                  (Single Sign Out/handleLogoutRequests
-     *                                                  is based on that change)
-     * @param \SessionHandlerInterface $sessionHandler  the session handler
-     *
-     * @return void a newly created CAS_Client object
-     * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
-     * called, only once, and before all other methods (except phpCAS::getVersion()
-     * and phpCAS::setDebug()).
-     */
-    public static function client($server_version, $server_hostname,
-        $server_port, $server_uri, $changeSessionID = true, \SessionHandlerInterface $sessionHandler = null
-    ) {
-        phpCAS :: traceBegin();
-        if (is_object(self::$_PHPCAS_CLIENT)) {
-            phpCAS :: error(self::$_PHPCAS_INIT_CALL['method'] . '() has already been called (at ' . self::$_PHPCAS_INIT_CALL['file'] . ':' . self::$_PHPCAS_INIT_CALL['line'] . ')');
-        }
-
-        // store where the initializer is called from
-        $dbg = debug_backtrace();
-        self::$_PHPCAS_INIT_CALL = array (
-            'done' => true,
-            'file' => $dbg[0]['file'],
-            'line' => $dbg[0]['line'],
-            'method' => __CLASS__ . '::' . __FUNCTION__
-        );
-
-        // initialize the object $_PHPCAS_CLIENT
-        try {
-            self::$_PHPCAS_CLIENT = new CAS_Client(
-                $server_version, false, $server_hostname, $server_port, $server_uri,
-                $changeSessionID, $sessionHandler
-            );
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * phpCAS proxy initializer.
-     *
-     * @param string                   $server_version  the version of the CAS server
-     * @param string                   $server_hostname the hostname of the CAS server
-     * @param string                   $server_port     the port the CAS server is running on
-     * @param string                   $server_uri      the URI the CAS server is responding on
-     * @param bool                     $changeSessionID Allow phpCAS to change the session_id
-     *                                                  (Single Sign Out/handleLogoutRequests
-     *                                                  is based on that change)
-     * @param \SessionHandlerInterface $sessionHandler  the session handler
-     *
-     * @return void a newly created CAS_Client object
-     * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
-     * called, only once, and before all other methods (except phpCAS::getVersion()
-     * and phpCAS::setDebug()).
-     */
-    public static function proxy($server_version, $server_hostname,
-        $server_port, $server_uri, $changeSessionID = true, \SessionHandlerInterface $sessionHandler = null
-    ) {
-        phpCAS :: traceBegin();
-        if (is_object(self::$_PHPCAS_CLIENT)) {
-            phpCAS :: error(self::$_PHPCAS_INIT_CALL['method'] . '() has already been called (at ' . self::$_PHPCAS_INIT_CALL['file'] . ':' . self::$_PHPCAS_INIT_CALL['line'] . ')');
-        }
-
-        // store where the initialzer is called from
-        $dbg = debug_backtrace();
-        self::$_PHPCAS_INIT_CALL = array (
-            'done' => true,
-            'file' => $dbg[0]['file'],
-            'line' => $dbg[0]['line'],
-            'method' => __CLASS__ . '::' . __FUNCTION__
-        );
-
-        // initialize the object $_PHPCAS_CLIENT
-        try {
-            self::$_PHPCAS_CLIENT = new CAS_Client(
-                $server_version, true, $server_hostname, $server_port, $server_uri,
-                $changeSessionID, $sessionHandler
-            );
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Answer whether or not the client or proxy has been initialized
-     *
-     * @return bool
-     */
-    public static function isInitialized ()
-    {
-        return (is_object(self::$_PHPCAS_CLIENT));
-    }
-
-    /** @} */
-    // ########################################################################
-    //  DEBUGGING
-    // ########################################################################
-
-    /**
-     * @addtogroup publicDebug
-     * @{
-     */
-
-    /**
-     * Set/unset PSR-3 logger
-     *
-     * @param LoggerInterface $logger the PSR-3 logger used for logging, or
-     * null to stop logging.
-     *
-     * @return void
-     */
-    public static function setLogger($logger = null)
-    {
-        if (empty(self::$_PHPCAS_DEBUG['unique_id'])) {
-            self::$_PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))), 0, 4);
-        }
-        self::$_PHPCAS_DEBUG['logger'] = $logger;
-        self::$_PHPCAS_DEBUG['indent'] = 0;
-        phpCAS :: trace('START ('.date("Y-m-d H:i:s").') phpCAS-' . PHPCAS_VERSION . ' ******************');
-    }
-
-    /**
-     * Set/unset debug mode
-     *
-     * @param string $filename the name of the file used for logging, or false
-     * to stop debugging.
-     *
-     * @return void
-     *
-     * @deprecated
-     */
-    public static function setDebug($filename = '')
-    {
-        trigger_error('phpCAS::setDebug() is deprecated in favor of phpCAS::setLogger().', E_USER_DEPRECATED);
-
-        if ($filename != false && gettype($filename) != 'string') {
-            phpCAS :: error('type mismatched for parameter $dbg (should be false or the name of the log file)');
-        }
-        if ($filename === false) {
-            self::$_PHPCAS_DEBUG['filename'] = false;
-
-        } else {
-            if (empty ($filename)) {
-                if (preg_match('/^Win.*/', getenv('OS'))) {
-                    if (isset ($_ENV['TMP'])) {
-                        $debugDir = $_ENV['TMP'] . '/';
-                    } else {
-                        $debugDir = '';
-                    }
-                } else {
-                    $debugDir = DEFAULT_DEBUG_DIR;
-                }
-                $filename = $debugDir . 'phpCAS.log';
-            }
-
-            if (empty (self::$_PHPCAS_DEBUG['unique_id'])) {
-                self::$_PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))), 0, 4);
-            }
-
-            self::$_PHPCAS_DEBUG['filename'] = $filename;
-            self::$_PHPCAS_DEBUG['indent'] = 0;
-
-            phpCAS :: trace('START ('.date("Y-m-d H:i:s").') phpCAS-' . PHPCAS_VERSION . ' ******************');
-        }
-    }
-
-    /**
-     * Enable verbose errors messages in the website output
-     * This is a security relevant since internal status info may leak an may
-     * help an attacker. Default is therefore false
-     *
-     * @param bool $verbose enable verbose output
-     *
-     * @return void
-     */
-    public static function setVerbose($verbose)
-    {
-        if ($verbose === true) {
-            self::$_PHPCAS_VERBOSE = true;
-        } else {
-            self::$_PHPCAS_VERBOSE = false;
-        }
-    }
-
-
-    /**
-     * Show is verbose mode is on
-     *
-     * @return bool verbose
-     */
-    public static function getVerbose()
-    {
-        return self::$_PHPCAS_VERBOSE;
-    }
-
-    /**
-     * Logs a string in debug mode.
-     *
-     * @param string $str the string to write
-     *
-     * @return void
-     * @private
-     */
-    public static function log($str)
-    {
-        $indent_str = ".";
-
-
-        if (isset(self::$_PHPCAS_DEBUG['logger']) || !empty(self::$_PHPCAS_DEBUG['filename'])) {
-            for ($i = 0; $i < self::$_PHPCAS_DEBUG['indent']; $i++) {
-
-                $indent_str .= '|    ';
-            }
-            // allow for multiline output with proper identing. Usefull for
-            // dumping cas answers etc.
-            $str2 = str_replace("\n", "\n" . self::$_PHPCAS_DEBUG['unique_id'] . ' ' . $indent_str, $str);
-            $str3 = self::$_PHPCAS_DEBUG['unique_id'] . ' ' . $indent_str . $str2;
-            if (isset(self::$_PHPCAS_DEBUG['logger'])) {
-                self::$_PHPCAS_DEBUG['logger']->info($str3);
-            }
-            if (!empty(self::$_PHPCAS_DEBUG['filename'])) {
-                // Check if file exists and modifiy file permissions to be only
-                // readable by the webserver
-                if (!file_exists(self::$_PHPCAS_DEBUG['filename'])) {
-                    touch(self::$_PHPCAS_DEBUG['filename']);
-                    // Chmod will fail on windows
-                    @chmod(self::$_PHPCAS_DEBUG['filename'], 0600);
-                }
-                error_log($str3 . "\n", 3, self::$_PHPCAS_DEBUG['filename']);
-            }
-        }
-
-    }
-
-    /**
-     * This method is used by interface methods to print an error and where the
-     * function was originally called from.
-     *
-     * @param string $msg the message to print
-     *
-     * @return void
-     * @private
-     */
-    public static function error($msg)
-    {
-        phpCAS :: traceBegin();
-        $dbg = debug_backtrace();
-        $function = '?';
-        $file = '?';
-        $line = '?';
-        if (is_array($dbg)) {
-            for ($i = 1; $i < sizeof($dbg); $i++) {
-                if (is_array($dbg[$i]) && isset($dbg[$i]['class']) ) {
-                    if ($dbg[$i]['class'] == __CLASS__) {
-                        $function = $dbg[$i]['function'];
-                        $file = $dbg[$i]['file'];
-                        $line = $dbg[$i]['line'];
-                    }
-                }
-            }
-        }
-        if (self::$_PHPCAS_VERBOSE) {
-            echo "<br />\n<b>phpCAS error</b>: <font color=\"FF0000\"><b>" . __CLASS__ . "::" . $function . '(): ' . htmlentities($msg) . "</b></font> in <b>" . $file . "</b> on line <b>" . $line . "</b><br />\n";
-        }
-        phpCAS :: trace($msg . ' in ' . $file . 'on line ' . $line );
-        phpCAS :: traceEnd();
-
-        throw new CAS_GracefullTerminationException(__CLASS__ . "::" . $function . '(): ' . $msg);
-    }
-
-    /**
-     * This method is used to log something in debug mode.
-     *
-     * @param string $str string to log
-     *
-     * @return void
-     */
-    public static function trace($str)
-    {
-        $dbg = debug_backtrace();
-        phpCAS :: log($str . ' [' . basename($dbg[0]['file']) . ':' . $dbg[0]['line'] . ']');
-    }
-
-    /**
-     * This method is used to indicate the start of the execution of a function
-     * in debug mode.
-     *
-     * @return void
-     */
-    public static function traceBegin()
-    {
-        $dbg = debug_backtrace();
-        $str = '=> ';
-        if (!empty ($dbg[1]['class'])) {
-            $str .= $dbg[1]['class'] . '::';
-        }
-        $str .= $dbg[1]['function'] . '(';
-        if (is_array($dbg[1]['args'])) {
-            foreach ($dbg[1]['args'] as $index => $arg) {
-                if ($index != 0) {
-                    $str .= ', ';
-                }
-                if (is_object($arg)) {
-                    $str .= get_class($arg);
-                } else {
-                    $str .= str_replace(array("\r\n", "\n", "\r"), "", var_export($arg, true));
-                }
-            }
-        }
-        if (isset($dbg[1]['file'])) {
-            $file = basename($dbg[1]['file']);
-        } else {
-            $file = 'unknown_file';
-        }
-        if (isset($dbg[1]['line'])) {
-            $line = $dbg[1]['line'];
-        } else {
-            $line = 'unknown_line';
-        }
-        $str .= ') [' . $file . ':' . $line . ']';
-        phpCAS :: log($str);
-        if (!isset(self::$_PHPCAS_DEBUG['indent'])) {
-            self::$_PHPCAS_DEBUG['indent'] = 0;
-        } else {
-            self::$_PHPCAS_DEBUG['indent']++;
-        }
-    }
-
-    /**
-     * This method is used to indicate the end of the execution of a function in
-     * debug mode.
-     *
-     * @param mixed $res the result of the function
-     *
-     * @return void
-     */
-    public static function traceEnd($res = '')
-    {
-        if (empty(self::$_PHPCAS_DEBUG['indent'])) {
-            self::$_PHPCAS_DEBUG['indent'] = 0;
-        } else {
-            self::$_PHPCAS_DEBUG['indent']--;
-        }
-        $str = '';
-        if (is_object($res)) {
-            $str .= '<= ' . get_class($res);
-        } else {
-            $str .= '<= ' . str_replace(array("\r\n", "\n", "\r"), "", var_export($res, true));
-        }
-
-        phpCAS :: log($str);
-    }
-
-    /**
-     * This method is used to indicate the end of the execution of the program
-     *
-     * @return void
-     */
-    public static function traceExit()
-    {
-        phpCAS :: log('exit()');
-        while (self::$_PHPCAS_DEBUG['indent'] > 0) {
-            phpCAS :: log('-');
-            self::$_PHPCAS_DEBUG['indent']--;
-        }
-    }
-
-    /** @} */
-    // ########################################################################
-    //  INTERNATIONALIZATION
-    // ########################################################################
-    /**
-    * @addtogroup publicLang
-    * @{
-    */
-
-    /**
-     * This method is used to set the language used by phpCAS.
-     *
-     * @param string $lang string representing the language.
-     *
-     * @return void
-     *
-     * @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH
-     * @note Can be called only once.
-     */
-    public static function setLang($lang)
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setLang($lang);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /** @} */
-    // ########################################################################
-    //  VERSION
-    // ########################################################################
-    /**
-    * @addtogroup public
-    * @{
-    */
-
-    /**
-     * This method returns the phpCAS version.
-     *
-     * @return string the phpCAS version.
-     */
-    public static function getVersion()
-    {
-        return PHPCAS_VERSION;
-    }
-
-    /**
-     * This method returns supported protocols.
-     *
-     * @return array an array of all supported protocols. Use internal protocol name as array key.
-     */
-    public static function getSupportedProtocols()
-    {
-        $supportedProtocols = array();
-        $supportedProtocols[CAS_VERSION_1_0] = 'CAS 1.0';
-        $supportedProtocols[CAS_VERSION_2_0] = 'CAS 2.0';
-        $supportedProtocols[CAS_VERSION_3_0] = 'CAS 3.0';
-        $supportedProtocols[SAML_VERSION_1_1] = 'SAML 1.1';
-
-        return $supportedProtocols;
-    }
-
-    /** @} */
-    // ########################################################################
-    //  HTML OUTPUT
-    // ########################################################################
-    /**
-    * @addtogroup publicOutput
-    * @{
-    */
-
-    /**
-     * This method sets the HTML header used for all outputs.
-     *
-     * @param string $header the HTML header.
-     *
-     * @return void
-     */
-    public static function setHTMLHeader($header)
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setHTMLHeader($header);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * This method sets the HTML footer used for all outputs.
-     *
-     * @param string $footer the HTML footer.
-     *
-     * @return void
-     */
-    public static function setHTMLFooter($footer)
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setHTMLFooter($footer);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /** @} */
-    // ########################################################################
-    //  PGT STORAGE
-    // ########################################################################
-    /**
-    * @addtogroup publicPGTStorage
-    * @{
-    */
-
-    /**
-     * This method can be used to set a custom PGT storage object.
-     *
-     * @param CAS_PGTStorage_AbstractStorage $storage a PGT storage object that inherits from the
-     * CAS_PGTStorage_AbstractStorage class
-     *
-     * @return void
-     */
-    public static function setPGTStorage($storage)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setPGTStorage($storage);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method is used to tell phpCAS to store the response of the
-     * CAS server to PGT requests in a database.
-     *
-     * @param string $dsn_or_pdo     a dsn string to use for creating a PDO
-     * object or a PDO object
-     * @param string $username       the username to use when connecting to the
-     * database
-     * @param string $password       the password to use when connecting to the
-     * database
-     * @param string $table          the table to use for storing and retrieving
-     * PGT's
-     * @param string $driver_options any driver options to use when connecting
-     * to the database
-     *
-     * @return void
-     */
-    public static function setPGTStorageDb($dsn_or_pdo, $username='',
-        $password='', $table='', $driver_options=null
-    ) {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setPGTStorageDb($dsn_or_pdo, $username, $password, $table, $driver_options);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method is used to tell phpCAS to store the response of the
-     * CAS server to PGT requests onto the filesystem.
-     *
-     * @param string $path the path where the PGT's should be stored
-     *
-     * @return void
-     */
-    public static function setPGTStorageFile($path = '')
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setPGTStorageFile($path);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-        phpCAS :: traceEnd();
-    }
-    /** @} */
-    // ########################################################################
-    // ACCESS TO EXTERNAL SERVICES
-    // ########################################################################
-    /**
-    * @addtogroup publicServices
-    * @{
-    */
-
-    /**
-     * Answer a proxy-authenticated service handler.
-     *
-     * @param string $type The service type. One of
-     * PHPCAS_PROXIED_SERVICE_HTTP_GET; PHPCAS_PROXIED_SERVICE_HTTP_POST;
-     * PHPCAS_PROXIED_SERVICE_IMAP
-     *
-     * @return CAS_ProxiedService
-     * @throws InvalidArgumentException If the service type is unknown.
-     */
-    public static function getProxiedService ($type)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            $res = self::$_PHPCAS_CLIENT->getProxiedService($type);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-        return $res;
-    }
-
-    /**
-     * Initialize a proxied-service handler with the proxy-ticket it should use.
-     *
-     * @param CAS_ProxiedService $proxiedService Proxied Service Handler
-     *
-     * @return void
-     * @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
-     *		The code of the Exception will be one of:
-     *			PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_FAILURE
-     */
-    public static function initializeProxiedService (CAS_ProxiedService $proxiedService)
-    {
-        phpCAS::_validateProxyExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->initializeProxiedService($proxiedService);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * This method is used to access an HTTP[S] service.
-     *
-     * @param string $url       the service to access.
-     * @param int &$err_code an error code Possible values are
-     * PHPCAS_SERVICE_OK (on success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE,
-     * PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE, PHPCAS_SERVICE_PT_FAILURE,
-     * PHPCAS_SERVICE_NOT_AVAILABLE.
-     * @param string &$output   the output of the service (also used to give an
-     * error message on failure).
-     *
-     * @return bool true on success, false otherwise (in this later case,
-     * $err_code gives the reason why it failed and $output contains an error
-     * message).
-     */
-    public static function serviceWeb($url, & $err_code, & $output)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            $res = self::$_PHPCAS_CLIENT->serviceWeb($url, $err_code, $output);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd($res);
-        return $res;
-    }
-
-    /**
-     * This method is used to access an IMAP/POP3/NNTP service.
-     *
-     * @param string $url       a string giving the URL of the service,
-     * including the mailing box for IMAP URLs, as accepted by imap_open().
-     * @param string $service   a string giving for CAS retrieve Proxy ticket
-     * @param string $flags     options given to imap_open().
-     * @param int &$err_code an error code Possible values are
-     * PHPCAS_SERVICE_OK (on success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE,
-     * PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE, PHPCAS_SERVICE_PT_FAILURE,
-     * PHPCAS_SERVICE_NOT_AVAILABLE.
-     * @param string &$err_msg  an error message on failure
-     * @param string &$pt       the Proxy Ticket (PT) retrieved from the CAS
-     * server to access the URL on success, false on error).
-     *
-     * @return object|false IMAP stream on success, false otherwise (in this later
-     * case, $err_code gives the reason why it failed and $err_msg contains an
-     * error message).
-     */
-    public static function serviceMail($url, $service, $flags, & $err_code, & $err_msg, & $pt)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            $res = self::$_PHPCAS_CLIENT->serviceMail($url, $service, $flags, $err_code, $err_msg, $pt);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd($res);
-        return $res;
-    }
-
-    /** @} */
-    // ########################################################################
-    //  AUTHENTICATION
-    // ########################################################################
-    /**
-    * @addtogroup publicAuth
-    * @{
-    */
-
-    /**
-     * Set the times authentication will be cached before really accessing the
-     * CAS server in gateway mode:
-     * - -1: check only once, and then never again (until you pree login)
-     * - 0: always check
-     * - n: check every "n" time
-     *
-     * @param int $n an integer.
-     *
-     * @return void
-     */
-    public static function setCacheTimesForAuthRecheck($n)
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-
-    /**
-     * Set a callback function to be run when receiving CAS attributes
-     *
-     * The callback function will be passed an $success_elements
-     * payload of the response (\DOMElement) as its first parameter.
-     *
-     * @param string $function       Callback function
-     * @param array  $additionalArgs optional array of arguments
-     *
-     * @return void
-     */
-    public static function setCasAttributeParserCallback($function, array $additionalArgs = array())
-    {
-        phpCAS::_validateClientExists();
-
-        self::$_PHPCAS_CLIENT->setCasAttributeParserCallback($function, $additionalArgs);
-    }
-
-    /**
-     * Set a callback function to be run when a user authenticates.
-     *
-     * The callback function will be passed a $logoutTicket as its first
-     * parameter, followed by any $additionalArgs you pass. The $logoutTicket
-     * parameter is an opaque string that can be used to map the session-id to
-     * logout request in order to support single-signout in applications that
-     * manage their own sessions (rather than letting phpCAS start the session).
-     *
-     * phpCAS::forceAuthentication() will always exit and forward client unless
-     * they are already authenticated. To perform an action at the moment the user
-     * logs in (such as registering an account, performing logging, etc), register
-     * a callback function here.
-     *
-     * @param callable $function       Callback function
-     * @param array  $additionalArgs optional array of arguments
-     *
-     * @return void
-     */
-    public static function setPostAuthenticateCallback ($function, array $additionalArgs = array())
-    {
-        phpCAS::_validateClientExists();
-
-        self::$_PHPCAS_CLIENT->setPostAuthenticateCallback($function, $additionalArgs);
-    }
-
-    /**
-     * Set a callback function to be run when a single-signout request is
-     * received. The callback function will be passed a $logoutTicket as its
-     * first parameter, followed by any $additionalArgs you pass. The
-     * $logoutTicket parameter is an opaque string that can be used to map a
-     * session-id to the logout request in order to support single-signout in
-     * applications that manage their own sessions (rather than letting phpCAS
-     * start and destroy the session).
-     *
-     * @param callable $function       Callback function
-     * @param array  $additionalArgs optional array of arguments
-     *
-     * @return void
-     */
-    public static function setSingleSignoutCallback ($function, array $additionalArgs = array())
-    {
-        phpCAS::_validateClientExists();
-
-        self::$_PHPCAS_CLIENT->setSingleSignoutCallback($function, $additionalArgs);
-    }
-
-    /**
-     * This method is called to check if the user is already authenticated
-     * locally or has a global cas session. A already existing cas session is
-     * determined by a cas gateway call.(cas login call without any interactive
-     * prompt)
-     *
-     * @return bool true when the user is authenticated, false when a previous
-     * gateway login failed or the function will not return if the user is
-     * redirected to the cas server for a gateway login attempt
-     */
-    public static function checkAuthentication()
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        $auth = self::$_PHPCAS_CLIENT->checkAuthentication();
-
-        // store where the authentication has been checked and the result
-        self::$_PHPCAS_CLIENT->markAuthenticationCall($auth);
-
-        phpCAS :: traceEnd($auth);
-        return $auth;
-    }
-
-    /**
-     * This method is called to force authentication if the user was not already
-     * authenticated. If the user is not authenticated, halt by redirecting to
-     * the CAS server.
-     *
-     * @return bool Authentication
-     */
-    public static function forceAuthentication()
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-        $auth = self::$_PHPCAS_CLIENT->forceAuthentication();
-
-        // store where the authentication has been checked and the result
-        self::$_PHPCAS_CLIENT->markAuthenticationCall($auth);
-
-        /*      if (!$auth) {
-         phpCAS :: trace('user is not authenticated, redirecting to the CAS server');
-        self::$_PHPCAS_CLIENT->forceAuthentication();
-        } else {
-        phpCAS :: trace('no need to authenticate (user `' . phpCAS :: getUser() . '\' is already authenticated)');
-        }*/
-
-        phpCAS :: traceEnd();
-        return $auth;
-    }
-
-    /**
-     * This method is called to renew the authentication.
-     *
-     * @return void
-     **/
-    public static function renewAuthentication()
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        $auth = self::$_PHPCAS_CLIENT->renewAuthentication();
-
-        // store where the authentication has been checked and the result
-        self::$_PHPCAS_CLIENT->markAuthenticationCall($auth);
-
-        //self::$_PHPCAS_CLIENT->renewAuthentication();
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method is called to check if the user is authenticated (previously or by
-     * tickets given in the URL).
-     *
-     * @return bool true when the user is authenticated.
-     */
-    public static function isAuthenticated()
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        // call the isAuthenticated method of the $_PHPCAS_CLIENT object
-        $auth = self::$_PHPCAS_CLIENT->isAuthenticated();
-
-        // store where the authentication has been checked and the result
-        self::$_PHPCAS_CLIENT->markAuthenticationCall($auth);
-
-        phpCAS :: traceEnd($auth);
-        return $auth;
-    }
-
-    /**
-     * Checks whether authenticated based on $_SESSION. Useful to avoid
-     * server calls.
-     *
-     * @return bool true if authenticated, false otherwise.
-     * @since 0.4.22 by Brendan Arnold
-     */
-    public static function isSessionAuthenticated()
-    {
-        phpCAS::_validateClientExists();
-
-        return (self::$_PHPCAS_CLIENT->isSessionAuthenticated());
-    }
-
-    /**
-     * This method returns the CAS user's login name.
-     *
-     * @return string the login name of the authenticated user
-     * @warning should only be called after phpCAS::forceAuthentication()
-     * or phpCAS::checkAuthentication().
-     * */
-    public static function getUser()
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            return self::$_PHPCAS_CLIENT->getUser();
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Answer attributes about the authenticated user.
-     *
-     * @warning should only be called after phpCAS::forceAuthentication()
-     * or phpCAS::checkAuthentication().
-     *
-     * @return array
-     */
-    public static function getAttributes()
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            return self::$_PHPCAS_CLIENT->getAttributes();
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Answer true if there are attributes for the authenticated user.
-     *
-     * @warning should only be called after phpCAS::forceAuthentication()
-     * or phpCAS::checkAuthentication().
-     *
-     * @return bool
-     */
-    public static function hasAttributes()
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            return self::$_PHPCAS_CLIENT->hasAttributes();
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Answer true if an attribute exists for the authenticated user.
-     *
-     * @param string $key attribute name
-     *
-     * @return bool
-     * @warning should only be called after phpCAS::forceAuthentication()
-     * or phpCAS::checkAuthentication().
-     */
-    public static function hasAttribute($key)
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            return self::$_PHPCAS_CLIENT->hasAttribute($key);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Answer an attribute for the authenticated user.
-     *
-     * @param string $key attribute name
-     *
-     * @return mixed string for a single value or an array if multiple values exist.
-     * @warning should only be called after phpCAS::forceAuthentication()
-     * or phpCAS::checkAuthentication().
-     */
-    public static function getAttribute($key)
-    {
-        phpCAS::_validateClientExists();
-
-        try {
-            return self::$_PHPCAS_CLIENT->getAttribute($key);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Handle logout requests.
-     *
-     * @param bool  $check_client    additional safety check
-     * @param array $allowed_clients array of allowed clients
-     *
-     * @return void
-     */
-    public static function handleLogoutRequests($check_client = true, $allowed_clients = array())
-    {
-        phpCAS::_validateClientExists();
-
-        return (self::$_PHPCAS_CLIENT->handleLogoutRequests($check_client, $allowed_clients));
-    }
-
-    /**
-     * This method returns the URL to be used to login.
-     *
-     * @return string the login URL
-     */
-    public static function getServerLoginURL()
-    {
-        phpCAS::_validateClientExists();
-
-        return self::$_PHPCAS_CLIENT->getServerLoginURL();
-    }
-
-    /**
-     * Set the login URL of the CAS server.
-     *
-     * @param string $url the login URL
-     *
-     * @return void
-     * @since 0.4.21 by Wyman Chan
-     */
-    public static function setServerLoginURL($url = '')
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setServerLoginURL($url);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Set the serviceValidate URL of the CAS server.
-     * Used for all CAS versions of URL validations.
-     * Examples:
-     * CAS 1.0 http://www.exemple.com/validate
-     * CAS 2.0 http://www.exemple.com/validateURL
-     * CAS 3.0 http://www.exemple.com/p3/serviceValidate
-     *
-     * @param string $url the serviceValidate URL
-     *
-     * @return void
-     */
-    public static function setServerServiceValidateURL($url = '')
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setServerServiceValidateURL($url);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Set the proxyValidate URL of the CAS server.
-     * Used for all CAS versions of proxy URL validations
-     * Examples:
-     * CAS 1.0 http://www.exemple.com/
-     * CAS 2.0 http://www.exemple.com/proxyValidate
-     * CAS 3.0 http://www.exemple.com/p3/proxyValidate
-     *
-     * @param string $url the proxyValidate URL
-     *
-     * @return void
-     */
-    public static function setServerProxyValidateURL($url = '')
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setServerProxyValidateURL($url);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Set the samlValidate URL of the CAS server.
-     *
-     * @param string $url the samlValidate URL
-     *
-     * @return void
-     */
-    public static function setServerSamlValidateURL($url = '')
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setServerSamlValidateURL($url);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method returns the URL to be used to logout.
-     *
-     * @return string the URL to use to log out
-     */
-    public static function getServerLogoutURL()
-    {
-        phpCAS::_validateClientExists();
-
-        return self::$_PHPCAS_CLIENT->getServerLogoutURL();
-    }
-
-    /**
-     * Set the logout URL of the CAS server.
-     *
-     * @param string $url the logout URL
-     *
-     * @return void
-     * @since 0.4.21 by Wyman Chan
-     */
-    public static function setServerLogoutURL($url = '')
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setServerLogoutURL($url);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method is used to logout from CAS.
-     *
-     * @param string $params an array that contains the optional url and
-     * service parameters that will be passed to the CAS server
-     *
-     * @return void
-     */
-    public static function logout($params = "")
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        $parsedParams = array ();
-        if ($params != "") {
-            if (is_string($params)) {
-                phpCAS :: error('method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead');
-            }
-            if (!is_array($params)) {
-                phpCAS :: error('type mismatched for parameter $params (should be `array\')');
-            }
-            foreach ($params as $key => $value) {
-                if ($key != "service" && $key != "url") {
-                    phpCAS :: error('only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'');
-                }
-                $parsedParams[$key] = $value;
-            }
-        }
-        self::$_PHPCAS_CLIENT->logout($parsedParams);
-        // never reached
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method is used to logout from CAS. Halts by redirecting to the CAS
-     * server.
-     *
-     * @param string $service a URL that will be transmitted to the CAS server
-     *
-     * @return void
-     */
-    public static function logoutWithRedirectService($service)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        if (!is_string($service)) {
-            phpCAS :: error('type mismatched for parameter $service (should be `string\')');
-        }
-        self::$_PHPCAS_CLIENT->logout(array ( "service" => $service ));
-        // never reached
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method is used to logout from CAS. Halts by redirecting to the CAS
-     * server.
-     *
-     * @param string $url a URL that will be transmitted to the CAS server
-     *
-     * @return void
-     * @deprecated The url parameter has been removed from the CAS server as of
-     * version 3.3.5.1
-     */
-    public static function logoutWithUrl($url)
-    {
-        trigger_error('Function deprecated for cas servers >= 3.3.5.1', E_USER_DEPRECATED);
-        phpCAS :: traceBegin();
-        if (!is_object(self::$_PHPCAS_CLIENT)) {
-            phpCAS :: error('this method should only be called after ' . __CLASS__ . '::client() or' . __CLASS__ . '::proxy()');
-        }
-        if (!is_string($url)) {
-            phpCAS :: error('type mismatched for parameter $url (should be `string\')');
-        }
-        self::$_PHPCAS_CLIENT->logout(array ( "url" => $url ));
-        // never reached
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * This method is used to logout from CAS. Halts by redirecting to the CAS
-     * server.
-     *
-     * @param string $service a URL that will be transmitted to the CAS server
-     * @param string $url     a URL that will be transmitted to the CAS server
-     *
-     * @return void
-     *
-     * @deprecated The url parameter has been removed from the CAS server as of
-     * version 3.3.5.1
-     */
-    public static function logoutWithRedirectServiceAndUrl($service, $url)
-    {
-        trigger_error('Function deprecated for cas servers >= 3.3.5.1', E_USER_DEPRECATED);
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        if (!is_string($service)) {
-            phpCAS :: error('type mismatched for parameter $service (should be `string\')');
-        }
-        if (!is_string($url)) {
-            phpCAS :: error('type mismatched for parameter $url (should be `string\')');
-        }
-        self::$_PHPCAS_CLIENT->logout(
-            array (
-                "service" => $service,
-                "url" => $url
-            )
-        );
-        // never reached
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Set the fixed URL that will be used by the CAS server to transmit the
-     * PGT. When this method is not called, a phpCAS script uses its own URL
-     * for the callback.
-     *
-     * @param string $url the URL
-     *
-     * @return void
-     */
-    public static function setFixedCallbackURL($url = '')
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setCallbackURL($url);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Set the fixed URL that will be set as the CAS service parameter. When this
-     * method is not called, a phpCAS script uses its own URL.
-     *
-     * @param string $url the URL
-     *
-     * @return void
-     */
-    public static function setFixedServiceURL($url)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateProxyExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setURL($url);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Get the URL that is set as the CAS service parameter.
-     *
-     * @return string Service Url
-     */
-    public static function getServiceURL()
-    {
-        phpCAS::_validateProxyExists();
-        return (self::$_PHPCAS_CLIENT->getURL());
-    }
-
-    /**
-     * Retrieve a Proxy Ticket from the CAS server.
-     *
-     * @param string $target_service Url string of service to proxy
-     * @param int &$err_code      error code
-     * @param string &$err_msg       error message
-     *
-     * @return string Proxy Ticket
-     */
-    public static function retrievePT($target_service, & $err_code, & $err_msg)
-    {
-        phpCAS::_validateProxyExists();
-
-        try {
-            return (self::$_PHPCAS_CLIENT->retrievePT($target_service, $err_code, $err_msg));
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Set the certificate of the CAS server CA and if the CN should be properly
-     * verified.
-     *
-     * @param string $cert        CA certificate file name
-     * @param bool   $validate_cn Validate CN in certificate (default true)
-     *
-     * @return void
-     */
-    public static function setCasServerCACert($cert, $validate_cn = true)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->setCasServerCACert($cert, $validate_cn);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Set no SSL validation for the CAS server.
-     *
-     * @return void
-     */
-    public static function setNoCasServerValidation()
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        phpCAS :: trace('You have configured no validation of the legitimacy of the cas server. This is not recommended for production use.');
-        self::$_PHPCAS_CLIENT->setNoCasServerValidation();
-        phpCAS :: traceEnd();
-    }
-
-
-    /**
-     * Disable the removal of a CAS-Ticket from the URL when authenticating
-     * DISABLING POSES A SECURITY RISK:
-     * We normally remove the ticket by an additional redirect as a security
-     * precaution to prevent a ticket in the HTTP_REFERRER or be carried over in
-     * the URL parameter
-     *
-     * @return void
-     */
-    public static function setNoClearTicketsFromUrl()
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        self::$_PHPCAS_CLIENT->setNoClearTicketsFromUrl();
-        phpCAS :: traceEnd();
-    }
-
-    /** @} */
-
-    /**
-     * Change CURL options.
-     * CURL is used to connect through HTTPS to CAS server
-     *
-     * @param string $key   the option key
-     * @param string $value the value to set
-     *
-     * @return void
-     */
-    public static function setExtraCurlOption($key, $value)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        self::$_PHPCAS_CLIENT->setExtraCurlOption($key, $value);
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Set a salt/seed for the session-id hash to make it harder to guess.
-     *
-     * When $changeSessionID = true phpCAS will create a session-id that is derived
-     * from the service ticket. Doing so allows phpCAS to look-up and destroy the
-     * proper session on single-log-out requests. While the service tickets
-     * provided by the CAS server may include enough data to generate a strong
-     * hash, clients may provide an additional salt to ensure that session ids
-     * are not guessable if the session tickets do not have enough entropy.
-     *
-     * @param string $salt The salt to combine with the session ticket.
-     *
-     * @return void
-     */
-     public static function setSessionIdSalt($salt) {
-       phpCAS :: traceBegin();
-       phpCAS::_validateClientExists();
-       self::$_PHPCAS_CLIENT->setSessionIdSalt($salt);
-       phpCAS :: traceEnd();
-     }
-
-    /**
-     * If you want your service to be proxied you have to enable it (default
-     * disabled) and define an accepable list of proxies that are allowed to
-     * proxy your service.
-     *
-     * Add each allowed proxy definition object. For the normal CAS_ProxyChain
-     * class, the constructor takes an array of proxies to match. The list is in
-     * reverse just as seen from the service. Proxies have to be defined in reverse
-     * from the service to the user. If a user hits service A and gets proxied via
-     * B to service C the list of acceptable on C would be array(B,A). The definition
-     * of an individual proxy can be either a string or a regexp (preg_match is used)
-     * that will be matched against the proxy list supplied by the cas server
-     * when validating the proxy tickets. The strings are compared starting from
-     * the beginning and must fully match with the proxies in the list.
-     * Example:
-     * 		phpCAS::allowProxyChain(new CAS_ProxyChain(array(
-     *				'https://app.example.com/'
-     *			)));
-     * 		phpCAS::allowProxyChain(new CAS_ProxyChain(array(
-     *				'/^https:\/\/app[0-9]\.example\.com\/rest\//',
-     *				'http://client.example.com/'
-     *			)));
-     *
-     * For quick testing or in certain production screnarios you might want to
-     * allow allow any other valid service to proxy your service. To do so, add
-     * the "Any" chain:
-     *		phpCAS::allowProxyChain(new CAS_ProxyChain_Any);
-     * THIS SETTING IS HOWEVER NOT RECOMMENDED FOR PRODUCTION AND HAS SECURITY
-     * IMPLICATIONS: YOU ARE ALLOWING ANY SERVICE TO ACT ON BEHALF OF A USER
-     * ON THIS SERVICE.
-     *
-     * @param CAS_ProxyChain_Interface $proxy_chain A proxy-chain that will be
-     * matched against the proxies requesting access
-     *
-     * @return void
-     */
-    public static function allowProxyChain(CAS_ProxyChain_Interface $proxy_chain)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        if (self::$_PHPCAS_CLIENT->getServerVersion() !== CAS_VERSION_2_0
-            && self::$_PHPCAS_CLIENT->getServerVersion() !== CAS_VERSION_3_0
-        ) {
-            phpCAS :: error('this method can only be used with the cas 2.0/3.0 protocols');
-        }
-        self::$_PHPCAS_CLIENT->getAllowedProxyChains()->allowProxyChain($proxy_chain);
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Answer an array of proxies that are sitting in front of this application.
-     * This method will only return a non-empty array if we have received and
-     * validated a Proxy Ticket.
-     *
-     * @return array
-     * @access public
-     * @since 6/25/09
-     */
-    public static function getProxies ()
-    {
-        phpCAS::_validateProxyExists();
-
-        return(self::$_PHPCAS_CLIENT->getProxies());
-    }
-
-    // ########################################################################
-    // PGTIOU/PGTID and logoutRequest rebroadcasting
-    // ########################################################################
-
-    /**
-     * Add a pgtIou/pgtId and logoutRequest rebroadcast node.
-     *
-     * @param string $rebroadcastNodeUrl The rebroadcast node URL. Can be
-     * hostname or IP.
-     *
-     * @return void
-     */
-    public static function addRebroadcastNode($rebroadcastNodeUrl)
-    {
-        phpCAS::traceBegin();
-        phpCAS::log('rebroadcastNodeUrl:'.$rebroadcastNodeUrl);
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->addRebroadcastNode($rebroadcastNodeUrl);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS::traceEnd();
-    }
-
-    /**
-     * This method is used to add header parameters when rebroadcasting
-     * pgtIou/pgtId or logoutRequest.
-     *
-     * @param String $header Header to send when rebroadcasting.
-     *
-     * @return void
-     */
-    public static function addRebroadcastHeader($header)
-    {
-        phpCAS :: traceBegin();
-        phpCAS::_validateClientExists();
-
-        try {
-            self::$_PHPCAS_CLIENT->addRebroadcastHeader($header);
-        } catch (Exception $e) {
-            phpCAS :: error(get_class($e) . ': ' . $e->getMessage());
-        }
-
-        phpCAS :: traceEnd();
-    }
-
-    /**
-     * Checks if a client already exists
-     *
-     * @throws CAS_OutOfSequenceBeforeClientException
-     *
-     * @return void
-     */
-    private static function _validateClientExists()
-    {
-        if (!is_object(self::$_PHPCAS_CLIENT)) {
-            throw new CAS_OutOfSequenceBeforeClientException();
-        }
-    }
-
-    /**
-     * Checks of a proxy client aready exists
-     *
-     * @throws CAS_OutOfSequenceBeforeProxyException
-     *
-     * @return void
-     */
-    private static function _validateProxyExists()
-    {
-        if (!is_object(self::$_PHPCAS_CLIENT)) {
-            throw new CAS_OutOfSequenceBeforeProxyException();
-        }
-    }
-
-    /**
-     * @return CAS_Client
-     */
-    public static function getCasClient()
-    {
-        return self::$_PHPCAS_CLIENT;
-    }
-
-    /**
-     * For testing purposes, use this method to set the client to a test double
-     *
-     * @return void
-     */
-    public static function setCasClient(\CAS_Client $client)
-    {
-        self::$_PHPCAS_CLIENT = $client;
-    }
-}
-// ########################################################################
-// DOCUMENTATION
-// ########################################################################
-
-// ########################################################################
-//  MAIN PAGE
-
-/**
- * @mainpage
- *
- * The following pages only show the source documentation.
- *
- */
-
-// ########################################################################
-//  MODULES DEFINITION
-
-/** @defgroup public User interface */
-
-/** @defgroup publicInit Initialization
- *  @ingroup public */
-
-/** @defgroup publicAuth Authentication
- *  @ingroup public */
-
-/** @defgroup publicServices Access to external services
- *  @ingroup public */
-
-/** @defgroup publicConfig Configuration
- *  @ingroup public */
-
-/** @defgroup publicLang Internationalization
- *  @ingroup publicConfig */
-
-/** @defgroup publicOutput HTML output
- *  @ingroup publicConfig */
-
-/** @defgroup publicPGTStorage PGT storage
- *  @ingroup publicConfig */
-
-/** @defgroup publicDebug Debugging
- *  @ingroup public */
-
-/** @defgroup internal Implementation */
-
-/** @defgroup internalAuthentication Authentication
- *  @ingroup internal */
-
-/** @defgroup internalBasic CAS Basic client features (CAS 1.0, Service Tickets)
- *  @ingroup internal */
-
-/** @defgroup internalProxy CAS Proxy features (CAS 2.0, Proxy Granting Tickets)
- *  @ingroup internal */
-
-/** @defgroup internalSAML CAS SAML features (SAML 1.1)
- *  @ingroup internal */
-
-/** @defgroup internalPGTStorage PGT storage
- *  @ingroup internalProxy */
-
-/** @defgroup internalPGTStorageDb PGT storage in a database
- *  @ingroup internalPGTStorage */
-
-/** @defgroup internalPGTStorageFile PGT storage on the filesystem
- *  @ingroup internalPGTStorage */
-
-/** @defgroup internalCallback Callback from the CAS server
- *  @ingroup internalProxy */
-
-/** @defgroup internalProxyServices Proxy other services
- *  @ingroup internalProxy */
-
-/** @defgroup internalService CAS client features (CAS 2.0, Proxied service)
- *  @ingroup internal */
-
-/** @defgroup internalConfig Configuration
- *  @ingroup internal */
-
-/** @defgroup internalBehave Internal behaviour of phpCAS
- *  @ingroup internalConfig */
-
-/** @defgroup internalOutput HTML output
- *  @ingroup internalConfig */
-
-/** @defgroup internalLang Internationalization
- *  @ingroup internalConfig
- *
- * To add a new language:
- * - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS/CAS.php
- * - 2. copy any file from CAS/languages to CAS/languages/XXXXXX.php
- * - 3. Make the translations
- */
-
-/** @defgroup internalDebug Debugging
- *  @ingroup internal */
-
-/** @defgroup internalMisc Miscellaneous
- *  @ingroup internal */
-
-// ########################################################################
-//  EXAMPLES
-
-/**
- * @example example_simple.php
- */
-/**
- * @example example_service.php
- */
-/**
- * @example example_service_that_proxies.php
- */
-/**
- * @example example_service_POST.php
- */
-/**
- * @example example_proxy_serviceWeb.php
- */
-/**
- * @example example_proxy_serviceWeb_chaining.php
- */
-/**
- * @example example_proxy_POST.php
- */
-/**
- * @example example_proxy_GET.php
- */
-/**
- * @example example_lang.php
- */
-/**
- * @example example_html.php
- */
-/**
- * @example example_pgt_storage_file.php
- */
-/**
- * @example example_pgt_storage_db.php
- */
-/**
- * @example example_gateway.php
- */
-/**
- * @example example_logout.php
- */
-/**
- * @example example_rebroadcast.php
- */
-/**
- * @example example_custom_urls.php
- */
-/**
- * @example example_advanced_saml11.php
- */
diff --git a/vendor/jasig/phpcas/source/CAS/AuthenticationException.php b/vendor/jasig/phpcas/source/CAS/AuthenticationException.php
deleted file mode 100644
index 803c88908bbf100f6f525ed8b5279d4b75b06145..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/AuthenticationException.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/AuthenticationException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This interface defines methods that allow proxy-authenticated service handlers
- * to interact with phpCAS.
- *
- * Proxy service handlers must implement this interface as well as call
- * phpCAS::initializeProxiedService($this) at some point in their implementation.
- *
- * While not required, proxy-authenticated service handlers are encouraged to
- * implement the CAS_ProxiedService_Testable interface to facilitate unit testing.
- *
- * @class    CAS_AuthenticationException
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-class CAS_AuthenticationException
-extends RuntimeException
-implements CAS_Exception
-{
-
-    /**
-     * This method is used to print the HTML output when the user was not
-     * authenticated.
-     *
-     * @param CAS_Client $client       phpcas client
-     * @param string     $failure      the failure that occured
-     * @param string     $cas_url      the URL the CAS server was asked for
-     * @param bool       $no_response  the response from the CAS server (other
-     * parameters are ignored if TRUE)
-     * @param bool       $bad_response bad response from the CAS server ($err_code
-     * and $err_msg ignored if TRUE)
-     * @param string     $cas_response the response of the CAS server
-     * @param int        $err_code     the error code given by the CAS server
-     * @param string     $err_msg      the error message given by the CAS server
-     */
-    public function __construct($client,$failure,$cas_url,$no_response,
-        $bad_response=false,$cas_response='',$err_code=-1,$err_msg=''
-    ) {
-        $messages = array();
-        phpCAS::traceBegin();
-        $lang = $client->getLangObj();
-        $client->printHTMLHeader($lang->getAuthenticationFailed());
-
-        if (phpCAS::getVerbose()) {
-            printf(
-                $lang->getYouWereNotAuthenticated(),
-                htmlentities($client->getURL()),
-                $_SERVER['SERVER_ADMIN'] ?? ''
-            );
-        }
-
-        phpCAS::trace($messages[] = 'CAS URL: '.$cas_url);
-        phpCAS::trace($messages[] = 'Authentication failure: '.$failure);
-        if ( $no_response ) {
-            phpCAS::trace($messages[] = 'Reason: no response from the CAS server');
-        } else {
-            if ( $bad_response ) {
-                phpCAS::trace($messages[] = 'Reason: bad response from the CAS server');
-            } else {
-                switch ($client->getServerVersion()) {
-                case CAS_VERSION_1_0:
-                    phpCAS::trace($messages[] = 'Reason: CAS error');
-                    break;
-                case CAS_VERSION_2_0:
-                case CAS_VERSION_3_0:
-                    if ( $err_code === -1 ) {
-                        phpCAS::trace($messages[] = 'Reason: no CAS error');
-                    } else {
-                        phpCAS::trace($messages[] = 'Reason: ['.$err_code.'] CAS error: '.$err_msg);
-                    }
-                    break;
-                }
-            }
-            phpCAS::trace($messages[] = 'CAS response: '.$cas_response);
-        }
-        $client->printHTMLFooter();
-        phpCAS::traceExit();
-
-        parent::__construct(implode("\n", $messages));
-    }
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Autoload.php b/vendor/jasig/phpcas/source/CAS/Autoload.php
deleted file mode 100644
index 29395d592d79ed0474b9b7e4524fec64faa0994a..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Autoload.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * Autoloader Class
- *
- *  PHP Version 7
- *
- * @file      CAS/Autoload.php
- * @category  Authentication
- * @package   SimpleCAS
- * @author    Brett Bieber <brett.bieber@gmail.com>
- * @copyright 2008 Regents of the University of Nebraska
- * @license   http://www1.unl.edu/wdn/wiki/Software_License BSD License
- * @link      http://code.google.com/p/simplecas/
- **/
-
-/**
- * Autoload a class
- *
- * @param string $class Classname to load
- *
- * @return bool
- */
-function CAS_autoload($class)
-{
-    // Static to hold the Include Path to CAS
-    static $include_path;
-    // Check only for CAS classes
-    if (substr($class, 0, 4) !== 'CAS_' && substr($class, 0, 7) !== 'PhpCas\\') {
-        return false;
-    }
-
-    // Setup the include path if it's not already set from a previous call
-    if (empty($include_path)) {
-        $include_path = array(dirname(__DIR__));
-    }
-
-    // Declare local variable to store the expected full path to the file
-    foreach ($include_path as $path) {
-        $class_path = str_replace('_', DIRECTORY_SEPARATOR, $class);
-        // PhpCas namespace mapping
-        if (substr($class_path, 0, 7) === 'PhpCas\\') {
-            $class_path = 'CAS' . DIRECTORY_SEPARATOR . substr($class_path, 7);
-        }
-
-        $file_path = $path . DIRECTORY_SEPARATOR . $class_path . '.php';
-        $fp = @fopen($file_path, 'r', true);
-        if ($fp) {
-            fclose($fp);
-            include $file_path;
-            if (!class_exists($class, false) && !interface_exists($class, false)) {
-                die(
-                    new Exception(
-                        'Class ' . $class . ' was not present in ' .
-                        $file_path .
-                        ' [CAS_autoload]'
-                    )
-                );
-            }
-            return true;
-        }
-    }
-
-    $e = new Exception(
-        'Class ' . $class . ' could not be loaded from ' .
-        $file_path . ', file does not exist (Path="'
-        . implode(':', $include_path) .'") [CAS_autoload]'
-    );
-    $trace = $e->getTrace();
-    if (isset($trace[2]) && isset($trace[2]['function'])
-        && in_array($trace[2]['function'], array('class_exists', 'interface_exists', 'trait_exists'))
-    ) {
-        return false;
-    }
-    if (isset($trace[1]) && isset($trace[1]['function'])
-        && in_array($trace[1]['function'], array('class_exists', 'interface_exists', 'trait_exists'))
-    ) {
-        return false;
-    }
-    die ((string) $e);
-}
-
-// Set up autoload if not already configured by composer.
-if (!class_exists('CAS_Client'))
-{
-    trigger_error('phpCAS autoloader is deprecated. Install phpCAS using composer instead.', E_USER_DEPRECATED);
-    spl_autoload_register('CAS_autoload');
-    if (function_exists('__autoload')
-        && !in_array('__autoload', spl_autoload_functions())
-    ) {
-        // __autoload() was being used, but now would be ignored, add
-        // it to the autoload stack
-        spl_autoload_register('__autoload');
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Client.php b/vendor/jasig/phpcas/source/CAS/Client.php
deleted file mode 100644
index 1a40f63e4f5350ef944124b9b689ad47dff492e9..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Client.php
+++ /dev/null
@@ -1,4377 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Client.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @author   Olivier Berger <olivier.berger@it-sudparis.eu>
- * @author   Brett Bieber <brett.bieber@gmail.com>
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @author   Adam Franco <afranco@middlebury.edu>
- * @author   Tobias Schiebeck <tobias.schiebeck@manchester.ac.uk>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * The CAS_Client class is a client interface that provides CAS authentication
- * to PHP applications.
- *
- * @class    CAS_Client
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @author   Olivier Berger <olivier.berger@it-sudparis.eu>
- * @author   Brett Bieber <brett.bieber@gmail.com>
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @author   Adam Franco <afranco@middlebury.edu>
- * @author   Tobias Schiebeck <tobias.schiebeck@manchester.ac.uk>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- */
-
-class CAS_Client
-{
-
-    // ########################################################################
-    //  HTML OUTPUT
-    // ########################################################################
-    /**
-    * @addtogroup internalOutput
-    * @{
-    */
-
-    /**
-     * This method filters a string by replacing special tokens by appropriate values
-     * and prints it. The corresponding tokens are taken into account:
-     * - __CAS_VERSION__
-     * - __PHPCAS_VERSION__
-     * - __SERVER_BASE_URL__
-     *
-     * Used by CAS_Client::PrintHTMLHeader() and CAS_Client::printHTMLFooter().
-     *
-     * @param string $str the string to filter and output
-     *
-     * @return void
-     */
-    private function _htmlFilterOutput($str)
-    {
-        $str = str_replace('__CAS_VERSION__', $this->getServerVersion(), $str);
-        $str = str_replace('__PHPCAS_VERSION__', phpCAS::getVersion(), $str);
-        $str = str_replace('__SERVER_BASE_URL__', $this->_getServerBaseURL(), $str);
-        echo $str;
-    }
-
-    /**
-     * A string used to print the header of HTML pages. Written by
-     * CAS_Client::setHTMLHeader(), read by CAS_Client::printHTMLHeader().
-     *
-     * @hideinitializer
-     * @see CAS_Client::setHTMLHeader, CAS_Client::printHTMLHeader()
-     */
-    private $_output_header = '';
-
-    /**
-     * This method prints the header of the HTML output (after filtering). If
-     * CAS_Client::setHTMLHeader() was not used, a default header is output.
-     *
-     * @param string $title the title of the page
-     *
-     * @return void
-     * @see _htmlFilterOutput()
-     */
-    public function printHTMLHeader($title)
-    {
-        if (!phpCAS::getVerbose()) {
-            return;
-        }
-
-        $this->_htmlFilterOutput(
-            str_replace(
-                '__TITLE__', $title,
-                (empty($this->_output_header)
-                ? '<html><head><title>__TITLE__</title></head><body><h1>__TITLE__</h1>'
-                : $this->_output_header)
-            )
-        );
-    }
-
-    /**
-     * A string used to print the footer of HTML pages. Written by
-     * CAS_Client::setHTMLFooter(), read by printHTMLFooter().
-     *
-     * @hideinitializer
-     * @see CAS_Client::setHTMLFooter, CAS_Client::printHTMLFooter()
-     */
-    private $_output_footer = '';
-
-    /**
-     * This method prints the footer of the HTML output (after filtering). If
-     * CAS_Client::setHTMLFooter() was not used, a default footer is output.
-     *
-     * @return void
-     * @see _htmlFilterOutput()
-     */
-    public function printHTMLFooter()
-    {
-        if (!phpCAS::getVerbose()) {
-            return;
-        }
-
-        $lang = $this->getLangObj();
-        $message = empty($this->_output_footer)
-            ? '<hr><address>phpCAS __PHPCAS_VERSION__ ' . $lang->getUsingServer() .
-              ' <a href="__SERVER_BASE_URL__">__SERVER_BASE_URL__</a> (CAS __CAS_VERSION__)</a></address></body></html>'
-            : $this->_output_footer;
-
-        $this->_htmlFilterOutput($message);
-    }
-
-    /**
-     * This method set the HTML header used for all outputs.
-     *
-     * @param string $header the HTML header.
-     *
-     * @return void
-     */
-    public function setHTMLHeader($header)
-    {
-        // Argument Validation
-        if (gettype($header) != 'string')
-            throw new CAS_TypeMismatchException($header, '$header', 'string');
-
-        $this->_output_header = $header;
-    }
-
-    /**
-     * This method set the HTML footer used for all outputs.
-     *
-     * @param string $footer the HTML footer.
-     *
-     * @return void
-     */
-    public function setHTMLFooter($footer)
-    {
-        // Argument Validation
-        if (gettype($footer) != 'string')
-            throw new CAS_TypeMismatchException($footer, '$footer', 'string');
-
-        $this->_output_footer = $footer;
-    }
-
-    /**
-     * Simple wrapper for printf function, that respects
-     * phpCAS verbosity setting.
-     *
-     * @param string $format
-     * @param string|int|float ...$values
-     *
-     * @see printf()
-     */
-    private function printf(string $format, ...$values): void
-    {
-        if (phpCAS::getVerbose()) {
-            printf($format, ...$values);
-        }
-    }
-
-    /** @} */
-
-
-    // ########################################################################
-    //  INTERNATIONALIZATION
-    // ########################################################################
-    /**
-    * @addtogroup internalLang
-    * @{
-    */
-    /**
-     * A string corresponding to the language used by phpCAS. Written by
-     * CAS_Client::setLang(), read by CAS_Client::getLang().
-
-     * @note debugging information is always in english (debug purposes only).
-     */
-    private $_lang = PHPCAS_LANG_DEFAULT;
-
-    /**
-     * This method is used to set the language used by phpCAS.
-     *
-     * @param string $lang representing the language.
-     *
-     * @return void
-     */
-    public function setLang($lang)
-    {
-        // Argument Validation
-        if (gettype($lang) != 'string')
-            throw new CAS_TypeMismatchException($lang, '$lang', 'string');
-
-        phpCAS::traceBegin();
-        $obj = new $lang();
-        if (!($obj instanceof CAS_Languages_LanguageInterface)) {
-            throw new CAS_InvalidArgumentException(
-                '$className must implement the CAS_Languages_LanguageInterface'
-            );
-        }
-        $this->_lang = $lang;
-        phpCAS::traceEnd();
-    }
-    /**
-     * Create the language
-     *
-     * @return CAS_Languages_LanguageInterface object implementing the class
-     */
-    public function getLangObj()
-    {
-        $classname = $this->_lang;
-        return new $classname();
-    }
-
-    /** @} */
-    // ########################################################################
-    //  CAS SERVER CONFIG
-    // ########################################################################
-    /**
-    * @addtogroup internalConfig
-    * @{
-    */
-
-    /**
-     * a record to store information about the CAS server.
-     * - $_server['version']: the version of the CAS server
-     * - $_server['hostname']: the hostname of the CAS server
-     * - $_server['port']: the port the CAS server is running on
-     * - $_server['uri']: the base URI the CAS server is responding on
-     * - $_server['base_url']: the base URL of the CAS server
-     * - $_server['login_url']: the login URL of the CAS server
-     * - $_server['service_validate_url']: the service validating URL of the
-     *   CAS server
-     * - $_server['proxy_url']: the proxy URL of the CAS server
-     * - $_server['proxy_validate_url']: the proxy validating URL of the CAS server
-     * - $_server['logout_url']: the logout URL of the CAS server
-     *
-     * $_server['version'], $_server['hostname'], $_server['port'] and
-     * $_server['uri'] are written by CAS_Client::CAS_Client(), read by
-     * CAS_Client::getServerVersion(), CAS_Client::_getServerHostname(),
-     * CAS_Client::_getServerPort() and CAS_Client::_getServerURI().
-     *
-     * The other fields are written and read by CAS_Client::_getServerBaseURL(),
-     * CAS_Client::getServerLoginURL(), CAS_Client::getServerServiceValidateURL(),
-     * CAS_Client::getServerProxyValidateURL() and CAS_Client::getServerLogoutURL().
-     *
-     * @hideinitializer
-     */
-    private $_server = array(
-        'version' => '',
-        'hostname' => 'none',
-        'port' => -1,
-        'uri' => 'none');
-
-    /**
-     * This method is used to retrieve the version of the CAS server.
-     *
-     * @return string the version of the CAS server.
-     */
-    public function getServerVersion()
-    {
-        return $this->_server['version'];
-    }
-
-    /**
-     * This method is used to retrieve the hostname of the CAS server.
-     *
-     * @return string the hostname of the CAS server.
-     */
-    private function _getServerHostname()
-    {
-        return $this->_server['hostname'];
-    }
-
-    /**
-     * This method is used to retrieve the port of the CAS server.
-     *
-     * @return int the port of the CAS server.
-     */
-    private function _getServerPort()
-    {
-        return $this->_server['port'];
-    }
-
-    /**
-     * This method is used to retrieve the URI of the CAS server.
-     *
-     * @return string a URI.
-     */
-    private function _getServerURI()
-    {
-        return $this->_server['uri'];
-    }
-
-    /**
-     * This method is used to retrieve the base URL of the CAS server.
-     *
-     * @return string a URL.
-     */
-    private function _getServerBaseURL()
-    {
-        // the URL is build only when needed
-        if ( empty($this->_server['base_url']) ) {
-            $this->_server['base_url'] = 'https://' . $this->_getServerHostname();
-            if ($this->_getServerPort()!=443) {
-                $this->_server['base_url'] .= ':'
-                .$this->_getServerPort();
-            }
-            $this->_server['base_url'] .= $this->_getServerURI();
-        }
-        return $this->_server['base_url'];
-    }
-
-    /**
-     * This method is used to retrieve the login URL of the CAS server.
-     *
-     * @param bool $gateway true to check authentication, false to force it
-     * @param bool $renew   true to force the authentication with the CAS server
-     *
-     * @return string a URL.
-     * @note It is recommended that CAS implementations ignore the "gateway"
-     * parameter if "renew" is set
-     */
-    public function getServerLoginURL($gateway=false,$renew=false)
-    {
-        phpCAS::traceBegin();
-        // the URL is build only when needed
-        if ( empty($this->_server['login_url']) ) {
-            $this->_server['login_url'] = $this->_buildQueryUrl($this->_getServerBaseURL().'login','service='.urlencode($this->getURL()));
-        }
-        $url = $this->_server['login_url'];
-        if ($renew) {
-            // It is recommended that when the "renew" parameter is set, its
-            // value be "true"
-            $url = $this->_buildQueryUrl($url, 'renew=true');
-        } elseif ($gateway) {
-            // It is recommended that when the "gateway" parameter is set, its
-            // value be "true"
-            $url = $this->_buildQueryUrl($url, 'gateway=true');
-        }
-        phpCAS::traceEnd($url);
-        return $url;
-    }
-
-    /**
-     * This method sets the login URL of the CAS server.
-     *
-     * @param string $url the login URL
-     *
-     * @return string login url
-     */
-    public function setServerLoginURL($url)
-    {
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        return $this->_server['login_url'] = $url;
-    }
-
-
-    /**
-     * This method sets the serviceValidate URL of the CAS server.
-     *
-     * @param string $url the serviceValidate URL
-     *
-     * @return string serviceValidate URL
-     */
-    public function setServerServiceValidateURL($url)
-    {
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        return $this->_server['service_validate_url'] = $url;
-    }
-
-
-    /**
-     * This method sets the proxyValidate URL of the CAS server.
-     *
-     * @param string $url the proxyValidate URL
-     *
-     * @return string proxyValidate URL
-     */
-    public function setServerProxyValidateURL($url)
-    {
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        return $this->_server['proxy_validate_url'] = $url;
-    }
-
-
-    /**
-     * This method sets the samlValidate URL of the CAS server.
-     *
-     * @param string $url the samlValidate URL
-     *
-     * @return string samlValidate URL
-     */
-    public function setServerSamlValidateURL($url)
-    {
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        return $this->_server['saml_validate_url'] = $url;
-    }
-
-
-    /**
-     * This method is used to retrieve the service validating URL of the CAS server.
-     *
-     * @return string serviceValidate URL.
-     */
-    public function getServerServiceValidateURL()
-    {
-        phpCAS::traceBegin();
-        // the URL is build only when needed
-        if ( empty($this->_server['service_validate_url']) ) {
-            switch ($this->getServerVersion()) {
-            case CAS_VERSION_1_0:
-                $this->_server['service_validate_url'] = $this->_getServerBaseURL()
-                .'validate';
-                break;
-            case CAS_VERSION_2_0:
-                $this->_server['service_validate_url'] = $this->_getServerBaseURL()
-                .'serviceValidate';
-                break;
-            case CAS_VERSION_3_0:
-                $this->_server['service_validate_url'] = $this->_getServerBaseURL()
-                .'p3/serviceValidate';
-                break;
-            }
-        }
-        $url = $this->_buildQueryUrl(
-            $this->_server['service_validate_url'],
-            'service='.urlencode($this->getURL())
-        );
-        phpCAS::traceEnd($url);
-        return $url;
-    }
-    /**
-     * This method is used to retrieve the SAML validating URL of the CAS server.
-     *
-     * @return string samlValidate URL.
-     */
-    public function getServerSamlValidateURL()
-    {
-        phpCAS::traceBegin();
-        // the URL is build only when needed
-        if ( empty($this->_server['saml_validate_url']) ) {
-            switch ($this->getServerVersion()) {
-            case SAML_VERSION_1_1:
-                $this->_server['saml_validate_url'] = $this->_getServerBaseURL().'samlValidate';
-                break;
-            }
-        }
-
-        $url = $this->_buildQueryUrl(
-            $this->_server['saml_validate_url'],
-            'TARGET='.urlencode($this->getURL())
-        );
-        phpCAS::traceEnd($url);
-        return $url;
-    }
-
-    /**
-     * This method is used to retrieve the proxy validating URL of the CAS server.
-     *
-     * @return string proxyValidate URL.
-     */
-    public function getServerProxyValidateURL()
-    {
-        phpCAS::traceBegin();
-        // the URL is build only when needed
-        if ( empty($this->_server['proxy_validate_url']) ) {
-            switch ($this->getServerVersion()) {
-            case CAS_VERSION_1_0:
-                $this->_server['proxy_validate_url'] = '';
-                break;
-            case CAS_VERSION_2_0:
-                $this->_server['proxy_validate_url'] = $this->_getServerBaseURL().'proxyValidate';
-                break;
-            case CAS_VERSION_3_0:
-                $this->_server['proxy_validate_url'] = $this->_getServerBaseURL().'p3/proxyValidate';
-                break;
-            }
-        }
-        $url = $this->_buildQueryUrl(
-            $this->_server['proxy_validate_url'],
-            'service='.urlencode($this->getURL())
-        );
-        phpCAS::traceEnd($url);
-        return $url;
-    }
-
-
-    /**
-     * This method is used to retrieve the proxy URL of the CAS server.
-     *
-     * @return  string proxy URL.
-     */
-    public function getServerProxyURL()
-    {
-        // the URL is build only when needed
-        if ( empty($this->_server['proxy_url']) ) {
-            switch ($this->getServerVersion()) {
-            case CAS_VERSION_1_0:
-                $this->_server['proxy_url'] = '';
-                break;
-            case CAS_VERSION_2_0:
-            case CAS_VERSION_3_0:
-                $this->_server['proxy_url'] = $this->_getServerBaseURL().'proxy';
-                break;
-            }
-        }
-        return $this->_server['proxy_url'];
-    }
-
-    /**
-     * This method is used to retrieve the logout URL of the CAS server.
-     *
-     * @return string logout URL.
-     */
-    public function getServerLogoutURL()
-    {
-        // the URL is build only when needed
-        if ( empty($this->_server['logout_url']) ) {
-            $this->_server['logout_url'] = $this->_getServerBaseURL().'logout';
-        }
-        return $this->_server['logout_url'];
-    }
-
-    /**
-     * This method sets the logout URL of the CAS server.
-     *
-     * @param string $url the logout URL
-     *
-     * @return string logout url
-     */
-    public function setServerLogoutURL($url)
-    {
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        return $this->_server['logout_url'] = $url;
-    }
-
-    /**
-     * An array to store extra curl options.
-     */
-    private $_curl_options = array();
-
-    /**
-     * This method is used to set additional user curl options.
-     *
-     * @param string $key   name of the curl option
-     * @param string $value value of the curl option
-     *
-     * @return void
-     */
-    public function setExtraCurlOption($key, $value)
-    {
-        $this->_curl_options[$key] = $value;
-    }
-
-    /** @} */
-
-    // ########################################################################
-    //  Change the internal behaviour of phpcas
-    // ########################################################################
-
-    /**
-     * @addtogroup internalBehave
-     * @{
-     */
-
-    /**
-     * The class to instantiate for making web requests in readUrl().
-     * The class specified must implement the CAS_Request_RequestInterface.
-     * By default CAS_Request_CurlRequest is used, but this may be overridden to
-     * supply alternate request mechanisms for testing.
-     */
-    private $_requestImplementation = 'CAS_Request_CurlRequest';
-
-    /**
-     * Override the default implementation used to make web requests in readUrl().
-     * This class must implement the CAS_Request_RequestInterface.
-     *
-     * @param string $className name of the RequestImplementation class
-     *
-     * @return void
-     */
-    public function setRequestImplementation ($className)
-    {
-        $obj = new $className;
-        if (!($obj instanceof CAS_Request_RequestInterface)) {
-            throw new CAS_InvalidArgumentException(
-                '$className must implement the CAS_Request_RequestInterface'
-            );
-        }
-        $this->_requestImplementation = $className;
-    }
-
-    /**
-     * @var boolean $_clearTicketsFromUrl; If true, phpCAS will clear session
-     * tickets from the URL after a successful authentication.
-     */
-    private $_clearTicketsFromUrl = true;
-
-    /**
-     * Configure the client to not send redirect headers and call exit() on
-     * authentication success. The normal redirect is used to remove the service
-     * ticket from the client's URL, but for running unit tests we need to
-     * continue without exiting.
-     *
-     * Needed for testing authentication
-     *
-     * @return void
-     */
-    public function setNoClearTicketsFromUrl ()
-    {
-        $this->_clearTicketsFromUrl = false;
-    }
-
-    /**
-     * @var callback $_attributeParserCallbackFunction;
-     */
-    private $_casAttributeParserCallbackFunction = null;
-
-    /**
-     * @var array $_attributeParserCallbackArgs;
-     */
-    private $_casAttributeParserCallbackArgs = array();
-
-    /**
-     * Set a callback function to be run when parsing CAS attributes
-     *
-     * The callback function will be passed a XMLNode as its first parameter,
-     * followed by any $additionalArgs you pass.
-     *
-     * @param string $function       callback function to call
-     * @param array  $additionalArgs optional array of arguments
-     *
-     * @return void
-     */
-    public function setCasAttributeParserCallback($function, array $additionalArgs = array())
-    {
-        $this->_casAttributeParserCallbackFunction = $function;
-        $this->_casAttributeParserCallbackArgs = $additionalArgs;
-    }
-
-    /** @var callable $_postAuthenticateCallbackFunction;
-     */
-    private $_postAuthenticateCallbackFunction = null;
-
-    /**
-     * @var array $_postAuthenticateCallbackArgs;
-     */
-    private $_postAuthenticateCallbackArgs = array();
-
-    /**
-     * Set a callback function to be run when a user authenticates.
-     *
-     * The callback function will be passed a $logoutTicket as its first parameter,
-     * followed by any $additionalArgs you pass. The $logoutTicket parameter is an
-     * opaque string that can be used to map a session-id to the logout request
-     * in order to support single-signout in applications that manage their own
-     * sessions (rather than letting phpCAS start the session).
-     *
-     * phpCAS::forceAuthentication() will always exit and forward client unless
-     * they are already authenticated. To perform an action at the moment the user
-     * logs in (such as registering an account, performing logging, etc), register
-     * a callback function here.
-     *
-     * @param callable $function       callback function to call
-     * @param array  $additionalArgs optional array of arguments
-     *
-     * @return void
-     */
-    public function setPostAuthenticateCallback ($function, array $additionalArgs = array())
-    {
-        $this->_postAuthenticateCallbackFunction = $function;
-        $this->_postAuthenticateCallbackArgs = $additionalArgs;
-    }
-
-    /**
-     * @var callable $_signoutCallbackFunction;
-     */
-    private $_signoutCallbackFunction = null;
-
-    /**
-     * @var array $_signoutCallbackArgs;
-     */
-    private $_signoutCallbackArgs = array();
-
-    /**
-     * Set a callback function to be run when a single-signout request is received.
-     *
-     * The callback function will be passed a $logoutTicket as its first parameter,
-     * followed by any $additionalArgs you pass. The $logoutTicket parameter is an
-     * opaque string that can be used to map a session-id to the logout request in
-     * order to support single-signout in applications that manage their own sessions
-     * (rather than letting phpCAS start and destroy the session).
-     *
-     * @param callable $function       callback function to call
-     * @param array  $additionalArgs optional array of arguments
-     *
-     * @return void
-     */
-    public function setSingleSignoutCallback ($function, array $additionalArgs = array())
-    {
-        $this->_signoutCallbackFunction = $function;
-        $this->_signoutCallbackArgs = $additionalArgs;
-    }
-
-    // ########################################################################
-    //  Methods for supplying code-flow feedback to integrators.
-    // ########################################################################
-
-    /**
-     * Ensure that this is actually a proxy object or fail with an exception
-     *
-     * @throws CAS_OutOfSequenceBeforeProxyException
-     *
-     * @return void
-     */
-    public function ensureIsProxy()
-    {
-        if (!$this->isProxy()) {
-            throw new CAS_OutOfSequenceBeforeProxyException();
-        }
-    }
-
-    /**
-     * Mark the caller of authentication. This will help client integraters determine
-     * problems with their code flow if they call a function such as getUser() before
-     * authentication has occurred.
-     *
-     * @param bool $auth True if authentication was successful, false otherwise.
-     *
-     * @return null
-     */
-    public function markAuthenticationCall ($auth)
-    {
-        // store where the authentication has been checked and the result
-        $dbg = debug_backtrace();
-        $this->_authentication_caller = array (
-            'file' => $dbg[1]['file'],
-            'line' => $dbg[1]['line'],
-            'method' => $dbg[1]['class'] . '::' . $dbg[1]['function'],
-            'result' => (boolean)$auth
-        );
-    }
-    private $_authentication_caller;
-
-    /**
-     * Answer true if authentication has been checked.
-     *
-     * @return bool
-     */
-    public function wasAuthenticationCalled ()
-    {
-        return !empty($this->_authentication_caller);
-    }
-
-    /**
-     * Ensure that authentication was checked. Terminate with exception if no
-     * authentication was performed
-     *
-     * @throws CAS_OutOfSequenceBeforeAuthenticationCallException
-     *
-     * @return void
-     */
-    private function _ensureAuthenticationCalled()
-    {
-        if (!$this->wasAuthenticationCalled()) {
-            throw new CAS_OutOfSequenceBeforeAuthenticationCallException();
-        }
-    }
-
-    /**
-     * Answer the result of the authentication call.
-     *
-     * Throws a CAS_OutOfSequenceException if wasAuthenticationCalled() is false
-     * and markAuthenticationCall() didn't happen.
-     *
-     * @return bool
-     */
-    public function wasAuthenticationCallSuccessful ()
-    {
-        $this->_ensureAuthenticationCalled();
-        return $this->_authentication_caller['result'];
-    }
-
-
-    /**
-     * Ensure that authentication was checked. Terminate with exception if no
-     * authentication was performed
-     *
-     * @throws CAS_OutOfSequenceException
-     *
-     * @return void
-     */
-    public function ensureAuthenticationCallSuccessful()
-    {
-        $this->_ensureAuthenticationCalled();
-        if (!$this->_authentication_caller['result']) {
-            throw new CAS_OutOfSequenceException(
-                'authentication was checked (by '
-                . $this->getAuthenticationCallerMethod()
-                . '() at ' . $this->getAuthenticationCallerFile()
-                . ':' . $this->getAuthenticationCallerLine()
-                . ') but the method returned false'
-            );
-        }
-    }
-
-    /**
-     * Answer information about the authentication caller.
-     *
-     * Throws a CAS_OutOfSequenceException if wasAuthenticationCalled() is false
-     * and markAuthenticationCall() didn't happen.
-     *
-     * @return string the file that called authentication
-     */
-    public function getAuthenticationCallerFile ()
-    {
-        $this->_ensureAuthenticationCalled();
-        return $this->_authentication_caller['file'];
-    }
-
-    /**
-     * Answer information about the authentication caller.
-     *
-     * Throws a CAS_OutOfSequenceException if wasAuthenticationCalled() is false
-     * and markAuthenticationCall() didn't happen.
-     *
-     * @return int the line that called authentication
-     */
-    public function getAuthenticationCallerLine ()
-    {
-        $this->_ensureAuthenticationCalled();
-        return $this->_authentication_caller['line'];
-    }
-
-    /**
-     * Answer information about the authentication caller.
-     *
-     * Throws a CAS_OutOfSequenceException if wasAuthenticationCalled() is false
-     * and markAuthenticationCall() didn't happen.
-     *
-     * @return string the method that called authentication
-     */
-    public function getAuthenticationCallerMethod ()
-    {
-        $this->_ensureAuthenticationCalled();
-        return $this->_authentication_caller['method'];
-    }
-
-    /** @} */
-
-    // ########################################################################
-    //  CONSTRUCTOR
-    // ########################################################################
-    /**
-    * @addtogroup internalConfig
-    * @{
-    */
-
-    /**
-     * CAS_Client constructor.
-     *
-     * @param string                   $server_version  the version of the CAS server
-     * @param bool                     $proxy           true if the CAS client is a CAS proxy
-     * @param string                   $server_hostname the hostname of the CAS server
-     * @param int                      $server_port     the port the CAS server is running on
-     * @param string                   $server_uri      the URI the CAS server is responding on
-     * @param bool                     $changeSessionID Allow phpCAS to change the session_id
-     *                                                  (Single Sign Out/handleLogoutRequests
-     *                                                  is based on that change)
-     * @param \SessionHandlerInterface $sessionHandler  the session handler
-     *
-     * @return self a newly created CAS_Client object
-     */
-    public function __construct(
-        $server_version,
-        $proxy,
-        $server_hostname,
-        $server_port,
-        $server_uri,
-        $changeSessionID = true,
-        \SessionHandlerInterface $sessionHandler = null
-    ) {
-        // Argument validation
-        if (gettype($server_version) != 'string')
-            throw new CAS_TypeMismatchException($server_version, '$server_version', 'string');
-        if (gettype($proxy) != 'boolean')
-            throw new CAS_TypeMismatchException($proxy, '$proxy', 'boolean');
-        if (gettype($server_hostname) != 'string')
-            throw new CAS_TypeMismatchException($server_hostname, '$server_hostname', 'string');
-        if (gettype($server_port) != 'integer')
-            throw new CAS_TypeMismatchException($server_port, '$server_port', 'integer');
-        if (gettype($server_uri) != 'string')
-            throw new CAS_TypeMismatchException($server_uri, '$server_uri', 'string');
-        if (gettype($changeSessionID) != 'boolean')
-            throw new CAS_TypeMismatchException($changeSessionID, '$changeSessionID', 'boolean');
-
-        if (empty($sessionHandler)) {
-            $sessionHandler = new CAS_Session_PhpSession;
-        }
-
-        phpCAS::traceBegin();
-        // true : allow to change the session_id(), false session_id won't be
-        // changed and logout won't be handled because of that
-        $this->_setChangeSessionID($changeSessionID);
-
-        $this->setSessionHandler($sessionHandler);
-
-        if (!$this->_isLogoutRequest()) {
-            if (session_id() === "") {
-                // skip Session Handling for logout requests and if don't want it
-                session_start();
-                phpCAS :: trace("Starting a new session " . session_id());
-            }
-            // init phpCAS session array
-            if (!isset($_SESSION[static::PHPCAS_SESSION_PREFIX])
-                || !is_array($_SESSION[static::PHPCAS_SESSION_PREFIX])) {
-                $_SESSION[static::PHPCAS_SESSION_PREFIX] = array();
-            }
-        }
-
-        // Only for debug purposes
-        if ($this->isSessionAuthenticated()){
-            phpCAS :: trace("Session is authenticated as: " . $this->getSessionValue('user'));
-        } else {
-            phpCAS :: trace("Session is not authenticated");
-        }
-        // are we in proxy mode ?
-        $this->_proxy = $proxy;
-
-        // Make cookie handling available.
-        if ($this->isProxy()) {
-            if (!$this->hasSessionValue('service_cookies')) {
-                $this->setSessionValue('service_cookies', array());
-            }
-            // TODO remove explicit call to $_SESSION
-            $this->_serviceCookieJar = new CAS_CookieJar(
-                $_SESSION[static::PHPCAS_SESSION_PREFIX]['service_cookies']
-            );
-        }
-
-        // check version
-        $supportedProtocols = phpCAS::getSupportedProtocols();
-        if (isset($supportedProtocols[$server_version]) === false) {
-            phpCAS::error(
-                'this version of CAS (`'.$server_version
-                .'\') is not supported by phpCAS '.phpCAS::getVersion()
-            );
-        }
-
-        if ($server_version === CAS_VERSION_1_0 && $this->isProxy()) {
-            phpCAS::error(
-                'CAS proxies are not supported in CAS '.$server_version
-            );
-        }
-
-        $this->_server['version'] = $server_version;
-
-        // check hostname
-        if ( empty($server_hostname)
-            || !preg_match('/[\.\d\-a-z]*/', $server_hostname)
-        ) {
-            phpCAS::error('bad CAS server hostname (`'.$server_hostname.'\')');
-        }
-        $this->_server['hostname'] = $server_hostname;
-
-        // check port
-        if ( $server_port == 0
-            || !is_int($server_port)
-        ) {
-            phpCAS::error('bad CAS server port (`'.$server_hostname.'\')');
-        }
-        $this->_server['port'] = $server_port;
-
-        // check URI
-        if ( !preg_match('/[\.\d\-_a-z\/]*/', $server_uri) ) {
-            phpCAS::error('bad CAS server URI (`'.$server_uri.'\')');
-        }
-        // add leading and trailing `/' and remove doubles
-        if(strstr($server_uri, '?') === false) $server_uri .= '/';
-        $server_uri = preg_replace('/\/\//', '/', '/'.$server_uri);
-        $this->_server['uri'] = $server_uri;
-
-        // set to callback mode if PgtIou and PgtId CGI GET parameters are provided
-        if ( $this->isProxy() ) {
-            if(!empty($_GET['pgtIou'])&&!empty($_GET['pgtId'])) {
-                $this->_setCallbackMode(true);
-                $this->_setCallbackModeUsingPost(false);
-            } elseif (!empty($_POST['pgtIou'])&&!empty($_POST['pgtId'])) {
-                $this->_setCallbackMode(true);
-                $this->_setCallbackModeUsingPost(true);
-            } else {
-                $this->_setCallbackMode(false);
-                $this->_setCallbackModeUsingPost(false);
-            }
-
-
-        }
-
-        if ( $this->_isCallbackMode() ) {
-            //callback mode: check that phpCAS is secured
-            if ( !$this->_isHttps() ) {
-                phpCAS::error(
-                    'CAS proxies must be secured to use phpCAS; PGT\'s will not be received from the CAS server'
-                );
-            }
-        } else {
-            //normal mode: get ticket and remove it from CGI parameters for
-            // developers
-            $ticket = (isset($_GET['ticket']) ? $_GET['ticket'] : '');
-            if (preg_match('/^[SP]T-/', $ticket) ) {
-                phpCAS::trace('Ticket \''.$ticket.'\' found');
-                $this->setTicket($ticket);
-                unset($_GET['ticket']);
-            } else if ( !empty($ticket) ) {
-                //ill-formed ticket, halt
-                phpCAS::error(
-                    'ill-formed ticket found in the URL (ticket=`'
-                    .htmlentities($ticket).'\')'
-                );
-            }
-
-        }
-        phpCAS::traceEnd();
-    }
-
-    /** @} */
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // XX                                                                    XX
-    // XX                           Session Handling                         XX
-    // XX                                                                    XX
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
-    /**
-     * @addtogroup internalConfig
-     * @{
-     */
-
-    /** The session prefix for phpCAS values */
-    const PHPCAS_SESSION_PREFIX = 'phpCAS';
-
-    /**
-     * @var bool A variable to whether phpcas will use its own session handling. Default = true
-     * @hideinitializer
-     */
-    private $_change_session_id = true;
-
-    /**
-     * @var SessionHandlerInterface
-     */
-    private $_sessionHandler;
-
-    /**
-     * Set a parameter whether to allow phpCAS to change session_id
-     *
-     * @param bool $allowed allow phpCAS to change session_id
-     *
-     * @return void
-     */
-    private function _setChangeSessionID($allowed)
-    {
-        $this->_change_session_id = $allowed;
-    }
-
-    /**
-     * Get whether phpCAS is allowed to change session_id
-     *
-     * @return bool
-     */
-    public function getChangeSessionID()
-    {
-        return $this->_change_session_id;
-    }
-
-    /**
-     * Set the session handler.
-     *
-     * @param \SessionHandlerInterface $sessionHandler
-     *
-     * @return bool
-     */
-    public function setSessionHandler(\SessionHandlerInterface $sessionHandler)
-    {
-        $this->_sessionHandler = $sessionHandler;
-        if (session_status() !== PHP_SESSION_ACTIVE) {
-            return session_set_save_handler($this->_sessionHandler, true);
-        }
-        return true;
-    }
-
-    /**
-     * Get a session value using the given key.
-     *
-     * @param string $key
-     * @param mixed  $default default value if the key is not set
-     *
-     * @return mixed
-     */
-    protected function getSessionValue($key, $default = null)
-    {
-        $this->validateSession($key);
-
-        if (isset($_SESSION[static::PHPCAS_SESSION_PREFIX][$key])) {
-            return $_SESSION[static::PHPCAS_SESSION_PREFIX][$key];
-        }
-
-        return $default;
-    }
-
-    /**
-     * Determine whether a session value is set or not.
-     *
-     * To check if a session value is empty or not please use
-     * !!(getSessionValue($key)).
-     *
-     * @param string $key
-     *
-     * @return bool
-     */
-    protected function hasSessionValue($key)
-    {
-        $this->validateSession($key);
-
-        return isset($_SESSION[static::PHPCAS_SESSION_PREFIX][$key]);
-    }
-
-    /**
-     * Set a session value using the given key and value.
-     *
-     * @param string $key
-     * @param mixed $value
-     *
-     * @return string
-     */
-    protected function setSessionValue($key, $value)
-    {
-        $this->validateSession($key);
-
-        $_SESSION[static::PHPCAS_SESSION_PREFIX][$key] = $value;
-    }
-
-    /**
-     * Remove a session value with the given key.
-     *
-     * @param string $key
-     */
-    protected function removeSessionValue($key)
-    {
-        $this->validateSession($key);
-
-        if (isset($_SESSION[static::PHPCAS_SESSION_PREFIX][$key])) {
-            unset($_SESSION[static::PHPCAS_SESSION_PREFIX][$key]);
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Remove all phpCAS session values.
-     */
-    protected function clearSessionValues()
-    {
-        unset($_SESSION[static::PHPCAS_SESSION_PREFIX]);
-    }
-
-    /**
-     * Ensure $key is a string for session utils input
-     *
-     * @param string $key
-     *
-     * @return bool
-     */
-    protected function validateSession($key)
-    {
-        if (!is_string($key)) {
-            throw new InvalidArgumentException('Session key must be a string.');
-        }
-
-        return true;
-    }
-
-    /**
-     * Renaming the session
-     *
-     * @param string $ticket name of the ticket
-     *
-     * @return void
-     */
-    protected function _renameSession($ticket)
-    {
-        phpCAS::traceBegin();
-        if ($this->getChangeSessionID()) {
-            if (!empty($this->_user)) {
-                $old_session = $_SESSION;
-                phpCAS :: trace("Killing session: ". session_id());
-                session_destroy();
-                // set up a new session, of name based on the ticket
-                $session_id = $this->_sessionIdForTicket($ticket);
-                phpCAS :: trace("Starting session: ". $session_id);
-                session_id($session_id);
-                session_start();
-                phpCAS :: trace("Restoring old session vars");
-                $_SESSION = $old_session;
-            } else {
-                phpCAS :: trace (
-                    'Session should only be renamed after successfull authentication'
-                );
-            }
-        } else {
-            phpCAS :: trace(
-                "Skipping session rename since phpCAS is not handling the session."
-            );
-        }
-        phpCAS::traceEnd();
-    }
-
-    /** @} */
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // XX                                                                    XX
-    // XX                           AUTHENTICATION                           XX
-    // XX                                                                    XX
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
-    /**
-     * @addtogroup internalAuthentication
-     * @{
-     */
-
-    /**
-     * The Authenticated user. Written by CAS_Client::_setUser(), read by
-     * CAS_Client::getUser().
-     *
-     * @hideinitializer
-     */
-    private $_user = '';
-
-    /**
-     * This method sets the CAS user's login name.
-     *
-     * @param string $user the login name of the authenticated user.
-     *
-     * @return void
-     */
-    private function _setUser($user)
-    {
-        $this->_user = $user;
-    }
-
-    /**
-     * This method returns the CAS user's login name.
-     *
-     * @return string the login name of the authenticated user
-     *
-     * @warning should be called only after CAS_Client::forceAuthentication() or
-     * CAS_Client::isAuthenticated(), otherwise halt with an error.
-     */
-    public function getUser()
-    {
-        // Sequence validation
-        $this->ensureAuthenticationCallSuccessful();
-
-        return $this->_getUser();
-    }
-
-    /**
-     * This method returns the CAS user's login name.
-     *
-     * @return string the login name of the authenticated user
-     *
-     * @warning should be called only after CAS_Client::forceAuthentication() or
-     * CAS_Client::isAuthenticated(), otherwise halt with an error.
-     */
-    private function _getUser()
-    {
-        // This is likely a duplicate check that could be removed....
-        if ( empty($this->_user) ) {
-            phpCAS::error(
-                'this method should be used only after '.__CLASS__
-                .'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()'
-            );
-        }
-        return $this->_user;
-    }
-
-    /**
-     * The Authenticated users attributes. Written by
-     * CAS_Client::setAttributes(), read by CAS_Client::getAttributes().
-     * @attention client applications should use phpCAS::getAttributes().
-     *
-     * @hideinitializer
-     */
-    private $_attributes = array();
-
-    /**
-     * Set an array of attributes
-     *
-     * @param array $attributes a key value array of attributes
-     *
-     * @return void
-     */
-    public function setAttributes($attributes)
-    {
-        $this->_attributes = $attributes;
-    }
-
-    /**
-     * Get an key values arry of attributes
-     *
-     * @return array of attributes
-     */
-    public function getAttributes()
-    {
-        // Sequence validation
-        $this->ensureAuthenticationCallSuccessful();
-        // This is likely a duplicate check that could be removed....
-        if ( empty($this->_user) ) {
-            // if no user is set, there shouldn't be any attributes also...
-            phpCAS::error(
-                'this method should be used only after '.__CLASS__
-                .'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()'
-            );
-        }
-        return $this->_attributes;
-    }
-
-    /**
-     * Check whether attributes are available
-     *
-     * @return bool attributes available
-     */
-    public function hasAttributes()
-    {
-        // Sequence validation
-        $this->ensureAuthenticationCallSuccessful();
-
-        return !empty($this->_attributes);
-    }
-    /**
-     * Check whether a specific attribute with a name is available
-     *
-     * @param string $key name of attribute
-     *
-     * @return bool is attribute available
-     */
-    public function hasAttribute($key)
-    {
-        // Sequence validation
-        $this->ensureAuthenticationCallSuccessful();
-
-        return $this->_hasAttribute($key);
-    }
-
-    /**
-     * Check whether a specific attribute with a name is available
-     *
-     * @param string $key name of attribute
-     *
-     * @return bool is attribute available
-     */
-    private function _hasAttribute($key)
-    {
-        return (is_array($this->_attributes)
-            && array_key_exists($key, $this->_attributes));
-    }
-
-    /**
-     * Get a specific attribute by name
-     *
-     * @param string $key name of attribute
-     *
-     * @return string attribute values
-     */
-    public function getAttribute($key)
-    {
-        // Sequence validation
-        $this->ensureAuthenticationCallSuccessful();
-
-        if ($this->_hasAttribute($key)) {
-            return $this->_attributes[$key];
-        }
-    }
-
-    /**
-     * This method is called to renew the authentication of the user
-     * If the user is authenticated, renew the connection
-     * If not, redirect to CAS
-     *
-     * @return bool true when the user is authenticated; otherwise halt.
-     */
-    public function renewAuthentication()
-    {
-        phpCAS::traceBegin();
-        // Either way, the user is authenticated by CAS
-        $this->removeSessionValue('auth_checked');
-        if ( $this->isAuthenticated(true) ) {
-            phpCAS::trace('user already authenticated');
-            $res = true;
-        } else {
-            $this->redirectToCas(false, true);
-            // never reached
-            $res = false;
-        }
-        phpCAS::traceEnd();
-        return $res;
-    }
-
-    /**
-     * This method is called to be sure that the user is authenticated. When not
-     * authenticated, halt by redirecting to the CAS server; otherwise return true.
-     *
-     * @return bool true when the user is authenticated; otherwise halt.
-     */
-    public function forceAuthentication()
-    {
-        phpCAS::traceBegin();
-
-        if ( $this->isAuthenticated() ) {
-            // the user is authenticated, nothing to be done.
-            phpCAS::trace('no need to authenticate');
-            $res = true;
-        } else {
-            // the user is not authenticated, redirect to the CAS server
-            $this->removeSessionValue('auth_checked');
-            $this->redirectToCas(false/* no gateway */);
-            // never reached
-            $res = false;
-        }
-        phpCAS::traceEnd($res);
-        return $res;
-    }
-
-    /**
-     * An integer that gives the number of times authentication will be cached
-     * before rechecked.
-     *
-     * @hideinitializer
-     */
-    private $_cache_times_for_auth_recheck = 0;
-
-    /**
-     * Set the number of times authentication will be cached before rechecked.
-     *
-     * @param int $n number of times to wait for a recheck
-     *
-     * @return void
-     */
-    public function setCacheTimesForAuthRecheck($n)
-    {
-        if (gettype($n) != 'integer')
-            throw new CAS_TypeMismatchException($n, '$n', 'string');
-
-        $this->_cache_times_for_auth_recheck = $n;
-    }
-
-    /**
-     * This method is called to check whether the user is authenticated or not.
-     *
-     * @return bool true when the user is authenticated, false when a previous
-     * gateway login failed or  the function will not return if the user is
-     * redirected to the cas server for a gateway login attempt
-     */
-    public function checkAuthentication()
-    {
-        phpCAS::traceBegin();
-        $res = false; // default
-        if ( $this->isAuthenticated() ) {
-            phpCAS::trace('user is authenticated');
-            /* The 'auth_checked' variable is removed just in case it's set. */
-            $this->removeSessionValue('auth_checked');
-            $res = true;
-        } else if ($this->getSessionValue('auth_checked')) {
-            // the previous request has redirected the client to the CAS server
-            // with gateway=true
-            $this->removeSessionValue('auth_checked');
-        } else {
-            // avoid a check against CAS on every request
-            // we need to write this back to session later
-            $unauth_count = $this->getSessionValue('unauth_count', -2);
-
-            if (($unauth_count != -2
-                && $this->_cache_times_for_auth_recheck == -1)
-                || ($unauth_count >= 0
-                && $unauth_count < $this->_cache_times_for_auth_recheck)
-            ) {
-                if ($this->_cache_times_for_auth_recheck != -1) {
-                    $unauth_count++;
-                    phpCAS::trace(
-                        'user is not authenticated (cached for '
-                        .$unauth_count.' times of '
-                        .$this->_cache_times_for_auth_recheck.')'
-                    );
-                } else {
-                    phpCAS::trace(
-                        'user is not authenticated (cached for until login pressed)'
-                    );
-                }
-                $this->setSessionValue('unauth_count', $unauth_count);
-            } else {
-                $this->setSessionValue('unauth_count', 0);
-                $this->setSessionValue('auth_checked', true);
-                phpCAS::trace('user is not authenticated (cache reset)');
-                $this->redirectToCas(true/* gateway */);
-                // never reached
-            }
-        }
-        phpCAS::traceEnd($res);
-        return $res;
-    }
-
-    /**
-     * This method is called to check if the user is authenticated (previously or by
-     * tickets given in the URL).
-     *
-     * @param bool $renew true to force the authentication with the CAS server
-     *
-     * @return bool true when the user is authenticated. Also may redirect to the
-     * same URL without the ticket.
-     */
-    public function isAuthenticated($renew=false)
-    {
-        phpCAS::traceBegin();
-        $res = false;
-
-        if ( $this->_wasPreviouslyAuthenticated() ) {
-            if ($this->hasTicket()) {
-                // User has a additional ticket but was already authenticated
-                phpCAS::trace(
-                    'ticket was present and will be discarded, use renewAuthenticate()'
-                );
-                if ($this->_clearTicketsFromUrl) {
-                    phpCAS::trace("Prepare redirect to : ".$this->getURL());
-                    session_write_close();
-                    header('Location: '.$this->getURL());
-                    flush();
-                    phpCAS::traceExit();
-                    throw new CAS_GracefullTerminationException();
-                } else {
-                    phpCAS::trace(
-                        'Already authenticated, but skipping ticket clearing since setNoClearTicketsFromUrl() was used.'
-                    );
-                    $res = true;
-                }
-            } else {
-                // the user has already (previously during the session) been
-                // authenticated, nothing to be done.
-                phpCAS::trace(
-                    'user was already authenticated, no need to look for tickets'
-                );
-                $res = true;
-            }
-
-            // Mark the auth-check as complete to allow post-authentication
-            // callbacks to make use of phpCAS::getUser() and similar methods
-            $this->markAuthenticationCall($res);
-        } else {
-            if ($this->hasTicket()) {
-                $validate_url = '';
-                $text_response = '';
-                $tree_response = '';
-
-                switch ($this->getServerVersion()) {
-                case CAS_VERSION_1_0:
-                    // if a Service Ticket was given, validate it
-                    phpCAS::trace(
-                        'CAS 1.0 ticket `'.$this->getTicket().'\' is present'
-                    );
-                    $this->validateCAS10(
-                        $validate_url, $text_response, $tree_response, $renew
-                    ); // if it fails, it halts
-                    phpCAS::trace(
-                        'CAS 1.0 ticket `'.$this->getTicket().'\' was validated'
-                    );
-                    $this->setSessionValue('user', $this->_getUser());
-                    $res = true;
-                    $logoutTicket = $this->getTicket();
-                    break;
-                case CAS_VERSION_2_0:
-                case CAS_VERSION_3_0:
-                    // if a Proxy Ticket was given, validate it
-                    phpCAS::trace(
-                        'CAS '.$this->getServerVersion().' ticket `'.$this->getTicket().'\' is present'
-                    );
-                    $this->validateCAS20(
-                        $validate_url, $text_response, $tree_response, $renew
-                    ); // note: if it fails, it halts
-                    phpCAS::trace(
-                        'CAS '.$this->getServerVersion().' ticket `'.$this->getTicket().'\' was validated'
-                    );
-                    if ( $this->isProxy() ) {
-                        $this->_validatePGT(
-                            $validate_url, $text_response, $tree_response
-                        ); // idem
-                        phpCAS::trace('PGT `'.$this->_getPGT().'\' was validated');
-                        $this->setSessionValue('pgt', $this->_getPGT());
-                    }
-                    $this->setSessionValue('user', $this->_getUser());
-                    if (!empty($this->_attributes)) {
-                        $this->setSessionValue('attributes', $this->_attributes);
-                    }
-                    $proxies = $this->getProxies();
-                    if (!empty($proxies)) {
-                        $this->setSessionValue('proxies', $this->getProxies());
-                    }
-                    $res = true;
-                    $logoutTicket = $this->getTicket();
-                    break;
-                case SAML_VERSION_1_1:
-                    // if we have a SAML ticket, validate it.
-                    phpCAS::trace(
-                        'SAML 1.1 ticket `'.$this->getTicket().'\' is present'
-                    );
-                    $this->validateSA(
-                        $validate_url, $text_response, $tree_response, $renew
-                    ); // if it fails, it halts
-                    phpCAS::trace(
-                        'SAML 1.1 ticket `'.$this->getTicket().'\' was validated'
-                    );
-                    $this->setSessionValue('user', $this->_getUser());
-                    $this->setSessionValue('attributes', $this->_attributes);
-                    $res = true;
-                    $logoutTicket = $this->getTicket();
-                    break;
-                default:
-                    phpCAS::trace('Protocol error');
-                    break;
-                }
-            } else {
-                // no ticket given, not authenticated
-                phpCAS::trace('no ticket found');
-            }
-
-            // Mark the auth-check as complete to allow post-authentication
-            // callbacks to make use of phpCAS::getUser() and similar methods
-            $this->markAuthenticationCall($res);
-
-            if ($res) {
-                // call the post-authenticate callback if registered.
-                if ($this->_postAuthenticateCallbackFunction) {
-                    $args = $this->_postAuthenticateCallbackArgs;
-                    array_unshift($args, $logoutTicket);
-                    call_user_func_array(
-                        $this->_postAuthenticateCallbackFunction, $args
-                    );
-                }
-
-                // if called with a ticket parameter, we need to redirect to the
-                // app without the ticket so that CAS-ification is transparent
-                // to the browser (for later POSTS) most of the checks and
-                // errors should have been made now, so we're safe for redirect
-                // without masking error messages. remove the ticket as a
-                // security precaution to prevent a ticket in the HTTP_REFERRER
-                if ($this->_clearTicketsFromUrl) {
-                    phpCAS::trace("Prepare redirect to : ".$this->getURL());
-                    session_write_close();
-                    header('Location: '.$this->getURL());
-                    flush();
-                    phpCAS::traceExit();
-                    throw new CAS_GracefullTerminationException();
-                }
-            }
-        }
-        phpCAS::traceEnd($res);
-        return $res;
-    }
-
-    /**
-     * This method tells if the current session is authenticated.
-     *
-     * @return bool true if authenticated based soley on $_SESSION variable
-     */
-    public function isSessionAuthenticated ()
-    {
-        return !!$this->getSessionValue('user');
-    }
-
-    /**
-     * This method tells if the user has already been (previously) authenticated
-     * by looking into the session variables.
-     *
-     * @note This function switches to callback mode when needed.
-     *
-     * @return bool true when the user has already been authenticated; false otherwise.
-     */
-    private function _wasPreviouslyAuthenticated()
-    {
-        phpCAS::traceBegin();
-
-        if ( $this->_isCallbackMode() ) {
-            // Rebroadcast the pgtIou and pgtId to all nodes
-            if ($this->_rebroadcast&&!isset($_POST['rebroadcast'])) {
-                $this->_rebroadcast(self::PGTIOU);
-            }
-            $this->_callback();
-        }
-
-        $auth = false;
-
-        if ( $this->isProxy() ) {
-            // CAS proxy: username and PGT must be present
-            if ( $this->isSessionAuthenticated()
-                && $this->getSessionValue('pgt')
-            ) {
-                // authentication already done
-                $this->_setUser($this->getSessionValue('user'));
-                if ($this->hasSessionValue('attributes')) {
-                    $this->setAttributes($this->getSessionValue('attributes'));
-                }
-                $this->_setPGT($this->getSessionValue('pgt'));
-                phpCAS::trace(
-                    'user = `'.$this->getSessionValue('user').'\', PGT = `'
-                    .$this->getSessionValue('pgt').'\''
-                );
-
-                // Include the list of proxies
-                if ($this->hasSessionValue('proxies')) {
-                    $this->_setProxies($this->getSessionValue('proxies'));
-                    phpCAS::trace(
-                        'proxies = "'
-                        .implode('", "', $this->getSessionValue('proxies')).'"'
-                    );
-                }
-
-                $auth = true;
-            } elseif ( $this->isSessionAuthenticated()
-                && !$this->getSessionValue('pgt')
-            ) {
-                // these two variables should be empty or not empty at the same time
-                phpCAS::trace(
-                    'username found (`'.$this->getSessionValue('user')
-                    .'\') but PGT is empty'
-                );
-                // unset all tickets to enforce authentication
-                $this->clearSessionValues();
-                $this->setTicket('');
-            } elseif ( !$this->isSessionAuthenticated()
-                && $this->getSessionValue('pgt')
-            ) {
-                // these two variables should be empty or not empty at the same time
-                phpCAS::trace(
-                    'PGT found (`'.$this->getSessionValue('pgt')
-                    .'\') but username is empty'
-                );
-                // unset all tickets to enforce authentication
-                $this->clearSessionValues();
-                $this->setTicket('');
-            } else {
-                phpCAS::trace('neither user nor PGT found');
-            }
-        } else {
-            // `simple' CAS client (not a proxy): username must be present
-            if ( $this->isSessionAuthenticated() ) {
-                // authentication already done
-                $this->_setUser($this->getSessionValue('user'));
-                if ($this->hasSessionValue('attributes')) {
-                    $this->setAttributes($this->getSessionValue('attributes'));
-                }
-                phpCAS::trace('user = `'.$this->getSessionValue('user').'\'');
-
-                // Include the list of proxies
-                if ($this->hasSessionValue('proxies')) {
-                    $this->_setProxies($this->getSessionValue('proxies'));
-                    phpCAS::trace(
-                        'proxies = "'
-                        .implode('", "', $this->getSessionValue('proxies')).'"'
-                    );
-                }
-
-                $auth = true;
-            } else {
-                phpCAS::trace('no user found');
-            }
-        }
-
-        phpCAS::traceEnd($auth);
-        return $auth;
-    }
-
-    /**
-     * This method is used to redirect the client to the CAS server.
-     * It is used by CAS_Client::forceAuthentication() and
-     * CAS_Client::checkAuthentication().
-     *
-     * @param bool $gateway true to check authentication, false to force it
-     * @param bool $renew   true to force the authentication with the CAS server
-     *
-     * @return void
-     */
-    public function redirectToCas($gateway=false,$renew=false)
-    {
-        phpCAS::traceBegin();
-        $cas_url = $this->getServerLoginURL($gateway, $renew);
-        session_write_close();
-        if (php_sapi_name() === 'cli') {
-            @header('Location: '.$cas_url);
-        } else {
-            header('Location: '.$cas_url);
-        }
-        phpCAS::trace("Redirect to : ".$cas_url);
-        $lang = $this->getLangObj();
-        $this->printHTMLHeader($lang->getAuthenticationWanted());
-        $this->printf('<p>'. $lang->getShouldHaveBeenRedirected(). '</p>', $cas_url);
-        $this->printHTMLFooter();
-        phpCAS::traceExit();
-        throw new CAS_GracefullTerminationException();
-    }
-
-
-    /**
-     * This method is used to logout from CAS.
-     *
-     * @param array $params an array that contains the optional url and service
-     * parameters that will be passed to the CAS server
-     *
-     * @return void
-     */
-    public function logout($params)
-    {
-        phpCAS::traceBegin();
-        $cas_url = $this->getServerLogoutURL();
-        $paramSeparator = '?';
-        if (isset($params['url'])) {
-            $cas_url = $cas_url . $paramSeparator . "url="
-                . urlencode($params['url']);
-            $paramSeparator = '&';
-        }
-        if (isset($params['service'])) {
-            $cas_url = $cas_url . $paramSeparator . "service="
-                . urlencode($params['service']);
-        }
-        header('Location: '.$cas_url);
-        phpCAS::trace("Prepare redirect to : ".$cas_url);
-
-        phpCAS::trace("Destroying session : ".session_id());
-        session_unset();
-        session_destroy();
-        if (session_status() === PHP_SESSION_NONE) {
-            phpCAS::trace("Session terminated");
-        } else {
-            phpCAS::error("Session was not terminated");
-            phpCAS::trace("Session was not terminated");
-        }
-        $lang = $this->getLangObj();
-        $this->printHTMLHeader($lang->getLogout());
-        $this->printf('<p>'.$lang->getShouldHaveBeenRedirected(). '</p>', $cas_url);
-        $this->printHTMLFooter();
-        phpCAS::traceExit();
-        throw new CAS_GracefullTerminationException();
-    }
-
-    /**
-     * Check of the current request is a logout request
-     *
-     * @return bool is logout request.
-     */
-    private function _isLogoutRequest()
-    {
-        return !empty($_POST['logoutRequest']);
-    }
-
-    /**
-     * This method handles logout requests.
-     *
-     * @param bool $check_client    true to check the client bofore handling
-     * the request, false not to perform any access control. True by default.
-     * @param array $allowed_clients an array of host names allowed to send
-     * logout requests.
-     *
-     * @return void
-     */
-    public function handleLogoutRequests($check_client=true, $allowed_clients=array())
-    {
-        phpCAS::traceBegin();
-        if (!$this->_isLogoutRequest()) {
-            phpCAS::trace("Not a logout request");
-            phpCAS::traceEnd();
-            return;
-        }
-        if (!$this->getChangeSessionID()
-            && is_null($this->_signoutCallbackFunction)
-        ) {
-            phpCAS::trace(
-                "phpCAS can't handle logout requests if it is not allowed to change session_id."
-            );
-        }
-        phpCAS::trace("Logout requested");
-        $decoded_logout_rq = urldecode($_POST['logoutRequest']);
-        phpCAS::trace("SAML REQUEST: ".$decoded_logout_rq);
-        $allowed = false;
-        if ($check_client) {
-            if ($allowed_clients === array()) {
-                $allowed_clients = array( $this->_getServerHostname() );
-            }
-            $client_ip = $_SERVER['REMOTE_ADDR'];
-            $client = gethostbyaddr($client_ip);
-            phpCAS::trace("Client: ".$client."/".$client_ip);
-            foreach ($allowed_clients as $allowed_client) {
-                if (($client == $allowed_client)
-                    || ($client_ip == $allowed_client)
-                ) {
-                    phpCAS::trace(
-                        "Allowed client '".$allowed_client
-                        ."' matches, logout request is allowed"
-                    );
-                    $allowed = true;
-                    break;
-                } else {
-                    phpCAS::trace(
-                        "Allowed client '".$allowed_client."' does not match"
-                    );
-                }
-            }
-        } else {
-            phpCAS::trace("No access control set");
-            $allowed = true;
-        }
-        // If Logout command is permitted proceed with the logout
-        if ($allowed) {
-            phpCAS::trace("Logout command allowed");
-            // Rebroadcast the logout request
-            if ($this->_rebroadcast && !isset($_POST['rebroadcast'])) {
-                $this->_rebroadcast(self::LOGOUT);
-            }
-            // Extract the ticket from the SAML Request
-            preg_match(
-                "|<samlp:SessionIndex>(.*)</samlp:SessionIndex>|",
-                $decoded_logout_rq, $tick, PREG_OFFSET_CAPTURE, 3
-            );
-            $wrappedSamlSessionIndex = preg_replace(
-                '|<samlp:SessionIndex>|', '', $tick[0][0]
-            );
-            $ticket2logout = preg_replace(
-                '|</samlp:SessionIndex>|', '', $wrappedSamlSessionIndex
-            );
-            phpCAS::trace("Ticket to logout: ".$ticket2logout);
-
-            // call the post-authenticate callback if registered.
-            if ($this->_signoutCallbackFunction) {
-                $args = $this->_signoutCallbackArgs;
-                array_unshift($args, $ticket2logout);
-                call_user_func_array($this->_signoutCallbackFunction, $args);
-            }
-
-            // If phpCAS is managing the session_id, destroy session thanks to
-            // session_id.
-            if ($this->getChangeSessionID()) {
-                $session_id = $this->_sessionIdForTicket($ticket2logout);
-                phpCAS::trace("Session id: ".$session_id);
-
-                // destroy a possible application session created before phpcas
-                if (session_id() !== "") {
-                    session_unset();
-                    session_destroy();
-                }
-                // fix session ID
-                session_id($session_id);
-                $_COOKIE[session_name()]=$session_id;
-                $_GET[session_name()]=$session_id;
-
-                // Overwrite session
-                session_start();
-                session_unset();
-                session_destroy();
-                phpCAS::trace("Session ". $session_id . " destroyed");
-            }
-        } else {
-            phpCAS::error("Unauthorized logout request from client '".$client."'");
-            phpCAS::trace("Unauthorized logout request from client '".$client."'");
-        }
-        flush();
-        phpCAS::traceExit();
-        throw new CAS_GracefullTerminationException();
-
-    }
-
-    /** @} */
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // XX                                                                    XX
-    // XX                  BASIC CLIENT FEATURES (CAS 1.0)                   XX
-    // XX                                                                    XX
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
-    // ########################################################################
-    //  ST
-    // ########################################################################
-    /**
-    * @addtogroup internalBasic
-    * @{
-    */
-
-    /**
-     * The Ticket provided in the URL of the request if present
-     * (empty otherwise). Written by CAS_Client::CAS_Client(), read by
-     * CAS_Client::getTicket() and CAS_Client::_hasPGT().
-     *
-     * @hideinitializer
-     */
-    private $_ticket = '';
-
-    /**
-     * This method returns the Service Ticket provided in the URL of the request.
-     *
-     * @return string service ticket.
-     */
-    public  function getTicket()
-    {
-        return $this->_ticket;
-    }
-
-    /**
-     * This method stores the Service Ticket.
-     *
-     * @param string $st The Service Ticket.
-     *
-     * @return void
-     */
-    public function setTicket($st)
-    {
-        $this->_ticket = $st;
-    }
-
-    /**
-     * This method tells if a Service Ticket was stored.
-     *
-     * @return bool if a Service Ticket has been stored.
-     */
-    public function hasTicket()
-    {
-        return !empty($this->_ticket);
-    }
-
-    /** @} */
-
-    // ########################################################################
-    //  ST VALIDATION
-    // ########################################################################
-    /**
-    * @addtogroup internalBasic
-    * @{
-    */
-
-    /**
-     * @var  string the certificate of the CAS server CA.
-     *
-     * @hideinitializer
-     */
-    private $_cas_server_ca_cert = null;
-
-
-    /**
-
-     * validate CN of the CAS server certificate
-
-     *
-
-     * @hideinitializer
-
-     */
-
-    private $_cas_server_cn_validate = true;
-
-    /**
-     * Set to true not to validate the CAS server.
-     *
-     * @hideinitializer
-     */
-    private $_no_cas_server_validation = false;
-
-
-    /**
-     * Set the CA certificate of the CAS server.
-     *
-     * @param string $cert        the PEM certificate file name of the CA that emited
-     * the cert of the server
-     * @param bool   $validate_cn valiate CN of the CAS server certificate
-     *
-     * @return void
-     */
-    public function setCasServerCACert($cert, $validate_cn)
-    {
-    // Argument validation
-        if (gettype($cert) != 'string') {
-            throw new CAS_TypeMismatchException($cert, '$cert', 'string');
-        }
-        if (gettype($validate_cn) != 'boolean') {
-            throw new CAS_TypeMismatchException($validate_cn, '$validate_cn', 'boolean');
-        }
-        if (!file_exists($cert)) {
-            throw new CAS_InvalidArgumentException("Certificate file does not exist " . $this->_requestImplementation);
-        }
-        $this->_cas_server_ca_cert = $cert;
-        $this->_cas_server_cn_validate = $validate_cn;
-    }
-
-    /**
-     * Set no SSL validation for the CAS server.
-     *
-     * @return void
-     */
-    public function setNoCasServerValidation()
-    {
-        $this->_no_cas_server_validation = true;
-    }
-
-    /**
-     * This method is used to validate a CAS 1,0 ticket; halt on failure, and
-     * sets $validate_url, $text_reponse and $tree_response on success.
-     *
-     * @param string &$validate_url  reference to the the URL of the request to
-     * the CAS server.
-     * @param string &$text_response reference to the response of the CAS
-     * server, as is (XML text).
-     * @param string &$tree_response reference to the response of the CAS
-     * server, as a DOM XML tree.
-     * @param bool   $renew          true to force the authentication with the CAS server
-     *
-     * @return bool true when successfull and issue a CAS_AuthenticationException
-     * and false on an error
-     * @throws  CAS_AuthenticationException
-     */
-    public function validateCAS10(&$validate_url,&$text_response,&$tree_response,$renew=false)
-    {
-        phpCAS::traceBegin();
-        // build the URL to validate the ticket
-        $validate_url = $this->getServerServiceValidateURL()
-            .'&ticket='.urlencode($this->getTicket());
-
-        if ( $renew ) {
-            // pass the renew
-            $validate_url .= '&renew=true';
-        }
-
-        $headers = '';
-        $err_msg = '';
-        // open and read the URL
-        if ( !$this->_readURL($validate_url, $headers, $text_response, $err_msg) ) {
-            phpCAS::trace(
-                'could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')'
-            );
-            throw new CAS_AuthenticationException(
-                $this, 'CAS 1.0 ticket not validated', $validate_url,
-                true/*$no_response*/
-            );
-        }
-
-        if (preg_match('/^no\n/', $text_response)) {
-            phpCAS::trace('Ticket has not been validated');
-            throw new CAS_AuthenticationException(
-                $this, 'ST not validated', $validate_url, false/*$no_response*/,
-                false/*$bad_response*/, $text_response
-            );
-        } else if (!preg_match('/^yes\n/', $text_response)) {
-            phpCAS::trace('ill-formed response');
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket not validated', $validate_url,
-                false/*$no_response*/, true/*$bad_response*/, $text_response
-            );
-        }
-        // ticket has been validated, extract the user name
-        $arr = preg_split('/\n/', $text_response);
-        $this->_setUser(trim($arr[1]));
-
-        $this->_renameSession($this->getTicket());
-
-        // at this step, ticket has been validated and $this->_user has been set,
-        phpCAS::traceEnd(true);
-        return true;
-    }
-
-    /** @} */
-
-
-    // ########################################################################
-    //  SAML VALIDATION
-    // ########################################################################
-    /**
-    * @addtogroup internalSAML
-    * @{
-    */
-
-    /**
-     * This method is used to validate a SAML TICKET; halt on failure, and sets
-     * $validate_url, $text_reponse and $tree_response on success. These
-     * parameters are used later by CAS_Client::_validatePGT() for CAS proxies.
-     *
-     * @param string &$validate_url  reference to the the URL of the request to
-     * the CAS server.
-     * @param string &$text_response reference to the response of the CAS
-     * server, as is (XML text).
-     * @param string &$tree_response reference to the response of the CAS
-     * server, as a DOM XML tree.
-     * @param bool   $renew          true to force the authentication with the CAS server
-     *
-     * @return bool true when successfull and issue a CAS_AuthenticationException
-     * and false on an error
-     *
-     * @throws  CAS_AuthenticationException
-     */
-    public function validateSA(&$validate_url,&$text_response,&$tree_response,$renew=false)
-    {
-        phpCAS::traceBegin();
-        $result = false;
-        // build the URL to validate the ticket
-        $validate_url = $this->getServerSamlValidateURL();
-
-        if ( $renew ) {
-            // pass the renew
-            $validate_url .= '&renew=true';
-        }
-
-        $headers = '';
-        $err_msg = '';
-        // open and read the URL
-        if ( !$this->_readURL($validate_url, $headers, $text_response, $err_msg) ) {
-            phpCAS::trace(
-                'could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')'
-            );
-            throw new CAS_AuthenticationException(
-                $this, 'SA not validated', $validate_url, true/*$no_response*/
-            );
-        }
-
-        phpCAS::trace('server version: '.$this->getServerVersion());
-
-        // analyze the result depending on the version
-        switch ($this->getServerVersion()) {
-        case SAML_VERSION_1_1:
-            // create new DOMDocument Object
-            $dom = new DOMDocument();
-            // Fix possible whitspace problems
-            $dom->preserveWhiteSpace = false;
-            // read the response of the CAS server into a DOM object
-            if (!($dom->loadXML($text_response))) {
-                phpCAS::trace('dom->loadXML() failed');
-                throw new CAS_AuthenticationException(
-                    $this, 'SA not validated', $validate_url,
-                    false/*$no_response*/, true/*$bad_response*/,
-                    $text_response
-                );
-            }
-            // read the root node of the XML tree
-            if (!($tree_response = $dom->documentElement)) {
-                phpCAS::trace('documentElement() failed');
-                throw new CAS_AuthenticationException(
-                    $this, 'SA not validated', $validate_url,
-                    false/*$no_response*/, true/*$bad_response*/,
-                    $text_response
-                );
-            } else if ( $tree_response->localName != 'Envelope' ) {
-                // insure that tag name is 'Envelope'
-                phpCAS::trace(
-                    'bad XML root node (should be `Envelope\' instead of `'
-                    .$tree_response->localName.'\''
-                );
-                throw new CAS_AuthenticationException(
-                    $this, 'SA not validated', $validate_url,
-                    false/*$no_response*/, true/*$bad_response*/,
-                    $text_response
-                );
-            } else if ($tree_response->getElementsByTagName("NameIdentifier")->length != 0) {
-                // check for the NameIdentifier tag in the SAML response
-                $success_elements = $tree_response->getElementsByTagName("NameIdentifier");
-                phpCAS::trace('NameIdentifier found');
-                $user = trim($success_elements->item(0)->nodeValue);
-                phpCAS::trace('user = `'.$user.'`');
-                $this->_setUser($user);
-                $this->_setSessionAttributes($text_response);
-                $result = true;
-            } else {
-                phpCAS::trace('no <NameIdentifier> tag found in SAML payload');
-                throw new CAS_AuthenticationException(
-                    $this, 'SA not validated', $validate_url,
-                    false/*$no_response*/, true/*$bad_response*/,
-                    $text_response
-                );
-            }
-        }
-        if ($result) {
-            $this->_renameSession($this->getTicket());
-        }
-        // at this step, ST has been validated and $this->_user has been set,
-        phpCAS::traceEnd($result);
-        return $result;
-    }
-
-    /**
-     * This method will parse the DOM and pull out the attributes from the SAML
-     * payload and put them into an array, then put the array into the session.
-     *
-     * @param string $text_response the SAML payload.
-     *
-     * @return bool true when successfull and false if no attributes a found
-     */
-    private function _setSessionAttributes($text_response)
-    {
-        phpCAS::traceBegin();
-
-        $result = false;
-
-        $attr_array = array();
-
-        // create new DOMDocument Object
-        $dom = new DOMDocument();
-        // Fix possible whitspace problems
-        $dom->preserveWhiteSpace = false;
-        if (($dom->loadXML($text_response))) {
-            $xPath = new DOMXPath($dom);
-            $xPath->registerNamespace('samlp', 'urn:oasis:names:tc:SAML:1.0:protocol');
-            $xPath->registerNamespace('saml', 'urn:oasis:names:tc:SAML:1.0:assertion');
-            $nodelist = $xPath->query("//saml:Attribute");
-
-            if ($nodelist) {
-                foreach ($nodelist as $node) {
-                    $xres = $xPath->query("saml:AttributeValue", $node);
-                    $name = $node->getAttribute("AttributeName");
-                    $value_array = array();
-                    foreach ($xres as $node2) {
-                        $value_array[] = $node2->nodeValue;
-                    }
-                    $attr_array[$name] = $value_array;
-                }
-                // UGent addition...
-                foreach ($attr_array as $attr_key => $attr_value) {
-                    if (count($attr_value) > 1) {
-                        $this->_attributes[$attr_key] = $attr_value;
-                        phpCAS::trace("* " . $attr_key . "=" . print_r($attr_value, true));
-                    } else {
-                        $this->_attributes[$attr_key] = $attr_value[0];
-                        phpCAS::trace("* " . $attr_key . "=" . $attr_value[0]);
-                    }
-                }
-                $result = true;
-            } else {
-                phpCAS::trace("SAML Attributes are empty");
-                $result = false;
-            }
-        }
-        phpCAS::traceEnd($result);
-        return $result;
-    }
-
-    /** @} */
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // XX                                                                    XX
-    // XX                     PROXY FEATURES (CAS 2.0)                       XX
-    // XX                                                                    XX
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
-    // ########################################################################
-    //  PROXYING
-    // ########################################################################
-    /**
-    * @addtogroup internalProxy
-    * @{
-    */
-
-    /**
-     * @var  bool is the client a proxy
-     * A boolean telling if the client is a CAS proxy or not. Written by
-     * CAS_Client::CAS_Client(), read by CAS_Client::isProxy().
-     */
-    private $_proxy;
-
-    /**
-     * @var  CAS_CookieJar Handler for managing service cookies.
-     */
-    private $_serviceCookieJar;
-
-    /**
-     * Tells if a CAS client is a CAS proxy or not
-     *
-     * @return bool true when the CAS client is a CAS proxy, false otherwise
-     */
-    public function isProxy()
-    {
-        return $this->_proxy;
-    }
-
-
-    /** @} */
-    // ########################################################################
-    //  PGT
-    // ########################################################################
-    /**
-    * @addtogroup internalProxy
-    * @{
-    */
-
-    /**
-     * the Proxy Grnting Ticket given by the CAS server (empty otherwise).
-     * Written by CAS_Client::_setPGT(), read by CAS_Client::_getPGT() and
-     * CAS_Client::_hasPGT().
-     *
-     * @hideinitializer
-     */
-    private $_pgt = '';
-
-    /**
-     * This method returns the Proxy Granting Ticket given by the CAS server.
-     *
-     * @return string the Proxy Granting Ticket.
-     */
-    private function _getPGT()
-    {
-        return $this->_pgt;
-    }
-
-    /**
-     * This method stores the Proxy Granting Ticket.
-     *
-     * @param string $pgt The Proxy Granting Ticket.
-     *
-     * @return void
-     */
-    private function _setPGT($pgt)
-    {
-        $this->_pgt = $pgt;
-    }
-
-    /**
-     * This method tells if a Proxy Granting Ticket was stored.
-     *
-     * @return bool true if a Proxy Granting Ticket has been stored.
-     */
-    private function _hasPGT()
-    {
-        return !empty($this->_pgt);
-    }
-
-    /** @} */
-
-    // ########################################################################
-    //  CALLBACK MODE
-    // ########################################################################
-    /**
-    * @addtogroup internalCallback
-    * @{
-    */
-    /**
-     * each PHP script using phpCAS in proxy mode is its own callback to get the
-     * PGT back from the CAS server. callback_mode is detected by the constructor
-     * thanks to the GET parameters.
-     */
-
-    /**
-     * @var bool a boolean to know if the CAS client is running in callback mode. Written by
-     * CAS_Client::setCallBackMode(), read by CAS_Client::_isCallbackMode().
-     *
-     * @hideinitializer
-     */
-    private $_callback_mode = false;
-
-    /**
-     * This method sets/unsets callback mode.
-     *
-     * @param bool $callback_mode true to set callback mode, false otherwise.
-     *
-     * @return void
-     */
-    private function _setCallbackMode($callback_mode)
-    {
-        $this->_callback_mode = $callback_mode;
-    }
-
-    /**
-     * This method returns true when the CAS client is running in callback mode,
-     * false otherwise.
-     *
-     * @return bool A boolean.
-     */
-    private function _isCallbackMode()
-    {
-        return $this->_callback_mode;
-    }
-
-    /**
-     * @var bool a boolean to know if the CAS client is using POST parameters when in callback mode.
-     * Written by CAS_Client::_setCallbackModeUsingPost(), read by CAS_Client::_isCallbackModeUsingPost().
-     *
-     * @hideinitializer
-     */
-    private $_callback_mode_using_post = false;
-
-    /**
-     * This method sets/unsets usage of POST parameters in callback mode (default/false is GET parameters)
-     *
-     * @param bool $callback_mode_using_post true to use POST, false to use GET (default).
-     *
-     * @return void
-     */
-    private function _setCallbackModeUsingPost($callback_mode_using_post)
-    {
-        $this->_callback_mode_using_post = $callback_mode_using_post;
-    }
-
-    /**
-     * This method returns true when the callback mode is using POST, false otherwise.
-     *
-     * @return bool A boolean.
-     */
-    private function _isCallbackModeUsingPost()
-    {
-        return $this->_callback_mode_using_post;
-    }
-
-    /**
-     * the URL that should be used for the PGT callback (in fact the URL of the
-     * current request without any CGI parameter). Written and read by
-     * CAS_Client::_getCallbackURL().
-     *
-     * @hideinitializer
-     */
-    private $_callback_url = '';
-
-    /**
-     * This method returns the URL that should be used for the PGT callback (in
-     * fact the URL of the current request without any CGI parameter, except if
-     * phpCAS::setFixedCallbackURL() was used).
-     *
-     * @return string The callback URL
-     */
-    private function _getCallbackURL()
-    {
-        // the URL is built when needed only
-        if ( empty($this->_callback_url) ) {
-            // remove the ticket if present in the URL
-            $final_uri = 'https://';
-            $final_uri .= $this->_getClientUrl();
-            $request_uri = $_SERVER['REQUEST_URI'];
-            $request_uri = preg_replace('/\?.*$/', '', $request_uri);
-            $final_uri .= $request_uri;
-            $this->_callback_url = $final_uri;
-        }
-        return $this->_callback_url;
-    }
-
-    /**
-     * This method sets the callback url.
-     *
-     * @param string $url url to set callback
-     *
-     * @return string the callback url
-     */
-    public function setCallbackURL($url)
-    {
-        // Sequence validation
-        $this->ensureIsProxy();
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        return $this->_callback_url = $url;
-    }
-
-    /**
-     * This method is called by CAS_Client::CAS_Client() when running in callback
-     * mode. It stores the PGT and its PGT Iou, prints its output and halts.
-     *
-     * @return void
-     */
-    private function _callback()
-    {
-        phpCAS::traceBegin();
-        if ($this->_isCallbackModeUsingPost()) {
-            $pgtId = $_POST['pgtId'];
-            $pgtIou = $_POST['pgtIou'];
-        } else {
-            $pgtId = $_GET['pgtId'];
-            $pgtIou = $_GET['pgtIou'];
-        }
-        if (preg_match('/^PGTIOU-[\.\-\w]+$/', $pgtIou)) {
-            if (preg_match('/^[PT]GT-[\.\-\w]+$/', $pgtId)) {
-                phpCAS::trace('Storing PGT `'.$pgtId.'\' (id=`'.$pgtIou.'\')');
-                $this->_storePGT($pgtId, $pgtIou);
-                if ($this->isXmlResponse()) {
-                    echo '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n";
-                    echo '<proxySuccess xmlns="http://www.yale.edu/tp/cas" />';
-                    phpCAS::traceExit("XML response sent");
-                } else {
-                    $this->printHTMLHeader('phpCAS callback');
-                    echo '<p>Storing PGT `'.$pgtId.'\' (id=`'.$pgtIou.'\').</p>';
-                    $this->printHTMLFooter();
-                    phpCAS::traceExit("HTML response sent");
-                }
-                phpCAS::traceExit("Successfull Callback");
-            } else {
-                phpCAS::error('PGT format invalid' . $pgtId);
-                phpCAS::traceExit('PGT format invalid' . $pgtId);
-            }
-        } else {
-            phpCAS::error('PGTiou format invalid' . $pgtIou);
-            phpCAS::traceExit('PGTiou format invalid' . $pgtIou);
-        }
-
-        // Flush the buffer to prevent from sending anything other then a 200
-        // Success Status back to the CAS Server. The Exception would normally
-        // report as a 500 error.
-        flush();
-        throw new CAS_GracefullTerminationException();
-    }
-
-    /**
-     * Check if application/xml or text/xml is pressent in HTTP_ACCEPT header values
-     * when return value is complex and contains attached q parameters.
-     * Example:  HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9
-     * @return bool
-     */
-    private function isXmlResponse()
-    {
-        if (!array_key_exists('HTTP_ACCEPT', $_SERVER)) {
-            return false;
-        }
-        if (strpos($_SERVER['HTTP_ACCEPT'], 'application/xml') === false && strpos($_SERVER['HTTP_ACCEPT'], 'text/xml') === false) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /** @} */
-
-    // ########################################################################
-    //  PGT STORAGE
-    // ########################################################################
-    /**
-    * @addtogroup internalPGTStorage
-    * @{
-    */
-
-    /**
-     * @var  CAS_PGTStorage_AbstractStorage
-     * an instance of a class inheriting of PGTStorage, used to deal with PGT
-     * storage. Created by CAS_Client::setPGTStorageFile(), used
-     * by CAS_Client::setPGTStorageFile() and CAS_Client::_initPGTStorage().
-     *
-     * @hideinitializer
-     */
-    private $_pgt_storage = null;
-
-    /**
-     * This method is used to initialize the storage of PGT's.
-     * Halts on error.
-     *
-     * @return void
-     */
-    private function _initPGTStorage()
-    {
-        // if no SetPGTStorageXxx() has been used, default to file
-        if ( !is_object($this->_pgt_storage) ) {
-            $this->setPGTStorageFile();
-        }
-
-        // initializes the storage
-        $this->_pgt_storage->init();
-    }
-
-    /**
-     * This method stores a PGT. Halts on error.
-     *
-     * @param string $pgt     the PGT to store
-     * @param string $pgt_iou its corresponding Iou
-     *
-     * @return void
-     */
-    private function _storePGT($pgt,$pgt_iou)
-    {
-        // ensure that storage is initialized
-        $this->_initPGTStorage();
-        // writes the PGT
-        $this->_pgt_storage->write($pgt, $pgt_iou);
-    }
-
-    /**
-     * This method reads a PGT from its Iou and deletes the corresponding
-     * storage entry.
-     *
-     * @param string $pgt_iou the PGT Iou
-     *
-     * @return string mul The PGT corresponding to the Iou, false when not found.
-     */
-    private function _loadPGT($pgt_iou)
-    {
-        // ensure that storage is initialized
-        $this->_initPGTStorage();
-        // read the PGT
-        return $this->_pgt_storage->read($pgt_iou);
-    }
-
-    /**
-     * This method can be used to set a custom PGT storage object.
-     *
-     * @param CAS_PGTStorage_AbstractStorage $storage a PGT storage object that
-     * inherits from the CAS_PGTStorage_AbstractStorage class
-     *
-     * @return void
-     */
-    public function setPGTStorage($storage)
-    {
-        // Sequence validation
-        $this->ensureIsProxy();
-
-        // check that the storage has not already been set
-        if ( is_object($this->_pgt_storage) ) {
-            phpCAS::error('PGT storage already defined');
-        }
-
-        // check to make sure a valid storage object was specified
-        if ( !($storage instanceof CAS_PGTStorage_AbstractStorage) )
-            throw new CAS_TypeMismatchException($storage, '$storage', 'CAS_PGTStorage_AbstractStorage object');
-
-        // store the PGTStorage object
-        $this->_pgt_storage = $storage;
-    }
-
-    /**
-     * This method is used to tell phpCAS to store the response of the
-     * CAS server to PGT requests in a database.
-     *
-     * @param string|PDO $dsn_or_pdo     a dsn string to use for creating a PDO
-     * object or a PDO object
-     * @param string $username       the username to use when connecting to the
-     * database
-     * @param string $password       the password to use when connecting to the
-     * database
-     * @param string $table          the table to use for storing and retrieving
-     * PGTs
-     * @param string $driver_options any driver options to use when connecting
-     * to the database
-     *
-     * @return void
-     */
-    public function setPGTStorageDb(
-        $dsn_or_pdo, $username='', $password='', $table='', $driver_options=null
-    ) {
-        // Sequence validation
-        $this->ensureIsProxy();
-
-        // Argument validation
-        if (!(is_object($dsn_or_pdo) && $dsn_or_pdo instanceof PDO) && !is_string($dsn_or_pdo))
-            throw new CAS_TypeMismatchException($dsn_or_pdo, '$dsn_or_pdo', 'string or PDO object');
-        if (gettype($username) != 'string')
-            throw new CAS_TypeMismatchException($username, '$username', 'string');
-        if (gettype($password) != 'string')
-            throw new CAS_TypeMismatchException($password, '$password', 'string');
-        if (gettype($table) != 'string')
-            throw new CAS_TypeMismatchException($table, '$password', 'string');
-
-        // create the storage object
-        $this->setPGTStorage(
-            new CAS_PGTStorage_Db(
-                $this, $dsn_or_pdo, $username, $password, $table, $driver_options
-            )
-        );
-    }
-
-    /**
-     * This method is used to tell phpCAS to store the response of the
-     * CAS server to PGT requests onto the filesystem.
-     *
-     * @param string $path the path where the PGT's should be stored
-     *
-     * @return void
-     */
-    public function setPGTStorageFile($path='')
-    {
-        // Sequence validation
-        $this->ensureIsProxy();
-
-        // Argument validation
-        if (gettype($path) != 'string')
-            throw new CAS_TypeMismatchException($path, '$path', 'string');
-
-        // create the storage object
-        $this->setPGTStorage(new CAS_PGTStorage_File($this, $path));
-    }
-
-
-    // ########################################################################
-    //  PGT VALIDATION
-    // ########################################################################
-    /**
-    * This method is used to validate a PGT; halt on failure.
-    *
-    * @param string &$validate_url the URL of the request to the CAS server.
-    * @param string $text_response the response of the CAS server, as is
-    *                              (XML text); result of
-    *                              CAS_Client::validateCAS10() or
-    *                              CAS_Client::validateCAS20().
-    * @param DOMElement $tree_response the response of the CAS server, as a DOM XML
-    * tree; result of CAS_Client::validateCAS10() or CAS_Client::validateCAS20().
-    *
-    * @return bool true when successfull and issue a CAS_AuthenticationException
-    * and false on an error
-    *
-    * @throws CAS_AuthenticationException
-    */
-    private function _validatePGT(&$validate_url,$text_response,$tree_response)
-    {
-        phpCAS::traceBegin();
-        if ( $tree_response->getElementsByTagName("proxyGrantingTicket")->length == 0) {
-            phpCAS::trace('<proxyGrantingTicket> not found');
-            // authentication succeded, but no PGT Iou was transmitted
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket validated but no PGT Iou transmitted',
-                $validate_url, false/*$no_response*/, false/*$bad_response*/,
-                $text_response
-            );
-        } else {
-            // PGT Iou transmitted, extract it
-            $pgt_iou = trim(
-                $tree_response->getElementsByTagName("proxyGrantingTicket")->item(0)->nodeValue
-            );
-            if (preg_match('/^PGTIOU-[\.\-\w]+$/', $pgt_iou)) {
-                $pgt = $this->_loadPGT($pgt_iou);
-                if ( $pgt == false ) {
-                    phpCAS::trace('could not load PGT');
-                    throw new CAS_AuthenticationException(
-                        $this,
-                        'PGT Iou was transmitted but PGT could not be retrieved',
-                        $validate_url, false/*$no_response*/,
-                        false/*$bad_response*/, $text_response
-                    );
-                }
-                $this->_setPGT($pgt);
-            } else {
-                phpCAS::trace('PGTiou format error');
-                throw new CAS_AuthenticationException(
-                    $this, 'PGT Iou was transmitted but has wrong format',
-                    $validate_url, false/*$no_response*/, false/*$bad_response*/,
-                    $text_response
-                );
-            }
-        }
-        phpCAS::traceEnd(true);
-        return true;
-    }
-
-    // ########################################################################
-    //  PGT VALIDATION
-    // ########################################################################
-
-    /**
-     * This method is used to retrieve PT's from the CAS server thanks to a PGT.
-     *
-     * @param string $target_service the service to ask for with the PT.
-     * @param int &$err_code      an error code (PHPCAS_SERVICE_OK on success).
-     * @param string &$err_msg       an error message (empty on success).
-     *
-     * @return string|false a Proxy Ticket, or false on error.
-     */
-    public function retrievePT($target_service,&$err_code,&$err_msg)
-    {
-        // Argument validation
-        if (gettype($target_service) != 'string')
-            throw new CAS_TypeMismatchException($target_service, '$target_service', 'string');
-
-        phpCAS::traceBegin();
-
-        // by default, $err_msg is set empty and $pt to true. On error, $pt is
-        // set to false and $err_msg to an error message. At the end, if $pt is false
-        // and $error_msg is still empty, it is set to 'invalid response' (the most
-        // commonly encountered error).
-        $err_msg = '';
-
-        // build the URL to retrieve the PT
-        $cas_url = $this->getServerProxyURL().'?targetService='
-            .urlencode($target_service).'&pgt='.$this->_getPGT();
-
-        $headers = '';
-        $cas_response = '';
-        // open and read the URL
-        if ( !$this->_readURL($cas_url, $headers, $cas_response, $err_msg) ) {
-            phpCAS::trace(
-                'could not open URL \''.$cas_url.'\' to validate ('.$err_msg.')'
-            );
-            $err_code = PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE;
-            $err_msg = 'could not retrieve PT (no response from the CAS server)';
-            phpCAS::traceEnd(false);
-            return false;
-        }
-
-        $bad_response = false;
-
-        // create new DOMDocument object
-        $dom = new DOMDocument();
-        // Fix possible whitspace problems
-        $dom->preserveWhiteSpace = false;
-        // read the response of the CAS server into a DOM object
-        if ( !($dom->loadXML($cas_response))) {
-            phpCAS::trace('dom->loadXML() failed');
-            // read failed
-            $bad_response = true;
-        }
-
-        if ( !$bad_response ) {
-            // read the root node of the XML tree
-            if ( !($root = $dom->documentElement) ) {
-                phpCAS::trace('documentElement failed');
-                // read failed
-                $bad_response = true;
-            }
-        }
-
-        if ( !$bad_response ) {
-            // insure that tag name is 'serviceResponse'
-            if ( $root->localName != 'serviceResponse' ) {
-                phpCAS::trace('localName failed');
-                // bad root node
-                $bad_response = true;
-            }
-        }
-
-        if ( !$bad_response ) {
-            // look for a proxySuccess tag
-            if ( $root->getElementsByTagName("proxySuccess")->length != 0) {
-                $proxy_success_list = $root->getElementsByTagName("proxySuccess");
-
-                // authentication succeded, look for a proxyTicket tag
-                if ( $proxy_success_list->item(0)->getElementsByTagName("proxyTicket")->length != 0) {
-                    $err_code = PHPCAS_SERVICE_OK;
-                    $err_msg = '';
-                    $pt = trim(
-                        $proxy_success_list->item(0)->getElementsByTagName("proxyTicket")->item(0)->nodeValue
-                    );
-                    phpCAS::trace('original PT: '.trim($pt));
-                    phpCAS::traceEnd($pt);
-                    return $pt;
-                } else {
-                    phpCAS::trace('<proxySuccess> was found, but not <proxyTicket>');
-                }
-            } else if ($root->getElementsByTagName("proxyFailure")->length != 0) {
-                // look for a proxyFailure tag
-                $proxy_failure_list = $root->getElementsByTagName("proxyFailure");
-
-                // authentication failed, extract the error
-                $err_code = PHPCAS_SERVICE_PT_FAILURE;
-                $err_msg = 'PT retrieving failed (code=`'
-                .$proxy_failure_list->item(0)->getAttribute('code')
-                .'\', message=`'
-                .trim($proxy_failure_list->item(0)->nodeValue)
-                .'\')';
-                phpCAS::traceEnd(false);
-                return false;
-            } else {
-                phpCAS::trace('neither <proxySuccess> nor <proxyFailure> found');
-            }
-        }
-
-        // at this step, we are sure that the response of the CAS server was
-        // illformed
-        $err_code = PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE;
-        $err_msg = 'Invalid response from the CAS server (response=`'
-            .$cas_response.'\')';
-
-        phpCAS::traceEnd(false);
-        return false;
-    }
-
-    /** @} */
-
-    // ########################################################################
-    // READ CAS SERVER ANSWERS
-    // ########################################################################
-
-    /**
-     * @addtogroup internalMisc
-     * @{
-     */
-
-    /**
-     * This method is used to acces a remote URL.
-     *
-     * @param string $url      the URL to access.
-     * @param string &$headers an array containing the HTTP header lines of the
-     * response (an empty array on failure).
-     * @param string &$body    the body of the response, as a string (empty on
-     * failure).
-     * @param string &$err_msg an error message, filled on failure.
-     *
-     * @return bool true on success, false otherwise (in this later case, $err_msg
-     * contains an error message).
-     */
-    private function _readURL($url, &$headers, &$body, &$err_msg)
-    {
-        phpCAS::traceBegin();
-        $className = $this->_requestImplementation;
-        $request = new $className();
-
-        if (count($this->_curl_options)) {
-            $request->setCurlOptions($this->_curl_options);
-        }
-
-        $request->setUrl($url);
-
-        if (empty($this->_cas_server_ca_cert) && !$this->_no_cas_server_validation) {
-            phpCAS::error(
-                'one of the methods phpCAS::setCasServerCACert() or phpCAS::setNoCasServerValidation() must be called.'
-            );
-        }
-        if ($this->_cas_server_ca_cert != '') {
-            $request->setSslCaCert(
-                $this->_cas_server_ca_cert, $this->_cas_server_cn_validate
-            );
-        }
-
-        // add extra stuff if SAML
-        if ($this->getServerVersion() == SAML_VERSION_1_1) {
-            $request->addHeader("soapaction: http://www.oasis-open.org/committees/security");
-            $request->addHeader("cache-control: no-cache");
-            $request->addHeader("pragma: no-cache");
-            $request->addHeader("accept: text/xml");
-            $request->addHeader("connection: keep-alive");
-            $request->addHeader("content-type: text/xml");
-            $request->makePost();
-            $request->setPostBody($this->_buildSAMLPayload());
-        }
-
-        if ($request->send()) {
-            $headers = $request->getResponseHeaders();
-            $body = $request->getResponseBody();
-            $err_msg = '';
-            phpCAS::traceEnd(true);
-            return true;
-        } else {
-            $headers = '';
-            $body = '';
-            $err_msg = $request->getErrorMessage();
-            phpCAS::traceEnd(false);
-            return false;
-        }
-    }
-
-    /**
-     * This method is used to build the SAML POST body sent to /samlValidate URL.
-     *
-     * @return string the SOAP-encased SAMLP artifact (the ticket).
-     */
-    private function _buildSAMLPayload()
-    {
-        phpCAS::traceBegin();
-
-        //get the ticket
-        $sa = urlencode($this->getTicket());
-
-        $body = SAML_SOAP_ENV.SAML_SOAP_BODY.SAMLP_REQUEST
-            .SAML_ASSERTION_ARTIFACT.$sa.SAML_ASSERTION_ARTIFACT_CLOSE
-            .SAMLP_REQUEST_CLOSE.SAML_SOAP_BODY_CLOSE.SAML_SOAP_ENV_CLOSE;
-
-        phpCAS::traceEnd($body);
-        return ($body);
-    }
-
-    /** @} **/
-
-    // ########################################################################
-    // ACCESS TO EXTERNAL SERVICES
-    // ########################################################################
-
-    /**
-     * @addtogroup internalProxyServices
-     * @{
-     */
-
-
-    /**
-     * Answer a proxy-authenticated service handler.
-     *
-     * @param string $type The service type. One of:
-     * PHPCAS_PROXIED_SERVICE_HTTP_GET, PHPCAS_PROXIED_SERVICE_HTTP_POST,
-     * PHPCAS_PROXIED_SERVICE_IMAP
-     *
-     * @return CAS_ProxiedService
-     * @throws InvalidArgumentException If the service type is unknown.
-     */
-    public function getProxiedService ($type)
-    {
-        // Sequence validation
-        $this->ensureIsProxy();
-        $this->ensureAuthenticationCallSuccessful();
-
-        // Argument validation
-        if (gettype($type) != 'string')
-            throw new CAS_TypeMismatchException($type, '$type', 'string');
-
-        switch ($type) {
-        case PHPCAS_PROXIED_SERVICE_HTTP_GET:
-        case PHPCAS_PROXIED_SERVICE_HTTP_POST:
-            $requestClass = $this->_requestImplementation;
-            $request = new $requestClass();
-            if (count($this->_curl_options)) {
-                $request->setCurlOptions($this->_curl_options);
-            }
-            $proxiedService = new $type($request, $this->_serviceCookieJar);
-            if ($proxiedService instanceof CAS_ProxiedService_Testable) {
-                $proxiedService->setCasClient($this);
-            }
-            return $proxiedService;
-        case PHPCAS_PROXIED_SERVICE_IMAP;
-            $proxiedService = new CAS_ProxiedService_Imap($this->_getUser());
-            if ($proxiedService instanceof CAS_ProxiedService_Testable) {
-                $proxiedService->setCasClient($this);
-            }
-            return $proxiedService;
-        default:
-            throw new CAS_InvalidArgumentException(
-                "Unknown proxied-service type, $type."
-            );
-        }
-    }
-
-    /**
-     * Initialize a proxied-service handler with the proxy-ticket it should use.
-     *
-     * @param CAS_ProxiedService $proxiedService service handler
-     *
-     * @return void
-     *
-     * @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
-     *		The code of the Exception will be one of:
-     *			PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_FAILURE
-     * @throws CAS_ProxiedService_Exception If there is a failure getting the
-     * url from the proxied service.
-     */
-    public function initializeProxiedService (CAS_ProxiedService $proxiedService)
-    {
-        // Sequence validation
-        $this->ensureIsProxy();
-        $this->ensureAuthenticationCallSuccessful();
-
-        $url = $proxiedService->getServiceUrl();
-        if (!is_string($url)) {
-            throw new CAS_ProxiedService_Exception(
-                "Proxied Service ".get_class($proxiedService)
-                ."->getServiceUrl() should have returned a string, returned a "
-                .gettype($url)." instead."
-            );
-        }
-        $pt = $this->retrievePT($url, $err_code, $err_msg);
-        if (!$pt) {
-            throw new CAS_ProxyTicketException($err_msg, $err_code);
-        }
-        $proxiedService->setProxyTicket($pt);
-    }
-
-    /**
-     * This method is used to access an HTTP[S] service.
-     *
-     * @param string $url       the service to access.
-     * @param int    &$err_code an error code Possible values are
-     * PHPCAS_SERVICE_OK (on success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE,
-     * PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE, PHPCAS_SERVICE_PT_FAILURE,
-     * PHPCAS_SERVICE_NOT_AVAILABLE.
-     * @param string &$output   the output of the service (also used to give an error
-     * message on failure).
-     *
-     * @return bool true on success, false otherwise (in this later case, $err_code
-     * gives the reason why it failed and $output contains an error message).
-     */
-    public function serviceWeb($url,&$err_code,&$output)
-    {
-        // Sequence validation
-        $this->ensureIsProxy();
-        $this->ensureAuthenticationCallSuccessful();
-
-        // Argument validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        try {
-            $service = $this->getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_GET);
-            $service->setUrl($url);
-            $service->send();
-            $output = $service->getResponseBody();
-            $err_code = PHPCAS_SERVICE_OK;
-            return true;
-        } catch (CAS_ProxyTicketException $e) {
-            $err_code = $e->getCode();
-            $output = $e->getMessage();
-            return false;
-        } catch (CAS_ProxiedService_Exception $e) {
-            $lang = $this->getLangObj();
-            $output = sprintf(
-                $lang->getServiceUnavailable(), $url, $e->getMessage()
-            );
-            $err_code = PHPCAS_SERVICE_NOT_AVAILABLE;
-            return false;
-        }
-    }
-
-    /**
-     * This method is used to access an IMAP/POP3/NNTP service.
-     *
-     * @param string $url        a string giving the URL of the service, including
-     * the mailing box for IMAP URLs, as accepted by imap_open().
-     * @param string $serviceUrl a string giving for CAS retrieve Proxy ticket
-     * @param string $flags      options given to imap_open().
-     * @param int    &$err_code  an error code Possible values are
-     * PHPCAS_SERVICE_OK (on success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE,
-     * PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE, PHPCAS_SERVICE_PT_FAILURE,
-     *  PHPCAS_SERVICE_NOT_AVAILABLE.
-     * @param string &$err_msg   an error message on failure
-     * @param string &$pt        the Proxy Ticket (PT) retrieved from the CAS
-     * server to access the URL on success, false on error).
-     *
-     * @return object|false an IMAP stream on success, false otherwise (in this later
-     *  case, $err_code gives the reason why it failed and $err_msg contains an
-     *  error message).
-     */
-    public function serviceMail($url,$serviceUrl,$flags,&$err_code,&$err_msg,&$pt)
-    {
-        // Sequence validation
-        $this->ensureIsProxy();
-        $this->ensureAuthenticationCallSuccessful();
-
-        // Argument validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-        if (gettype($serviceUrl) != 'string')
-            throw new CAS_TypeMismatchException($serviceUrl, '$serviceUrl', 'string');
-        if (gettype($flags) != 'integer')
-            throw new CAS_TypeMismatchException($flags, '$flags', 'string');
-
-        try {
-            $service = $this->getProxiedService(PHPCAS_PROXIED_SERVICE_IMAP);
-            $service->setServiceUrl($serviceUrl);
-            $service->setMailbox($url);
-            $service->setOptions($flags);
-
-            $stream = $service->open();
-            $err_code = PHPCAS_SERVICE_OK;
-            $pt = $service->getImapProxyTicket();
-            return $stream;
-        } catch (CAS_ProxyTicketException $e) {
-            $err_msg = $e->getMessage();
-            $err_code = $e->getCode();
-            $pt = false;
-            return false;
-        } catch (CAS_ProxiedService_Exception $e) {
-            $lang = $this->getLangObj();
-            $err_msg = sprintf(
-                $lang->getServiceUnavailable(),
-                $url,
-                $e->getMessage()
-            );
-            $err_code = PHPCAS_SERVICE_NOT_AVAILABLE;
-            $pt = false;
-            return false;
-        }
-    }
-
-    /** @} **/
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // XX                                                                    XX
-    // XX                  PROXIED CLIENT FEATURES (CAS 2.0)                 XX
-    // XX                                                                    XX
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
-    // ########################################################################
-    //  PT
-    // ########################################################################
-    /**
-    * @addtogroup internalService
-    * @{
-    */
-
-    /**
-     * This array will store a list of proxies in front of this application. This
-     * property will only be populated if this script is being proxied rather than
-     * accessed directly.
-     *
-     * It is set in CAS_Client::validateCAS20() and can be read by
-     * CAS_Client::getProxies()
-     *
-     * @access private
-     */
-    private $_proxies = array();
-
-    /**
-     * Answer an array of proxies that are sitting in front of this application.
-     *
-     * This method will only return a non-empty array if we have received and
-     * validated a Proxy Ticket.
-     *
-     * @return array
-     * @access public
-     */
-    public function getProxies()
-    {
-        return $this->_proxies;
-    }
-
-    /**
-     * Set the Proxy array, probably from persistant storage.
-     *
-     * @param array $proxies An array of proxies
-     *
-     * @return void
-     * @access private
-     */
-    private function _setProxies($proxies)
-    {
-        $this->_proxies = $proxies;
-        if (!empty($proxies)) {
-            // For proxy-authenticated requests people are not viewing the URL
-            // directly since the client is another application making a
-            // web-service call.
-            // Because of this, stripping the ticket from the URL is unnecessary
-            // and causes another web-service request to be performed. Additionally,
-            // if session handling on either the client or the server malfunctions
-            // then the subsequent request will not complete successfully.
-            $this->setNoClearTicketsFromUrl();
-        }
-    }
-
-    /**
-     * A container of patterns to be allowed as proxies in front of the cas client.
-     *
-     * @var CAS_ProxyChain_AllowedList
-     */
-    private $_allowed_proxy_chains;
-
-    /**
-     * Answer the CAS_ProxyChain_AllowedList object for this client.
-     *
-     * @return CAS_ProxyChain_AllowedList
-     */
-    public function getAllowedProxyChains ()
-    {
-        if (empty($this->_allowed_proxy_chains)) {
-            $this->_allowed_proxy_chains = new CAS_ProxyChain_AllowedList();
-        }
-        return $this->_allowed_proxy_chains;
-    }
-
-    /** @} */
-    // ########################################################################
-    //  PT VALIDATION
-    // ########################################################################
-    /**
-    * @addtogroup internalProxied
-    * @{
-    */
-
-    /**
-     * This method is used to validate a cas 2.0 ST or PT; halt on failure
-     * Used for all CAS 2.0 validations
-     *
-     * @param string &$validate_url  the url of the reponse
-     * @param string &$text_response the text of the repsones
-     * @param DOMElement &$tree_response the domxml tree of the respones
-     * @param bool   $renew          true to force the authentication with the CAS server
-     *
-     * @return bool true when successfull and issue a CAS_AuthenticationException
-     * and false on an error
-     *
-     * @throws  CAS_AuthenticationException
-     */
-    public function validateCAS20(&$validate_url,&$text_response,&$tree_response, $renew=false)
-    {
-        phpCAS::traceBegin();
-        phpCAS::trace($text_response);
-        // build the URL to validate the ticket
-        if ($this->getAllowedProxyChains()->isProxyingAllowed()) {
-            $validate_url = $this->getServerProxyValidateURL().'&ticket='
-                .urlencode($this->getTicket());
-        } else {
-            $validate_url = $this->getServerServiceValidateURL().'&ticket='
-                .urlencode($this->getTicket());
-        }
-
-        if ( $this->isProxy() ) {
-            // pass the callback url for CAS proxies
-            $validate_url .= '&pgtUrl='.urlencode($this->_getCallbackURL());
-        }
-
-        if ( $renew ) {
-            // pass the renew
-            $validate_url .= '&renew=true';
-        }
-
-        // open and read the URL
-        if ( !$this->_readURL($validate_url, $headers, $text_response, $err_msg) ) {
-            phpCAS::trace(
-                'could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')'
-            );
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket not validated', $validate_url,
-                true/*$no_response*/
-            );
-        }
-
-        // create new DOMDocument object
-        $dom = new DOMDocument();
-        // Fix possible whitspace problems
-        $dom->preserveWhiteSpace = false;
-        // CAS servers should only return data in utf-8
-        $dom->encoding = "utf-8";
-        // read the response of the CAS server into a DOMDocument object
-        if ( !($dom->loadXML($text_response))) {
-            // read failed
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket not validated', $validate_url,
-                false/*$no_response*/, true/*$bad_response*/, $text_response
-            );
-        } else if ( !($tree_response = $dom->documentElement) ) {
-            // read the root node of the XML tree
-            // read failed
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket not validated', $validate_url,
-                false/*$no_response*/, true/*$bad_response*/, $text_response
-            );
-        } else if ($tree_response->localName != 'serviceResponse') {
-            // insure that tag name is 'serviceResponse'
-            // bad root node
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket not validated', $validate_url,
-                false/*$no_response*/, true/*$bad_response*/, $text_response
-            );
-        } else if ( $tree_response->getElementsByTagName("authenticationFailure")->length != 0) {
-            // authentication failed, extract the error code and message and throw exception
-            $auth_fail_list = $tree_response
-                ->getElementsByTagName("authenticationFailure");
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket not validated', $validate_url,
-                false/*$no_response*/, false/*$bad_response*/,
-                $text_response,
-                $auth_fail_list->item(0)->getAttribute('code')/*$err_code*/,
-                trim($auth_fail_list->item(0)->nodeValue)/*$err_msg*/
-            );
-        } else if ($tree_response->getElementsByTagName("authenticationSuccess")->length != 0) {
-            // authentication succeded, extract the user name
-            $success_elements = $tree_response
-                ->getElementsByTagName("authenticationSuccess");
-            if ( $success_elements->item(0)->getElementsByTagName("user")->length == 0) {
-                // no user specified => error
-                throw new CAS_AuthenticationException(
-                    $this, 'Ticket not validated', $validate_url,
-                    false/*$no_response*/, true/*$bad_response*/, $text_response
-                );
-            } else {
-                $this->_setUser(
-                    trim(
-                        $success_elements->item(0)->getElementsByTagName("user")->item(0)->nodeValue
-                    )
-                );
-                $this->_readExtraAttributesCas20($success_elements);
-                // Store the proxies we are sitting behind for authorization checking
-                $proxyList = array();
-                if ( sizeof($arr = $success_elements->item(0)->getElementsByTagName("proxy")) > 0) {
-                    foreach ($arr as $proxyElem) {
-                        phpCAS::trace("Found Proxy: ".$proxyElem->nodeValue);
-                        $proxyList[] = trim($proxyElem->nodeValue);
-                    }
-                    $this->_setProxies($proxyList);
-                    phpCAS::trace("Storing Proxy List");
-                }
-                // Check if the proxies in front of us are allowed
-                if (!$this->getAllowedProxyChains()->isProxyListAllowed($proxyList)) {
-                    throw new CAS_AuthenticationException(
-                        $this, 'Proxy not allowed', $validate_url,
-                        false/*$no_response*/, true/*$bad_response*/,
-                        $text_response
-                    );
-                } else {
-                    $result = true;
-                }
-            }
-        } else {
-            throw new CAS_AuthenticationException(
-                $this, 'Ticket not validated', $validate_url,
-                false/*$no_response*/, true/*$bad_response*/,
-                $text_response
-            );
-        }
-
-        $this->_renameSession($this->getTicket());
-
-        // at this step, Ticket has been validated and $this->_user has been set,
-
-        phpCAS::traceEnd($result);
-        return $result;
-    }
-
-    /**
-     * This method recursively parses the attribute XML.
-     * It also collapses name-value pairs into a single
-     * array entry. It parses all common formats of
-     * attributes and well formed XML files.
-     *
-     * @param string $root       the DOM root element to be parsed
-     * @param string $namespace  namespace of the elements
-     *
-     * @return an array of the parsed XML elements
-     *
-     * Formats tested:
-     *
-     *  "Jasig Style" Attributes:
-     *
-     *      <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
-     *          <cas:authenticationSuccess>
-     *              <cas:user>jsmith</cas:user>
-     *              <cas:attributes>
-     *                  <cas:attraStyle>RubyCAS</cas:attraStyle>
-     *                  <cas:surname>Smith</cas:surname>
-     *                  <cas:givenName>John</cas:givenName>
-     *                  <cas:memberOf>CN=Staff,OU=Groups,DC=example,DC=edu</cas:memberOf>
-     *                  <cas:memberOf>CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu</cas:memberOf>
-     *              </cas:attributes>
-     *              <cas:proxyGrantingTicket>PGTIOU-84678-8a9d2sfa23casd</cas:proxyGrantingTicket>
-     *          </cas:authenticationSuccess>
-     *      </cas:serviceResponse>
-     *
-     *  "Jasig Style" Attributes (longer version):
-     *
-     *      <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
-     *          <cas:authenticationSuccess>
-     *              <cas:user>jsmith</cas:user>
-     *              <cas:attributes>
-     *                  <cas:attribute>
-     *                      <cas:name>surname</cas:name>
-     *                      <cas:value>Smith</cas:value>
-     *                  </cas:attribute>
-     *                  <cas:attribute>
-     *                      <cas:name>givenName</cas:name>
-     *                      <cas:value>John</cas:value>
-     *                  </cas:attribute>
-     *                  <cas:attribute>
-     *                      <cas:name>memberOf</cas:name>
-     *                      <cas:value>['CN=Staff,OU=Groups,DC=example,DC=edu', 'CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu']</cas:value>
-     *                  </cas:attribute>
-     *              </cas:attributes>
-     *              <cas:proxyGrantingTicket>PGTIOU-84678-8a9d2sfa23casd</cas:proxyGrantingTicket>
-     *          </cas:authenticationSuccess>
-     *      </cas:serviceResponse>
-     *
-     *  "RubyCAS Style" attributes
-     *
-     *      <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
-     *          <cas:authenticationSuccess>
-     *              <cas:user>jsmith</cas:user>
-     *
-     *              <cas:attraStyle>RubyCAS</cas:attraStyle>
-     *              <cas:surname>Smith</cas:surname>
-     *              <cas:givenName>John</cas:givenName>
-     *              <cas:memberOf>CN=Staff,OU=Groups,DC=example,DC=edu</cas:memberOf>
-     *              <cas:memberOf>CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu</cas:memberOf>
-     *
-     *              <cas:proxyGrantingTicket>PGTIOU-84678-8a9d2sfa23casd</cas:proxyGrantingTicket>
-     *          </cas:authenticationSuccess>
-     *      </cas:serviceResponse>
-     *
-     *  "Name-Value" attributes.
-     *
-     *  Attribute format from these mailing list thread:
-     *  http://jasig.275507.n4.nabble.com/CAS-attributes-and-how-they-appear-in-the-CAS-response-td264272.html
-     *  Note: This is a less widely used format, but in use by at least two institutions.
-     *
-     *      <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
-     *          <cas:authenticationSuccess>
-     *              <cas:user>jsmith</cas:user>
-     *
-     *              <cas:attribute name='attraStyle' value='Name-Value' />
-     *              <cas:attribute name='surname' value='Smith' />
-     *              <cas:attribute name='givenName' value='John' />
-     *              <cas:attribute name='memberOf' value='CN=Staff,OU=Groups,DC=example,DC=edu' />
-     *              <cas:attribute name='memberOf' value='CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu' />
-     *
-     *              <cas:proxyGrantingTicket>PGTIOU-84678-8a9d2sfa23casd</cas:proxyGrantingTicket>
-     *          </cas:authenticationSuccess>
-     *      </cas:serviceResponse>
-     *
-     * result:
-     *
-     *      Array (
-     *          [surname] => Smith
-     *          [givenName] => John
-     *          [memberOf] => Array (
-     *              [0] => CN=Staff, OU=Groups, DC=example, DC=edu
-     *              [1] => CN=Spanish Department, OU=Departments, OU=Groups, DC=example, DC=edu
-     *          )
-     *      )
-     */
-    private function _xml_to_array($root, $namespace = "cas")
-    {
-        $result = array();
-        if ($root->hasAttributes()) {
-            $attrs = $root->attributes;
-            $pair = array();
-            foreach ($attrs as $attr) {
-                if ($attr->name === "name") {
-                    $pair['name'] = $attr->value;
-                } elseif ($attr->name === "value") {
-                    $pair['value'] = $attr->value;
-                } else {
-                    $result[$attr->name] = $attr->value;
-                }
-                if (array_key_exists('name', $pair) && array_key_exists('value', $pair)) {
-                    $result[$pair['name']] = $pair['value'];
-                }
-            }
-        }
-        if ($root->hasChildNodes()) {
-            $children = $root->childNodes;
-            if ($children->length == 1) {
-                $child = $children->item(0);
-                if ($child->nodeType == XML_TEXT_NODE) {
-                    $result['_value'] = $child->nodeValue;
-                    return (count($result) == 1) ? $result['_value'] : $result;
-                }
-            }
-            $groups = array();
-            foreach ($children as $child) {
-                $child_nodeName = str_ireplace($namespace . ":", "", $child->nodeName);
-                if (in_array($child_nodeName, array("user", "proxies", "proxyGrantingTicket"))) {
-                    continue;
-                }
-                if (!isset($result[$child_nodeName])) {
-                    $res = $this->_xml_to_array($child, $namespace);
-                    if (!empty($res)) {
-                        $result[$child_nodeName] = $this->_xml_to_array($child, $namespace);
-                    }
-                } else {
-                    if (!isset($groups[$child_nodeName])) {
-                        $result[$child_nodeName] = array($result[$child_nodeName]);
-                        $groups[$child_nodeName] = 1;
-                    }
-                    $result[$child_nodeName][] = $this->_xml_to_array($child, $namespace);
-                }
-            }
-        }
-        return $result;
-    }
-
-    /**
-     * This method parses a "JSON-like array" of strings
-     * into an array of strings
-     *
-     * @param string $json_value  the json-like string:
-     *      e.g.:
-     *          ['CN=Staff,OU=Groups,DC=example,DC=edu', 'CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu']
-     *
-     * @return array of strings Description
-     *      e.g.:
-     *          Array (
-     *              [0] => CN=Staff,OU=Groups,DC=example,DC=edu
-     *              [1] => CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu
-     *          )
-     */
-    private function _parse_json_like_array_value($json_value)
-    {
-        $parts = explode(",", trim($json_value, "[]"));
-        $out = array();
-        $quote = '';
-        foreach ($parts as $part) {
-            $part = trim($part);
-            if ($quote === '') {
-                $value = "";
-                if ($this->_startsWith($part, '\'')) {
-                    $quote = '\'';
-                } elseif ($this->_startsWith($part, '"')) {
-                    $quote = '"';
-                } else {
-                    $out[] = $part;
-                }
-                $part = ltrim($part, $quote);
-            }
-            if ($quote !== '') {
-                $value .= $part;
-                if ($this->_endsWith($part, $quote)) {
-                    $out[] = rtrim($value, $quote);
-                    $quote = '';
-                } else {
-                    $value .= ", ";
-                };
-            }
-        }
-        return $out;
-    }
-
-    /**
-     * This method recursively removes unneccessary hirarchy levels in array-trees.
-     * into an array of strings
-     *
-     * @param array $arr the array to flatten
-     *      e.g.:
-     *          Array (
-     *              [attributes] => Array (
-     *                  [attribute] => Array (
-     *                      [0] => Array (
-     *                          [name] => surname
-     *                          [value] => Smith
-     *                      )
-     *                      [1] => Array (
-     *                          [name] => givenName
-     *                          [value] => John
-     *                      )
-     *                      [2] => Array (
-     *                          [name] => memberOf
-     *                          [value] => ['CN=Staff,OU=Groups,DC=example,DC=edu', 'CN=Spanish Department,OU=Departments,OU=Groups,DC=example,DC=edu']
-     *                      )
-     *                  )
-     *              )
-     *          )
-     *
-     * @return array the flattened array
-     *      e.g.:
-     *          Array (
-     *              [attribute] => Array (
-     *                  [surname] => Smith
-     *                  [givenName] => John
-     *                  [memberOf] => Array (
-     *                      [0] => CN=Staff, OU=Groups, DC=example, DC=edu
-     *                      [1] => CN=Spanish Department, OU=Departments, OU=Groups, DC=example, DC=edu
-     *                  )
-     *              )
-     *          )
-     */
-    private function _flatten_array($arr)
-    {
-        if (!is_array($arr)) {
-            if ($this->_startsWith($arr, '[') && $this->_endsWith($arr, ']')) {
-                return $this->_parse_json_like_array_value($arr);
-            } else {
-                return $arr;
-            }
-        }
-        $out = array();
-        foreach ($arr as $key => $val) {
-            if (!is_array($val)) {
-                $out[$key] = $val;
-            } else {
-                switch (count($val)) {
-                case 1 : {
-                        $key = key($val);
-                        if (array_key_exists($key, $out)) {
-                            $value = $out[$key];
-                            if (!is_array($value)) {
-                                $out[$key] = array();
-                                $out[$key][] = $value;
-                            }
-                            $out[$key][] = $this->_flatten_array($val[$key]);
-                        } else {
-                            $out[$key] = $this->_flatten_array($val[$key]);
-                        };
-                        break;
-                    };
-                case 2 : {
-                        if (array_key_exists("name", $val) && array_key_exists("value", $val)) {
-                            $key = $val['name'];
-                            if (array_key_exists($key, $out)) {
-                                $value = $out[$key];
-                                if (!is_array($value)) {
-                                    $out[$key] = array();
-                                    $out[$key][] = $value;
-                                }
-                                $out[$key][] = $this->_flatten_array($val['value']);
-                            } else {
-                                $out[$key] = $this->_flatten_array($val['value']);
-                            };
-                        } else {
-                            $out[$key] = $this->_flatten_array($val);
-                        }
-                        break;
-                    };
-                default: {
-                        $out[$key] = $this->_flatten_array($val);
-                    }
-                }
-            }
-        }
-        return $out;
-    }
-
-    /**
-     * This method will parse the DOM and pull out the attributes from the XML
-     * payload and put them into an array, then put the array into the session.
-     *
-     * @param DOMNodeList $success_elements payload of the response
-     *
-     * @return bool true when successfull, halt otherwise by calling
-     * CAS_Client::_authError().
-     */
-    private function _readExtraAttributesCas20($success_elements)
-    {
-        phpCAS::traceBegin();
-
-        $extra_attributes = array();
-        if ($this->_casAttributeParserCallbackFunction !== null
-            && is_callable($this->_casAttributeParserCallbackFunction)
-        ) {
-            array_unshift($this->_casAttributeParserCallbackArgs, $success_elements->item(0));
-            phpCAS :: trace("Calling attritubeParser callback");
-            $extra_attributes =  call_user_func_array(
-                $this->_casAttributeParserCallbackFunction,
-                $this->_casAttributeParserCallbackArgs
-            );
-        } else {
-            phpCAS :: trace("Parse extra attributes:    ");
-            $attributes = $this->_xml_to_array($success_elements->item(0));
-            phpCAS :: trace(print_r($attributes,true). "\nFLATTEN Array:    ");
-            $extra_attributes = $this->_flatten_array($attributes);
-            phpCAS :: trace(print_r($extra_attributes, true)."\nFILTER :    ");
-            if (array_key_exists("attribute", $extra_attributes)) {
-                $extra_attributes = $extra_attributes["attribute"];
-            } elseif (array_key_exists("attributes", $extra_attributes)) {
-                $extra_attributes = $extra_attributes["attributes"];
-            };
-            phpCAS :: trace(print_r($extra_attributes, true)."return");
-        }
-        $this->setAttributes($extra_attributes);
-        phpCAS::traceEnd();
-        return true;
-    }
-
-    /**
-     * Add an attribute value to an array of attributes.
-     *
-     * @param array  &$attributeArray reference to array
-     * @param string $name            name of attribute
-     * @param string $value           value of attribute
-     *
-     * @return void
-     */
-    private function _addAttributeToArray(array &$attributeArray, $name, $value)
-    {
-        // If multiple attributes exist, add as an array value
-        if (isset($attributeArray[$name])) {
-            // Initialize the array with the existing value
-            if (!is_array($attributeArray[$name])) {
-                $existingValue = $attributeArray[$name];
-                $attributeArray[$name] = array($existingValue);
-            }
-
-            $attributeArray[$name][] = trim($value);
-        } else {
-            $attributeArray[$name] = trim($value);
-        }
-    }
-
-    /** @} */
-
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-    // XX                                                                    XX
-    // XX                               MISC                                 XX
-    // XX                                                                    XX
-    // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-
-    /**
-     * @addtogroup internalMisc
-     * @{
-     */
-
-    // ########################################################################
-    //  URL
-    // ########################################################################
-    /**
-    * the URL of the current request (without any ticket CGI parameter). Written
-    * and read by CAS_Client::getURL().
-    *
-    * @hideinitializer
-    */
-    private $_url = '';
-
-
-    /**
-     * This method sets the URL of the current request
-     *
-     * @param string $url url to set for service
-     *
-     * @return void
-     */
-    public function setURL($url)
-    {
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        $this->_url = $url;
-    }
-
-    /**
-     * This method returns the URL of the current request (without any ticket
-     * CGI parameter).
-     *
-     * @return string The URL
-     */
-    public function getURL()
-    {
-        phpCAS::traceBegin();
-        // the URL is built when needed only
-        if ( empty($this->_url) ) {
-            // remove the ticket if present in the URL
-            $final_uri = ($this->_isHttps()) ? 'https' : 'http';
-            $final_uri .= '://';
-
-            $final_uri .= $this->_getClientUrl();
-            $request_uri = explode('?', $_SERVER['REQUEST_URI'], 2);
-            $final_uri .= $request_uri[0];
-
-            if (isset($request_uri[1]) && $request_uri[1]) {
-                $query_string= $this->_removeParameterFromQueryString('ticket', $request_uri[1]);
-
-                // If the query string still has anything left,
-                // append it to the final URI
-                if ($query_string !== '') {
-                    $final_uri .= "?$query_string";
-                }
-            }
-
-            phpCAS::trace("Final URI: $final_uri");
-            $this->setURL($final_uri);
-        }
-        phpCAS::traceEnd($this->_url);
-        return $this->_url;
-    }
-
-    /**
-     * This method sets the base URL of the CAS server.
-     *
-     * @param string $url the base URL
-     *
-     * @return string base url
-     */
-    public function setBaseURL($url)
-    {
-        // Argument Validation
-        if (gettype($url) != 'string')
-            throw new CAS_TypeMismatchException($url, '$url', 'string');
-
-        return $this->_server['base_url'] = $url;
-    }
-
-
-    /**
-     * Try to figure out the phpCAS client URL with possible Proxys / Ports etc.
-     *
-     * @return string Server URL with domain:port
-     */
-    private function _getClientUrl()
-    {
-        if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
-            // explode the host list separated by comma and use the first host
-            $hosts = explode(',', $_SERVER['HTTP_X_FORWARDED_HOST']);
-            // see rfc7239#5.3 and rfc7230#2.7.1: port is in HTTP_X_FORWARDED_HOST if non default
-            return $hosts[0];
-        } else if (!empty($_SERVER['HTTP_X_FORWARDED_SERVER'])) {
-            $server_url = $_SERVER['HTTP_X_FORWARDED_SERVER'];
-        } else {
-            if (empty($_SERVER['SERVER_NAME'])) {
-                $server_url = $_SERVER['HTTP_HOST'];
-            } else {
-                $server_url = $_SERVER['SERVER_NAME'];
-            }
-        }
-        if (!strpos($server_url, ':')) {
-            if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) {
-                $server_port = $_SERVER['SERVER_PORT'];
-            } else {
-                $ports = explode(',', $_SERVER['HTTP_X_FORWARDED_PORT']);
-                $server_port = $ports[0];
-            }
-
-            if ( ($this->_isHttps() && $server_port!=443)
-                || (!$this->_isHttps() && $server_port!=80)
-            ) {
-                $server_url .= ':';
-                $server_url .= $server_port;
-            }
-        }
-        return $server_url;
-    }
-
-    /**
-     * This method checks to see if the request is secured via HTTPS
-     *
-     * @return bool true if https, false otherwise
-     */
-    private function _isHttps()
-    {
-        if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
-            return ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https');
-        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTOCOL'])) {
-            return ($_SERVER['HTTP_X_FORWARDED_PROTOCOL'] === 'https');
-        } elseif ( isset($_SERVER['HTTPS'])
-            && !empty($_SERVER['HTTPS'])
-            && strcasecmp($_SERVER['HTTPS'], 'off') !== 0
-        ) {
-            return true;
-        }
-        return false;
-
-    }
-
-    /**
-     * Removes a parameter from a query string
-     *
-     * @param string $parameterName name of parameter
-     * @param string $queryString   query string
-     *
-     * @return string new query string
-     *
-     * @link http://stackoverflow.com/questions/1842681/regular-expression-to-remove-one-parameter-from-query-string
-     */
-    private function _removeParameterFromQueryString($parameterName, $queryString)
-    {
-        $parameterName	= preg_quote($parameterName);
-        return preg_replace(
-            "/&$parameterName(=[^&]*)?|^$parameterName(=[^&]*)?&?/",
-            '', $queryString
-        );
-    }
-
-    /**
-     * This method is used to append query parameters to an url. Since the url
-     * might already contain parameter it has to be detected and to build a proper
-     * URL
-     *
-     * @param string $url   base url to add the query params to
-     * @param string $query params in query form with & separated
-     *
-     * @return string url with query params
-     */
-    private function _buildQueryUrl($url, $query)
-    {
-        $url .= (strstr($url, '?') === false) ? '?' : '&';
-        $url .= $query;
-        return $url;
-    }
-
-    /**
-     * This method tests if a string starts with a given character.
-     *
-     * @param string $text  text to test
-     * @param string $char  character to test for
-     *
-     * @return bool          true if the $text starts with $char
-     */
-    private function _startsWith($text, $char)
-    {
-        return (strpos($text, $char) === 0);
-    }
-
-    /**
-     * This method tests if a string ends with a given character
-     *
-     * @param string $text  text to test
-     * @param string $char  character to test for
-     *
-     * @return bool         true if the $text ends with $char
-     */
-    private function _endsWith($text, $char)
-    {
-        return (strpos(strrev($text), $char) === 0);
-    }
-
-    /**
-     * Answer a valid session-id given a CAS ticket.
-     *
-     * The output must be deterministic to allow single-log-out when presented with
-     * the ticket to log-out.
-     *
-     *
-     * @param string $ticket name of the ticket
-     *
-     * @return string
-     */
-    private function _sessionIdForTicket($ticket)
-    {
-      // Hash the ticket to ensure that the value meets the PHP 7.1 requirement
-      // that session-ids have a length between 22 and 256 characters.
-      return hash('sha256', $this->_sessionIdSalt . $ticket);
-    }
-
-    /**
-     * Set a salt/seed for the session-id hash to make it harder to guess.
-     *
-     * @var string $_sessionIdSalt
-     */
-    private $_sessionIdSalt = '';
-
-    /**
-     * Set a salt/seed for the session-id hash to make it harder to guess.
-     *
-     * @param string $salt
-     *
-     * @return void
-     */
-    public function setSessionIdSalt($salt) {
-      $this->_sessionIdSalt = (string)$salt;
-    }
-
-    // ########################################################################
-    //  AUTHENTICATION ERROR HANDLING
-    // ########################################################################
-    /**
-    * This method is used to print the HTML output when the user was not
-    * authenticated.
-    *
-    * @param string $failure      the failure that occured
-    * @param string $cas_url      the URL the CAS server was asked for
-    * @param bool   $no_response  the response from the CAS server (other
-    * parameters are ignored if true)
-    * @param bool   $bad_response bad response from the CAS server ($err_code
-    * and $err_msg ignored if true)
-    * @param string $cas_response the response of the CAS server
-    * @param int    $err_code     the error code given by the CAS server
-    * @param string $err_msg      the error message given by the CAS server
-    *
-    * @return void
-    */
-    private function _authError(
-        $failure,
-        $cas_url,
-        $no_response=false,
-        $bad_response=false,
-        $cas_response='',
-        $err_code=-1,
-        $err_msg=''
-    ) {
-        phpCAS::traceBegin();
-        $lang = $this->getLangObj();
-        $this->printHTMLHeader($lang->getAuthenticationFailed());
-        $this->printf(
-            $lang->getYouWereNotAuthenticated(), htmlentities($this->getURL()),
-            isset($_SERVER['SERVER_ADMIN']) ? $_SERVER['SERVER_ADMIN']:''
-        );
-        phpCAS::trace('CAS URL: '.$cas_url);
-        phpCAS::trace('Authentication failure: '.$failure);
-        if ( $no_response ) {
-            phpCAS::trace('Reason: no response from the CAS server');
-        } else {
-            if ( $bad_response ) {
-                phpCAS::trace('Reason: bad response from the CAS server');
-            } else {
-                switch ($this->getServerVersion()) {
-                case CAS_VERSION_1_0:
-                    phpCAS::trace('Reason: CAS error');
-                    break;
-                case CAS_VERSION_2_0:
-                case CAS_VERSION_3_0:
-                    if ( $err_code === -1 ) {
-                        phpCAS::trace('Reason: no CAS error');
-                    } else {
-                        phpCAS::trace(
-                            'Reason: ['.$err_code.'] CAS error: '.$err_msg
-                        );
-                    }
-                    break;
-                }
-            }
-            phpCAS::trace('CAS response: '.$cas_response);
-        }
-        $this->printHTMLFooter();
-        phpCAS::traceExit();
-        throw new CAS_GracefullTerminationException();
-    }
-
-    // ########################################################################
-    //  PGTIOU/PGTID and logoutRequest rebroadcasting
-    // ########################################################################
-
-    /**
-     * Boolean of whether to rebroadcast pgtIou/pgtId and logoutRequest, and
-     * array of the nodes.
-     */
-    private $_rebroadcast = false;
-    private $_rebroadcast_nodes = array();
-
-    /**
-     * Constants used for determining rebroadcast node type.
-     */
-    const HOSTNAME = 0;
-    const IP = 1;
-
-    /**
-     * Determine the node type from the URL.
-     *
-     * @param String $nodeURL The node URL.
-     *
-     * @return int hostname
-     *
-     */
-    private function _getNodeType($nodeURL)
-    {
-        phpCAS::traceBegin();
-        if (preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/", $nodeURL)) {
-            phpCAS::traceEnd(self::IP);
-            return self::IP;
-        } else {
-            phpCAS::traceEnd(self::HOSTNAME);
-            return self::HOSTNAME;
-        }
-    }
-
-    /**
-     * Store the rebroadcast node for pgtIou/pgtId and logout requests.
-     *
-     * @param string $rebroadcastNodeUrl The rebroadcast node URL.
-     *
-     * @return void
-     */
-    public function addRebroadcastNode($rebroadcastNodeUrl)
-    {
-        // Argument validation
-        if ( !(bool)preg_match("/^(http|https):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i", $rebroadcastNodeUrl))
-            throw new CAS_TypeMismatchException($rebroadcastNodeUrl, '$rebroadcastNodeUrl', 'url');
-
-        // Store the rebroadcast node and set flag
-        $this->_rebroadcast = true;
-        $this->_rebroadcast_nodes[] = $rebroadcastNodeUrl;
-    }
-
-    /**
-     * An array to store extra rebroadcast curl options.
-     */
-    private $_rebroadcast_headers = array();
-
-    /**
-     * This method is used to add header parameters when rebroadcasting
-     * pgtIou/pgtId or logoutRequest.
-     *
-     * @param string $header Header to send when rebroadcasting.
-     *
-     * @return void
-     */
-    public function addRebroadcastHeader($header)
-    {
-        if (gettype($header) != 'string')
-            throw new CAS_TypeMismatchException($header, '$header', 'string');
-
-        $this->_rebroadcast_headers[] = $header;
-    }
-
-    /**
-     * Constants used for determining rebroadcast type (logout or pgtIou/pgtId).
-     */
-    const LOGOUT = 0;
-    const PGTIOU = 1;
-
-    /**
-     * This method rebroadcasts logout/pgtIou requests. Can be LOGOUT,PGTIOU
-     *
-     * @param int $type type of rebroadcasting.
-     *
-     * @return void
-     */
-    private function _rebroadcast($type)
-    {
-        phpCAS::traceBegin();
-
-        $rebroadcast_curl_options = array(
-        CURLOPT_FAILONERROR => 1,
-        CURLOPT_FOLLOWLOCATION => 1,
-        CURLOPT_RETURNTRANSFER => 1,
-        CURLOPT_CONNECTTIMEOUT => 1,
-        CURLOPT_TIMEOUT => 4);
-
-        // Try to determine the IP address of the server
-        if (!empty($_SERVER['SERVER_ADDR'])) {
-            $ip = $_SERVER['SERVER_ADDR'];
-        } else if (!empty($_SERVER['LOCAL_ADDR'])) {
-            // IIS 7
-            $ip = $_SERVER['LOCAL_ADDR'];
-        }
-        // Try to determine the DNS name of the server
-        if (!empty($ip)) {
-            $dns = gethostbyaddr($ip);
-        }
-        $multiClassName = 'CAS_Request_CurlMultiRequest';
-        $multiRequest = new $multiClassName();
-
-        for ($i = 0; $i < sizeof($this->_rebroadcast_nodes); $i++) {
-            if ((($this->_getNodeType($this->_rebroadcast_nodes[$i]) == self::HOSTNAME) && !empty($dns) && (stripos($this->_rebroadcast_nodes[$i], $dns) === false))
-                || (($this->_getNodeType($this->_rebroadcast_nodes[$i]) == self::IP) && !empty($ip) && (stripos($this->_rebroadcast_nodes[$i], $ip) === false))
-            ) {
-                phpCAS::trace(
-                    'Rebroadcast target URL: '.$this->_rebroadcast_nodes[$i]
-                    .$_SERVER['REQUEST_URI']
-                );
-                $className = $this->_requestImplementation;
-                $request = new $className();
-
-                $url = $this->_rebroadcast_nodes[$i].$_SERVER['REQUEST_URI'];
-                $request->setUrl($url);
-
-                if (count($this->_rebroadcast_headers)) {
-                    $request->addHeaders($this->_rebroadcast_headers);
-                }
-
-                $request->makePost();
-                if ($type == self::LOGOUT) {
-                    // Logout request
-                    $request->setPostBody(
-                        'rebroadcast=false&logoutRequest='.$_POST['logoutRequest']
-                    );
-                } else if ($type == self::PGTIOU) {
-                    // pgtIou/pgtId rebroadcast
-                    $request->setPostBody('rebroadcast=false');
-                }
-
-                $request->setCurlOptions($rebroadcast_curl_options);
-
-                $multiRequest->addRequest($request);
-            } else {
-                phpCAS::trace(
-                    'Rebroadcast not sent to self: '
-                    .$this->_rebroadcast_nodes[$i].' == '.(!empty($ip)?$ip:'')
-                    .'/'.(!empty($dns)?$dns:'')
-                );
-            }
-        }
-        // We need at least 1 request
-        if ($multiRequest->getNumRequests() > 0) {
-            $multiRequest->send();
-        }
-        phpCAS::traceEnd();
-    }
-
-    /** @} */
-}
diff --git a/vendor/jasig/phpcas/source/CAS/CookieJar.php b/vendor/jasig/phpcas/source/CAS/CookieJar.php
deleted file mode 100644
index b2439373ad0943e39396ec6a50e639768d05f3a3..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/CookieJar.php
+++ /dev/null
@@ -1,385 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/CookieJar.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class provides access to service cookies and handles parsing of response
- * headers to pull out cookie values.
- *
- * @class    CAS_CookieJar
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_CookieJar
-{
-
-    private $_cookies;
-
-    /**
-     * Create a new cookie jar by passing it a reference to an array in which it
-     * should store cookies.
-     *
-     * @param array &$storageArray Array to store cookies
-     *
-     * @return void
-     */
-    public function __construct (array &$storageArray)
-    {
-        $this->_cookies =& $storageArray;
-    }
-
-    /**
-     * Store cookies for a web service request.
-     * Cookie storage is based on RFC 2965: http://www.ietf.org/rfc/rfc2965.txt
-     *
-     * @param string $request_url      The URL that generated the response headers.
-     * @param array  $response_headers An array of the HTTP response header strings.
-     *
-     * @return void
-     *
-     * @access private
-     */
-    public function storeCookies ($request_url, $response_headers)
-    {
-        $urlParts = parse_url($request_url);
-        $defaultDomain = $urlParts['host'];
-
-        $cookies = $this->parseCookieHeaders($response_headers, $defaultDomain);
-
-        foreach ($cookies as $cookie) {
-            // Enforce the same-origin policy by verifying that the cookie
-            // would match the url that is setting it
-            if (!$this->cookieMatchesTarget($cookie, $urlParts)) {
-                continue;
-            }
-
-            // store the cookie
-            $this->storeCookie($cookie);
-
-            phpCAS::trace($cookie['name'].' -> '.$cookie['value']);
-        }
-    }
-
-    /**
-     * Retrieve cookies applicable for a web service request.
-     * Cookie applicability is based on RFC 2965: http://www.ietf.org/rfc/rfc2965.txt
-     *
-     * @param string $request_url The url that the cookies will be for.
-     *
-     * @return array An array containing cookies. E.g. array('name' => 'val');
-     *
-     * @access private
-     */
-    public function getCookies ($request_url)
-    {
-        if (!count($this->_cookies)) {
-            return array();
-        }
-
-        // If our request URL can't be parsed, no cookies apply.
-        $target = parse_url($request_url);
-        if ($target === false) {
-            return array();
-        }
-
-        $this->expireCookies();
-
-        $matching_cookies = array();
-        foreach ($this->_cookies as $key => $cookie) {
-            if ($this->cookieMatchesTarget($cookie, $target)) {
-                $matching_cookies[$cookie['name']] = $cookie['value'];
-            }
-        }
-        return $matching_cookies;
-    }
-
-
-    /**
-     * Parse Cookies without PECL
-     * From the comments in http://php.net/manual/en/function.http-parse-cookie.php
-     *
-     * @param array  $header        array of header lines.
-     * @param string $defaultDomain The domain to use if none is specified in
-     * the cookie.
-     *
-     * @return array of cookies
-     */
-    protected function parseCookieHeaders( $header, $defaultDomain )
-    {
-        phpCAS::traceBegin();
-        $cookies = array();
-        foreach ( $header as $line ) {
-            if ( preg_match('/^Set-Cookie2?: /i', $line)) {
-                $cookies[] = $this->parseCookieHeader($line, $defaultDomain);
-            }
-        }
-
-        phpCAS::traceEnd($cookies);
-        return $cookies;
-    }
-
-    /**
-     * Parse a single cookie header line.
-     *
-     * Based on RFC2965 http://www.ietf.org/rfc/rfc2965.txt
-     *
-     * @param string $line          The header line.
-     * @param string $defaultDomain The domain to use if none is specified in
-     * the cookie.
-     *
-     * @return array
-     */
-    protected function parseCookieHeader ($line, $defaultDomain)
-    {
-        if (!$defaultDomain) {
-            throw new CAS_InvalidArgumentException(
-                '$defaultDomain was not provided.'
-            );
-        }
-
-        // Set our default values
-        $cookie = array(
-            'domain' => $defaultDomain,
-            'path' => '/',
-            'secure' => false,
-        );
-
-        $line = preg_replace('/^Set-Cookie2?: /i', '', trim($line));
-
-        // trim any trailing semicolons.
-        $line = trim($line, ';');
-
-        phpCAS::trace("Cookie Line: $line");
-
-        // This implementation makes the assumption that semicolons will not
-        // be present in quoted attribute values. While attribute values that
-        // contain semicolons are allowed by RFC2965, they are hopefully rare
-        // enough to ignore for our purposes. Most browsers make the same
-        // assumption.
-        $attributeStrings = explode(';', $line);
-
-        foreach ( $attributeStrings as $attributeString ) {
-            // split on the first equals sign and use the rest as value
-            $attributeParts = explode('=', $attributeString, 2);
-
-            $attributeName = trim($attributeParts[0]);
-            $attributeNameLC = strtolower($attributeName);
-
-            if (isset($attributeParts[1])) {
-                $attributeValue = trim($attributeParts[1]);
-                // Values may be quoted strings.
-                if (strpos($attributeValue, '"') === 0) {
-                    $attributeValue = trim($attributeValue, '"');
-                    // unescape any escaped quotes:
-                    $attributeValue = str_replace('\"', '"', $attributeValue);
-                }
-            } else {
-                $attributeValue = null;
-            }
-
-            switch ($attributeNameLC) {
-            case 'expires':
-                $cookie['expires'] = strtotime($attributeValue);
-                break;
-            case 'max-age':
-                $cookie['max-age'] = (int)$attributeValue;
-                // Set an expiry time based on the max-age
-                if ($cookie['max-age']) {
-                    $cookie['expires'] = time() + $cookie['max-age'];
-                } else {
-                    // If max-age is zero, then the cookie should be removed
-                    // imediately so set an expiry before now.
-                    $cookie['expires'] = time() - 1;
-                }
-                break;
-            case 'secure':
-                $cookie['secure'] = true;
-                break;
-            case 'domain':
-            case 'path':
-            case 'port':
-            case 'version':
-            case 'comment':
-            case 'commenturl':
-            case 'discard':
-            case 'httponly':
-            case 'samesite':
-                $cookie[$attributeNameLC] = $attributeValue;
-                break;
-            default:
-                $cookie['name'] = $attributeName;
-                $cookie['value'] = $attributeValue;
-            }
-        }
-
-        return $cookie;
-    }
-
-    /**
-     * Add, update, or remove a cookie.
-     *
-     * @param array $cookie A cookie array as created by parseCookieHeaders()
-     *
-     * @return void
-     *
-     * @access protected
-     */
-    protected function storeCookie ($cookie)
-    {
-        // Discard any old versions of this cookie.
-        $this->discardCookie($cookie);
-        $this->_cookies[] = $cookie;
-
-    }
-
-    /**
-     * Discard an existing cookie
-     *
-     * @param array $cookie An cookie
-     *
-     * @return void
-     *
-     * @access protected
-     */
-    protected function discardCookie ($cookie)
-    {
-        if (!isset($cookie['domain'])
-            || !isset($cookie['path'])
-            || !isset($cookie['path'])
-        ) {
-            throw new CAS_InvalidArgumentException('Invalid Cookie array passed.');
-        }
-
-        foreach ($this->_cookies as $key => $old_cookie) {
-            if ( $cookie['domain'] == $old_cookie['domain']
-                && $cookie['path'] == $old_cookie['path']
-                && $cookie['name'] == $old_cookie['name']
-            ) {
-                unset($this->_cookies[$key]);
-            }
-        }
-    }
-
-    /**
-     * Go through our stored cookies and remove any that are expired.
-     *
-     * @return void
-     *
-     * @access protected
-     */
-    protected function expireCookies ()
-    {
-        foreach ($this->_cookies as $key => $cookie) {
-            if (isset($cookie['expires']) && $cookie['expires'] < time()) {
-                unset($this->_cookies[$key]);
-            }
-        }
-    }
-
-    /**
-     * Answer true if cookie is applicable to a target.
-     *
-     * @param array $cookie An array of cookie attributes.
-     * @param array|false $target An array of URL attributes as generated by parse_url().
-     *
-     * @return bool
-     *
-     * @access private
-     */
-    protected function cookieMatchesTarget ($cookie, $target)
-    {
-        if (!is_array($target)) {
-            throw new CAS_InvalidArgumentException(
-                '$target must be an array of URL attributes as generated by parse_url().'
-            );
-        }
-        if (!isset($target['host'])) {
-            throw new CAS_InvalidArgumentException(
-                '$target must be an array of URL attributes as generated by parse_url().'
-            );
-        }
-
-        // Verify that the scheme matches
-        if ($cookie['secure'] && $target['scheme'] != 'https') {
-            return false;
-        }
-
-        // Verify that the host matches
-        // Match domain and mulit-host cookies
-        if (strpos($cookie['domain'], '.') === 0) {
-            // .host.domain.edu cookies are valid for host.domain.edu
-            if (substr($cookie['domain'], 1) == $target['host']) {
-                // continue with other checks
-            } else {
-                // non-exact host-name matches.
-                // check that the target host a.b.c.edu is within .b.c.edu
-                $pos = strripos($target['host'], $cookie['domain']);
-                if (!$pos) {
-                    return false;
-                }
-                // verify that the cookie domain is the last part of the host.
-                if ($pos + strlen($cookie['domain']) != strlen($target['host'])) {
-                    return false;
-                }
-                // verify that the host name does not contain interior dots as per
-                // RFC 2965 section 3.3.2  Rejecting Cookies
-                // http://www.ietf.org/rfc/rfc2965.txt
-                $hostname = substr($target['host'], 0, $pos);
-                if (strpos($hostname, '.') !== false) {
-                    return false;
-                }
-            }
-        } else {
-            // If the cookie host doesn't begin with '.',
-            // the host must case-insensitive match exactly
-            if (strcasecmp($target['host'], $cookie['domain']) !== 0) {
-                return false;
-            }
-        }
-
-        // Verify that the port matches
-        if (isset($cookie['ports'])
-            && !in_array($target['port'], $cookie['ports'])
-        ) {
-            return false;
-        }
-
-        // Verify that the path matches
-        if (strpos($target['path'], $cookie['path']) !== 0) {
-            return false;
-        }
-
-        return true;
-    }
-
-}
-
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Exception.php b/vendor/jasig/phpcas/source/CAS/Exception.php
deleted file mode 100644
index 2ff7cd658d8d6cf4abe8cac2687cdddd60ac4ba1..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Exception.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Exception.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * A root exception interface for all exceptions in phpCAS.
- *
- * All exceptions thrown in phpCAS should implement this interface to allow them
- * to be caught as a category by clients. Each phpCAS exception should extend
- * an appropriate SPL exception class that best fits its type.
- *
- * For example, an InvalidArgumentException in phpCAS should be defined as
- *
- *		class CAS_InvalidArgumentException
- *			extends InvalidArgumentException
- *			implements CAS_Exception
- *		{ }
- *
- * This definition allows the CAS_InvalidArgumentException to be caught as either
- * an InvalidArgumentException or as a CAS_Exception.
- *
- * @class    CAS_Exception
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- */
-interface CAS_Exception
-{
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/GracefullTerminationException.php b/vendor/jasig/phpcas/source/CAS/GracefullTerminationException.php
deleted file mode 100644
index 29aa638cd882cd2d515330f54e94f1791c42b141..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/GracefullTerminationException.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/GracefullTerminationException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * An exception for terminatinating execution or to throw for unit testing
- *
- * @class     CAS_GracefullTerminationException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-class CAS_GracefullTerminationException
-extends RuntimeException
-implements CAS_Exception
-{
-
-    /**
-     * Test if exceptions should be thrown or if we should just exit.
-     * In production usage we want to just exit cleanly when prompting the user
-     * for a redirect without filling the error logs with uncaught exceptions.
-     * In unit testing scenarios we cannot exit or we won't be able to continue
-     * with our tests.
-     *
-     * @param string $message Message Text
-     * @param int $code    Error code
-     *
-     * @return self
-     */
-    public function __construct ($message = 'Terminate Gracefully', $code = 0)
-    {
-        // Exit cleanly to avoid filling up the logs with uncaught exceptions.
-        if (self::$_exitWhenThrown) {
-            exit;
-        } else {
-            // Throw exceptions to allow unit testing to continue;
-            parent::__construct($message, $code);
-        }
-    }
-
-    private static $_exitWhenThrown = true;
-    /**
-    * Force phpcas to thow Exceptions instead of calling exit()
-    * Needed for unit testing. Generally shouldn't be used in production due to
-    * an increase in Apache error logging if CAS_GracefulTerminiationExceptions
-    * are not caught and handled.
-    *
-    * @return void
-    */
-    public static function throwInsteadOfExiting()
-    {
-        self::$_exitWhenThrown = false;
-    }
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/InvalidArgumentException.php b/vendor/jasig/phpcas/source/CAS/InvalidArgumentException.php
deleted file mode 100644
index 99be2ac329473013216fe2fc0a5dbef494674dbc..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/InvalidArgumentException.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/InvalidArgumentException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Exception that denotes invalid arguments were passed.
- *
- * @class    CAS_InvalidArgumentException
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_InvalidArgumentException
-extends InvalidArgumentException
-implements CAS_Exception
-{
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/Catalan.php b/vendor/jasig/phpcas/source/CAS/Languages/Catalan.php
deleted file mode 100644
index 1ead905fc9ef223daa4b0eba31863d24e9ca8ee4..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/Catalan.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/Catalan.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Iván-Benjamín García Torà <ivaniclixx@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Catalan language class
- *
- * @class    CAS_Languages_Catalan
- * @category Authentication
- * @package  PhpCAS
- * @author   Iván-Benjamín García Torà <ivaniclixx@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_Catalan implements CAS_Languages_LanguageInterface
-{
-    /**
-    * Get the using server string
-    *
-    * @return string using server
-    */
-    public function getUsingServer()
-    {
-        return 'usant servidor';
-    }
-
-    /**
-    * Get authentication wanted string
-    *
-    * @return string authentication wanted
-    */
-    public function getAuthenticationWanted()
-    {
-        return 'Autentificació CAS necessària!';
-    }
-
-    /**
-    * Get logout string
-    *
-    * @return string logout
-    */
-    public function getLogout()
-    {
-        return 'Sortida de CAS necessària!';
-    }
-
-    /**
-    * Get the should have been redirected string
-    *
-    * @return string should habe been redirected
-    */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.';
-    }
-
-    /**
-    * Get authentication failed string
-    *
-    * @return string authentication failed
-    */
-    public function getAuthenticationFailed()
-    {
-        return 'Autentificació CAS fallida!';
-    }
-
-    /**
-    * Get the your were not authenticated string
-    *
-    * @return string not authenticated
-    */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>';
-    }
-
-    /**
-    * Get the service unavailable string
-    *
-    * @return string service unavailable
-    */
-    public function getServiceUnavailable()
-    {
-        return 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).';
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/ChineseSimplified.php b/vendor/jasig/phpcas/source/CAS/Languages/ChineseSimplified.php
deleted file mode 100644
index 5e33cb650db7069442103b45249397270fcf06ff..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/ChineseSimplified.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/ChineseSimplified.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>, Phy25 <caslang@phy25.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Chinese Simplified language class
- *
- * @class    CAS_Languages_ChineseSimplified
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>, Phy25 <caslang@phy25.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_ChineseSimplified implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return '连接的服务器';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return '请进行 CAS 认证!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return '请进行 CAS 登出!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return '你正被重定向到 CAS 服务器。<a href="%s">点击这里</a>继续。';
-    }
-
-    /**
-    * Get authentication failed string
-    *
-    * @return string authentication failed
-    */
-    public function getAuthenticationFailed()
-    {
-        return 'CAS 认证失败!';
-    }
-
-    /**
-    * Get the your were not authenticated string
-    *
-    * @return string not authenticated
-    */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>你没有成功登录。</p><p>你可以<a href="%s">点击这里重新登录</a>。</p><p>如果问题依然存在,请<a href="mailto:%s">联系本站管理员</a>。</p>';
-    }
-
-    /**
-    * Get the service unavailable string
-    *
-    * @return string service unavailable
-    */
-    public function getServiceUnavailable()
-    {
-        return '服务器 <b>%s</b> 不可用(<b>%s</b>)。';
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/English.php b/vendor/jasig/phpcas/source/CAS/Languages/English.php
deleted file mode 100644
index cb13bde93a8d3f69ff955309d8a33c7c7632534f..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/English.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/English.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * English language class
- *
- * @class    CAS_Languages_English
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_English implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'using server';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return 'CAS Authentication wanted!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return 'CAS logout wanted!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.';
-    }
-
-    /**
-    * Get authentication failed string
-    *
-    * @return string authentication failed
-    */
-    public function getAuthenticationFailed()
-    {
-        return 'CAS Authentication failed!';
-    }
-
-    /**
-    * Get the your were not authenticated string
-    *
-    * @return string not authenticated
-    */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>';
-    }
-
-    /**
-    * Get the service unavailable string
-    *
-    * @return string service unavailable
-    */
-    public function getServiceUnavailable()
-    {
-        return 'The service `<b>%s</b>\' is not available (<b>%s</b>).';
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/French.php b/vendor/jasig/phpcas/source/CAS/Languages/French.php
deleted file mode 100644
index 14f65aba24bfb38624bb8761c15dd11c052ce702..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/French.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/French.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * French language class
- *
- * @class    CAS_Languages_French
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_French implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'utilisant le serveur';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return 'Authentication CAS nécessaire&nbsp;!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return 'Déconnexion demandée&nbsp;!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'Vous auriez du etre redirigé(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.';
-    }
-
-    /**
-     * Get authentication failed string
-     *
-     * @return string authentication failed
-     */
-    public function getAuthenticationFailed()
-    {
-        return 'Authentification CAS infructueuse&nbsp;!';
-    }
-
-    /**
-     * Get the your were not authenticated string
-     *
-     * @return string not authenticated
-     */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>Vous n\'avez pas été authentifié(e).</p><p>Vous pouvez soumettre votre requete à nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le problème persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>';
-    }
-
-    /**
-     * Get the service unavailable string
-     *
-     * @return string service unavailable
-     */
-    public function getServiceUnavailable()
-    {
-        return 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)';
-    }
-}
-
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/Galego.php b/vendor/jasig/phpcas/source/CAS/Languages/Galego.php
deleted file mode 100644
index d5bf4045574fcc470a41581e8487bde9d97dd3e6..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/Galego.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/Galego.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Enrique Huelva Rivero enrique.huelvarivero@plexus.es
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Galego language class
- *
- * @class    CAS_Languages_Galego
- * @category Authentication
- * @package  PhpCAS
- * @author   Enrique Huelva Rivero enrique.huelvarivero@plexus.es
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
-
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_Galego implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'usando servidor';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return 'Autenticación CAS necesaria!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return 'Saída CAS necesaria!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'Xa debería ser redireccionado ao servidor CAS. Faga click <a href="%s">aquí</a> para continuar';
-    }
-
-    /**
-     * Get authentication failed string
-     *
-     * @return string authentication failed
-     */
-    public function getAuthenticationFailed()
-    {
-        return 'Autenticación CAS errada!';
-    }
-
-    /**
-     * Get the your were not authenticated string
-     *
-     * @return string not authenticated
-     */
-    public function getYouWereNotAuthenticated()
-    {
-        return '
-        <p>Non estás autenticado</p><p>Podes volver tentalo facendo click <a href="%s">aquí</a>.</p><p>Se o problema persiste debería contactar con el <a href="mailto:%s">administrador deste sitio</a>.</p>';
-    }
-
-    /**
-     * Get the service unavailable string
-     *
-     * @return string service unavailable
-     */
-    public function getServiceUnavailable()
-    {
-        return 'O servizo `<b>%s</b>\' non está dispoñible (<b>%s</b>).';
-    }
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/German.php b/vendor/jasig/phpcas/source/CAS/Languages/German.php
deleted file mode 100644
index b718b1452122246b869f8b08491199d99a435ddf..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/German.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/German.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Henrik Genssen <hg@mediafactory.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * German language class
- *
- * @class    CAS_Languages_German
- * @category Authentication
- * @package  PhpCAS
- * @author   Henrik Genssen <hg@mediafactory.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_German implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'via Server';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return 'CAS Authentifizierung erforderlich!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return 'CAS Abmeldung!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.';
-    }
-
-    /**
-     * Get authentication failed string
-     *
-     * @return string authentication failed
-     */
-    public function getAuthenticationFailed()
-    {
-        return 'CAS Anmeldung fehlgeschlagen!';
-    }
-
-    /**
-     * Get the your were not authenticated string
-     *
-     * @return string not authenticated
-     */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontaktieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>';
-    }
-
-    /**
-     * Get the service unavailable string
-     *
-     * @return string service unavailable
-     */
-    public function getServiceUnavailable()
-    {
-        return 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).';
-    }
-}
-
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/Greek.php b/vendor/jasig/phpcas/source/CAS/Languages/Greek.php
deleted file mode 100644
index 1cfb107e4a75b4a53cc2770ab117f9722d8cdada..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/Greek.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/Greek.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Vangelis Haniotakis <haniotak@ucnet.uoc.gr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Greek language class
- *
- * @class    CAS_Languages_Greek
- * @category Authentication
- * @package  PhpCAS
- * @author   Vangelis Haniotakis <haniotak@ucnet.uoc.gr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_Greek implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'χρησιμοποιείται ο εξυπηρετητής';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return 'Απαιτείται η ταυτοποίηση CAS!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return 'Απαιτείται η αποσύνδεση από CAS!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'Θα έπρεπε να είχατε ανακατευθυνθεί στον εξυπηρετητή CAS. Κάντε κλίκ <a href="%s">εδώ</a> για να συνεχίσετε.';
-    }
-
-    /**
-     * Get authentication failed string
-     *
-     * @return string authentication failed
-     */
-    public function getAuthenticationFailed()
-    {
-        return 'Η ταυτοποίηση CAS απέτυχε!';
-    }
-
-    /**
-     * Get the your were not authenticated string
-     *
-     * @return string not authenticated
-     */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>Δεν ταυτοποιηθήκατε.</p><p>Μπορείτε να ξαναπροσπαθήσετε, κάνοντας κλίκ <a href="%s">εδώ</a>.</p><p>Εαν το πρόβλημα επιμείνει, ελάτε σε επαφή με τον <a href="mailto:%s">διαχειριστή</a>.</p>';
-    }
-
-    /**
-     * Get the service unavailable string
-     *
-     * @return string service unavailable
-     */
-    public function getServiceUnavailable()
-    {
-        return 'Η υπηρεσία `<b>%s</b>\' δεν είναι διαθέσιμη (<b>%s</b>).';
-    }
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/Japanese.php b/vendor/jasig/phpcas/source/CAS/Languages/Japanese.php
deleted file mode 100644
index 568148458ded321205e469fbf1448a80681cbe90..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/Japanese.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/Japanese.php
- * @category Authentication
- * @package  PhpCAS
- * @author   fnorif <fnorif@yahoo.co.jp>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Japanese language class. Now Encoding is UTF-8.
- *
- * @class    CAS_Languages_Japanese
- * @category Authentication
- * @package  PhpCAS
- * @author   fnorif <fnorif@yahoo.co.jp>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- **/
-class CAS_Languages_Japanese implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'サーバーを使っています。';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return 'CASによる認証を行います。';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return 'CASからログアウトします!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'CASサーバに行く必要があります。自動的に転送されない場合は <a href="%s">こちら</a> をクリックして続行します。';
-    }
-
-    /**
-     * Get authentication failed string
-     *
-     * @return string authentication failed
-     */
-    public function getAuthenticationFailed()
-    {
-        return 'CASによる認証に失敗しました。';
-    }
-
-    /**
-     * Get the your were not authenticated string
-     *
-     * @return string not authenticated
-     */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>認証できませんでした。</p><p>もう一度リクエストを送信する場合は<a href="%s">こちら</a>をクリック。</p><p>問題が解決しない場合は <a href="mailto:%s">このサイトの管理者</a>に問い合わせてください。</p>';
-    }
-
-    /**
-     * Get the service unavailable string
-     *
-     * @return string service unavailable
-     */
-    public function getServiceUnavailable()
-    {
-        return 'サービス `<b>%s</b>\' は利用できません (<b>%s</b>)。';
-    }
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/LanguageInterface.php b/vendor/jasig/phpcas/source/CAS/Languages/LanguageInterface.php
deleted file mode 100644
index dfb0ac514420b2a99e3f29441394e5c8d726846c..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/LanguageInterface.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/LanguageInterface.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Language Interface class for all internationalization files
- *
- * @class    CAS_Languages_LanguageInterface
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-interface CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer();
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted();
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout();
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected();
-
-    /**
-     * Get authentication failed string
-     *
-     * @return string authentication failed
-     */
-    public function getAuthenticationFailed();
-
-    /**
-     * Get the your were not authenticated string
-     *
-     * @return string not authenticated
-     */
-    public function getYouWereNotAuthenticated();
-
-    /**
-     * Get the service unavailable string
-     *
-     * @return string service unavailable
-     */
-    public function getServiceUnavailable();
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/Portuguese.php b/vendor/jasig/phpcas/source/CAS/Languages/Portuguese.php
deleted file mode 100644
index a927cad62912159cdcb8be8882ea346587e91928..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/Portuguese.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/Portuguese.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Sherwin Harris <sherwin.harris@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252517/phpCAS
- */
-
-/**
- * Portuguese language class
- *
- * @class    CAS_Languages_Portuguese
- * @category Authentication
- * @package  PhpCAS
- * @author   Sherwin Harris <sherwin.harris@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://apereo.atlassian.net/wiki/spaces/CASC/pages/103252517/phpCAS
- *
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_Portuguese implements CAS_Languages_LanguageInterface
-{
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'Usando o servidor';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return 'A autenticação do servidor CAS desejado!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return 'Saida do servidor CAS desejado!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should have been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'Você já deve ter sido redirecionado para o servidor CAS. Clique <a href="%s">aqui</a> para continuar';
-    }
-
-    /**
-    * Get authentication failed string
-    *
-    * @return string authentication failed
-    */
-    public function getAuthenticationFailed()
-    {
-        return 'A autenticação do servidor CAS falheu!';
-    }
-
-    /**
-    * Get the your were not authenticated string
-    *
-    * @return string not authenticated
-    */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>Você não foi autenticado.</p><p>Você pode enviar sua solicitação novamente clicando <a href="%s">aqui</a>. </p><p>Se o problema persistir, você pode entrar em contato com <a href="mailto:%s">o administrador deste site</a>.</p>';
-    }
-
-    /**
-    * Get the service unavailable string
-    *
-    * @return string service unavailable
-    */
-    public function getServiceUnavailable()
-    {
-        return 'O serviço `<b>%s</b>\' não está disponível (<b>%s</b>).';
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Languages/Spanish.php b/vendor/jasig/phpcas/source/CAS/Languages/Spanish.php
deleted file mode 100644
index c6ea50e74706ee6347a853c2a31b6025dfaa97ea..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Languages/Spanish.php
+++ /dev/null
@@ -1,117 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Language/Spanish.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Iván-Benjamín García Torà <ivaniclixx@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Spanish language class
- *
- * @class    CAS_Languages_Spanish
- * @category Authentication
- * @package  PhpCAS
- * @author   Iván-Benjamín García Torà <ivaniclixx@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
-
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-class CAS_Languages_Spanish implements CAS_Languages_LanguageInterface
-{
-
-    /**
-     * Get the using server string
-     *
-     * @return string using server
-     */
-    public function getUsingServer()
-    {
-        return 'usando servidor';
-    }
-
-    /**
-     * Get authentication wanted string
-     *
-     * @return string authentication wanted
-     */
-    public function getAuthenticationWanted()
-    {
-        return '¡Autentificación CAS necesaria!';
-    }
-
-    /**
-     * Get logout string
-     *
-     * @return string logout
-     */
-    public function getLogout()
-    {
-        return '¡Salida CAS necesaria!';
-    }
-
-    /**
-     * Get the should have been redirected string
-     *
-     * @return string should habe been redirected
-     */
-    public function getShouldHaveBeenRedirected()
-    {
-        return 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.';
-    }
-
-    /**
-     * Get authentication failed string
-     *
-     * @return string authentication failed
-     */
-    public function getAuthenticationFailed()
-    {
-        return '¡Autentificación CAS fallida!';
-    }
-
-    /**
-     * Get the your were not authenticated string
-     *
-     * @return string not authenticated
-     */
-    public function getYouWereNotAuthenticated()
-    {
-        return '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>';
-    }
-
-    /**
-     * Get the service unavailable string
-     *
-     * @return string service unavailable
-     */
-    public function getServiceUnavailable()
-    {
-        return 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).';
-    }
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeAuthenticationCallException.php b/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeAuthenticationCallException.php
deleted file mode 100644
index d4d7680de6a02110fc72aed5f70fb126bcec2cec..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeAuthenticationCallException.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- * PHP Version 7
- *
- * @file     CAS/OutOfSequenceBeforeAuthenticationCallException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class defines Exceptions that should be thrown when the sequence of
- * operations is invalid. In this case it should be thrown when an
- * authentication call has not yet happened.
- *
- * @class    CAS_OutOfSequenceBeforeAuthenticationCallException
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_OutOfSequenceBeforeAuthenticationCallException
-extends CAS_OutOfSequenceException
-implements CAS_Exception
-{
-    /**
-     * Return standard error meessage
-     *
-     * @return void
-     */
-    public function __construct ()
-    {
-        parent::__construct('An authentication call hasn\'t happened yet.');
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeClientException.php b/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeClientException.php
deleted file mode 100644
index 6c2c39c587844a4e9f39f7a6bbf4e31d91531770..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeClientException.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- * PHP Version 7
- *
- * @file     CAS/OutOfSequenceBeforeClientException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class defines Exceptions that should be thrown when the sequence of
- * operations is invalid. In this case it should be thrown when the client() or
- *  proxy() call has not yet happened and no client or proxy object exists.
- *
- * @class    CAS_OutOfSequenceBeforeClientException
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_OutOfSequenceBeforeClientException
-extends CAS_OutOfSequenceException
-implements CAS_Exception
-{
-    /**
-     * Return standard error message
-     *
-     * @return void
-     */
-    public function __construct ()
-    {
-        parent::__construct(
-            'this method cannot be called before phpCAS::client() or phpCAS::proxy()'
-        );
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeProxyException.php b/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeProxyException.php
deleted file mode 100644
index 79915552182b68d8e23453c0167e6c8ffd26d0b0..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/OutOfSequenceBeforeProxyException.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- * PHP Version 7
- *
- * @file     CAS/OutOfSequenceBeforeProxyException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class defines Exceptions that should be thrown when the sequence of
- * operations is invalid. In this case it should be thrown when the proxy() call
- * has not yet happened and no proxy object exists.
- *
- * @class    CAS_OutOfSequenceBeforeProxyException
- * @category Authentication
- * @package  PhpCAS
- * @author   Joachim Fritschi <jfritschi@freenet.de>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_OutOfSequenceBeforeProxyException
-extends CAS_OutOfSequenceException
-implements CAS_Exception
-{
-
-    /**
-     * Return standard error message
-     *
-     * @return void
-     */
-    public function __construct ()
-    {
-        parent::__construct(
-            'this method cannot be called before phpCAS::proxy()'
-        );
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/OutOfSequenceException.php b/vendor/jasig/phpcas/source/CAS/OutOfSequenceException.php
deleted file mode 100644
index d6f7d88fc165eccb429f65ffef909ef9636115cc..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/OutOfSequenceException.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- * PHP Version 7
- *
- * @file     CAS/OutOfSequenceException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class defines Exceptions that should be thrown when the sequence of
- * operations is invalid. Examples are:
- *		- Requesting the response before executing a request.
- *		- Changing the URL of a request after executing the request.
- *
- * @class    CAS_OutOfSequenceException
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_OutOfSequenceException
-extends BadMethodCallException
-implements CAS_Exception
-{
-
-}
diff --git a/vendor/jasig/phpcas/source/CAS/PGTStorage/AbstractStorage.php b/vendor/jasig/phpcas/source/CAS/PGTStorage/AbstractStorage.php
deleted file mode 100644
index a93568d60d8605b0cf263f101b8b31783b55e11e..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/PGTStorage/AbstractStorage.php
+++ /dev/null
@@ -1,222 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/PGTStorage/AbstractStorage.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Basic class for PGT storage
- * The CAS_PGTStorage_AbstractStorage class is a generic class for PGT storage.
- * This class should not be instanciated itself but inherited by specific PGT
- * storage classes.
- *
- * @class CAS_PGTStorage_AbstractStorage
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @ingroup internalPGTStorage
- */
-
-abstract class CAS_PGTStorage_AbstractStorage
-{
-    /**
-     * @addtogroup internalPGTStorage
-     * @{
-     */
-
-    // ########################################################################
-    //  CONSTRUCTOR
-    // ########################################################################
-
-    /**
-     * The constructor of the class, should be called only by inherited classes.
-     *
-     * @param CAS_Client $cas_parent the CAS _client instance that creates the
-     * current object.
-     *
-     * @return void
-     *
-     * @protected
-     */
-    function __construct($cas_parent)
-    {
-        phpCAS::traceBegin();
-        if ( !$cas_parent->isProxy() ) {
-            phpCAS::error(
-                'defining PGT storage makes no sense when not using a CAS proxy'
-            );
-        }
-        phpCAS::traceEnd();
-    }
-
-    // ########################################################################
-    //  DEBUGGING
-    // ########################################################################
-
-    /**
-     * This virtual method returns an informational string giving the type of storage
-     * used by the object (used for debugging purposes).
-     *
-     * @return string
-     *
-     * @public
-     */
-    function getStorageType()
-    {
-        phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
-    }
-
-    /**
-     * This virtual method returns an informational string giving informations on the
-     * parameters of the storage.(used for debugging purposes).
-     *
-     * @return string
-     *
-     * @public
-     */
-    function getStorageInfo()
-    {
-        phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
-    }
-
-    // ########################################################################
-    //  ERROR HANDLING
-    // ########################################################################
-
-    /**
-     * string used to store an error message. Written by
-     * PGTStorage::setErrorMessage(), read by PGTStorage::getErrorMessage().
-     *
-     * @hideinitializer
-     * @deprecated not used.
-     */
-    var $_error_message=false;
-
-    /**
-     * This method sets en error message, which can be read later by
-     * PGTStorage::getErrorMessage().
-     *
-     * @param string $error_message an error message
-     *
-     * @return void
-     *
-     * @deprecated not used.
-     */
-    function setErrorMessage($error_message)
-    {
-        $this->_error_message = $error_message;
-    }
-
-    /**
-     * This method returns an error message set by PGTStorage::setErrorMessage().
-     *
-     * @return string an error message when set by PGTStorage::setErrorMessage(), FALSE
-     * otherwise.
-     *
-     * @deprecated not used.
-     */
-    function getErrorMessage()
-    {
-        return $this->_error_message;
-    }
-
-    // ########################################################################
-    //  INITIALIZATION
-    // ########################################################################
-
-    /**
-     * a boolean telling if the storage has already been initialized. Written by
-     * PGTStorage::init(), read by PGTStorage::isInitialized().
-     *
-     * @hideinitializer
-     */
-    var $_initialized = false;
-
-    /**
-     * This method tells if the storage has already been intialized.
-     *
-     * @return bool
-     *
-     * @protected
-     */
-    function isInitialized()
-    {
-        return $this->_initialized;
-    }
-
-    /**
-     * This virtual method initializes the object.
-     *
-     * @return void
-     */
-    function init()
-    {
-        $this->_initialized = true;
-    }
-
-    // ########################################################################
-    //  PGT I/O
-    // ########################################################################
-
-    /**
-     * This virtual method stores a PGT and its corresponding PGT Iuo.
-     *
-     * @param string $pgt     the PGT
-     * @param string $pgt_iou the PGT iou
-     *
-     * @return void
-     *
-     * @note Should never be called.
-     *
-     */
-    function write($pgt,$pgt_iou)
-    {
-        phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
-    }
-
-    /**
-     * This virtual method reads a PGT corresponding to a PGT Iou and deletes
-     * the corresponding storage entry.
-     *
-     * @param string $pgt_iou the PGT iou
-     *
-     * @return string
-     *
-     * @note Should never be called.
-     */
-    function read($pgt_iou)
-    {
-        phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
-    }
-
-    /** @} */
-
-}
-
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/PGTStorage/Db.php b/vendor/jasig/phpcas/source/CAS/PGTStorage/Db.php
deleted file mode 100644
index 2efe5a3e85bff19dd05d072e8d034c52d8ce1655..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/PGTStorage/Db.php
+++ /dev/null
@@ -1,440 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/PGTStorage/Db.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Daniel Frett <daniel.frett@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-define('CAS_PGT_STORAGE_DB_DEFAULT_TABLE', 'cas_pgts');
-
-/**
- * Basic class for PGT database storage
- * The CAS_PGTStorage_Db class is a class for PGT database storage.
- *
- * @class    CAS_PGTStorage_Db
- * @category Authentication
- * @package  PhpCAS
- * @author   Daniel Frett <daniel.frett@gmail.com>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- * @ingroup internalPGTStorageDb
- */
-
-class CAS_PGTStorage_Db extends CAS_PGTStorage_AbstractStorage
-{
-    /**
-     * @addtogroup internalCAS_PGTStorageDb
-     * @{
-     */
-
-    /**
-     * the PDO object to use for database interactions
-     */
-    private $_pdo;
-
-    /**
-     * This method returns the PDO object to use for database interactions.
-     *
-     * @return PDO object
-     */
-    private function _getPdo()
-    {
-        return $this->_pdo;
-    }
-
-    /**
-     * database connection options to use when creating a new PDO object
-     */
-    private $_dsn;
-    private $_username;
-    private $_password;
-    private $_driver_options;
-
-    /**
-     * @var string the table to use for storing/retrieving pgt's
-     */
-    private $_table;
-
-    /**
-     * This method returns the table to use when storing/retrieving PGT's
-     *
-     * @return string the name of the pgt storage table.
-     */
-    private function _getTable()
-    {
-        return $this->_table;
-    }
-
-    // ########################################################################
-    //  DEBUGGING
-    // ########################################################################
-
-    /**
-     * This method returns an informational string giving the type of storage
-     * used by the object (used for debugging purposes).
-     *
-     * @return string an informational string.
-     */
-    public function getStorageType()
-    {
-        return "db";
-    }
-
-    /**
-     * This method returns an informational string giving informations on the
-     * parameters of the storage.(used for debugging purposes).
-     *
-     * @return string an informational string.
-     * @public
-     */
-    public function getStorageInfo()
-    {
-        return 'table=`'.$this->_getTable().'\'';
-    }
-
-    // ########################################################################
-    //  CONSTRUCTOR
-    // ########################################################################
-
-    /**
-     * The class constructor.
-     *
-     * @param CAS_Client $cas_parent     the CAS_Client instance that creates
-     * the object.
-     * @param string     $dsn_or_pdo     a dsn string to use for creating a PDO
-     * object or a PDO object
-     * @param string     $username       the username to use when connecting to
-     * the database
-     * @param string     $password       the password to use when connecting to
-     * the database
-     * @param string     $table          the table to use for storing and
-     * retrieving PGT's
-     * @param string     $driver_options any driver options to use when
-     * connecting to the database
-     */
-    public function __construct(
-        $cas_parent, $dsn_or_pdo, $username='', $password='', $table='',
-        $driver_options=null
-    ) {
-        phpCAS::traceBegin();
-        // call the ancestor's constructor
-        parent::__construct($cas_parent);
-
-        // set default values
-        if ( empty($table) ) {
-            $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
-        }
-        if ( !is_array($driver_options) ) {
-            $driver_options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
-        }
-
-        // store the specified parameters
-        if ($dsn_or_pdo instanceof PDO) {
-            $this->_pdo = $dsn_or_pdo;
-        } else {
-            $this->_dsn = $dsn_or_pdo;
-            $this->_username = $username;
-            $this->_password = $password;
-            $this->_driver_options = $driver_options;
-        }
-
-        // store the table name
-        $this->_table = $table;
-
-        phpCAS::traceEnd();
-    }
-
-    // ########################################################################
-    //  INITIALIZATION
-    // ########################################################################
-
-    /**
-     * This method is used to initialize the storage. Halts on error.
-     *
-     * @return void
-     */
-    public function init()
-    {
-        phpCAS::traceBegin();
-        // if the storage has already been initialized, return immediatly
-        if ($this->isInitialized()) {
-            return;
-        }
-
-        // initialize the base object
-        parent::init();
-
-        // create the PDO object if it doesn't exist already
-        if (!($this->_pdo instanceof PDO)) {
-            try {
-                $this->_pdo = new PDO(
-                    $this->_dsn, $this->_username, $this->_password,
-                    $this->_driver_options
-                );
-            }
-            catch(PDOException $e) {
-                phpCAS::error('Database connection error: ' . $e->getMessage());
-            }
-        }
-
-        phpCAS::traceEnd();
-    }
-
-    // ########################################################################
-    //  PDO database interaction
-    // ########################################################################
-
-    /**
-     * attribute that stores the previous error mode for the PDO handle while
-     * processing a transaction
-     */
-    private $_errMode;
-
-    /**
-     * This method will enable the Exception error mode on the PDO object
-     *
-     * @return void
-     */
-    private function _setErrorMode()
-    {
-        // get PDO object and enable exception error mode
-        $pdo = $this->_getPdo();
-        $this->_errMode = $pdo->getAttribute(PDO::ATTR_ERRMODE);
-        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
-    }
-
-    /**
-     * this method will reset the error mode on the PDO object
-     *
-     * @return void
-     */
-    private function _resetErrorMode()
-    {
-        // get PDO object and reset the error mode to what it was originally
-        $pdo = $this->_getPdo();
-        $pdo->setAttribute(PDO::ATTR_ERRMODE, $this->_errMode);
-    }
-
-    // ########################################################################
-    //  database queries
-    // ########################################################################
-    // these queries are potentially unsafe because the person using this library
-    // can set the table to use, but there is no reliable way to escape SQL
-    // fieldnames in PDO yet
-
-    /**
-     * This method returns the query used to create a pgt storage table
-     *
-     * @return string the create table SQL, no bind params in query
-     */
-    protected function createTableSql()
-    {
-        return 'CREATE TABLE ' . $this->_getTable()
-            . ' (pgt_iou VARCHAR(255) NOT NULL PRIMARY KEY, pgt VARCHAR(255) NOT NULL)';
-    }
-
-    /**
-     * This method returns the query used to store a pgt
-     *
-     * @return string the store PGT SQL, :pgt and :pgt_iou are the bind params contained
-     *         in the query
-     */
-    protected function storePgtSql()
-    {
-        return 'INSERT INTO ' . $this->_getTable()
-            . ' (pgt_iou, pgt) VALUES (:pgt_iou, :pgt)';
-    }
-
-    /**
-     * This method returns the query used to retrieve a pgt. the first column
-     * of the first row should contain the pgt
-     *
-     * @return string the retrieve PGT SQL, :pgt_iou is the only bind param contained
-     *         in the query
-     */
-    protected function retrievePgtSql()
-    {
-        return 'SELECT pgt FROM ' . $this->_getTable() . ' WHERE pgt_iou = :pgt_iou';
-    }
-
-    /**
-     * This method returns the query used to delete a pgt.
-     *
-     * @return string the delete PGT SQL, :pgt_iou is the only bind param contained in
-     *         the query
-     */
-    protected function deletePgtSql()
-    {
-        return 'DELETE FROM ' . $this->_getTable() . ' WHERE pgt_iou = :pgt_iou';
-    }
-
-    // ########################################################################
-    //  PGT I/O
-    // ########################################################################
-
-    /**
-     * This method creates the database table used to store pgt's and pgtiou's
-     *
-     * @return void
-     */
-    public function createTable()
-    {
-        phpCAS::traceBegin();
-
-        // initialize this PGTStorage object if it hasn't been initialized yet
-        if ( !$this->isInitialized() ) {
-            $this->init();
-        }
-
-        // initialize the PDO object for this method
-        $pdo = $this->_getPdo();
-        $this->_setErrorMode();
-
-        try {
-            $pdo->beginTransaction();
-
-            $query = $pdo->query($this->createTableSQL());
-            $query->closeCursor();
-
-            $pdo->commit();
-        }
-        catch(PDOException $e) {
-            // attempt rolling back the transaction before throwing a phpCAS error
-            try {
-                $pdo->rollBack();
-            }
-            catch(PDOException $e) {
-            }
-            phpCAS::error('error creating PGT storage table: ' . $e->getMessage());
-        }
-
-        // reset the PDO object
-        $this->_resetErrorMode();
-
-        phpCAS::traceEnd();
-    }
-
-    /**
-     * This method stores a PGT and its corresponding PGT Iou in the database.
-     * Echoes a warning on error.
-     *
-     * @param string $pgt     the PGT
-     * @param string $pgt_iou the PGT iou
-     *
-     * @return void
-     */
-    public function write($pgt, $pgt_iou)
-    {
-        phpCAS::traceBegin();
-
-        // initialize the PDO object for this method
-        $pdo = $this->_getPdo();
-        $this->_setErrorMode();
-
-        try {
-            $pdo->beginTransaction();
-
-            $query = $pdo->prepare($this->storePgtSql());
-            $query->bindValue(':pgt', $pgt, PDO::PARAM_STR);
-            $query->bindValue(':pgt_iou', $pgt_iou, PDO::PARAM_STR);
-            $query->execute();
-            $query->closeCursor();
-
-            $pdo->commit();
-        }
-        catch(PDOException $e) {
-            // attempt rolling back the transaction before throwing a phpCAS error
-            try {
-                $pdo->rollBack();
-            }
-            catch(PDOException $e) {
-            }
-            phpCAS::error('error writing PGT to database: ' . $e->getMessage());
-        }
-
-        // reset the PDO object
-        $this->_resetErrorMode();
-
-        phpCAS::traceEnd();
-    }
-
-    /**
-     * This method reads a PGT corresponding to a PGT Iou and deletes the
-     * corresponding db entry.
-     *
-     * @param string $pgt_iou the PGT iou
-     *
-     * @return string|false the corresponding PGT, or FALSE on error
-     */
-    public function read($pgt_iou)
-    {
-        phpCAS::traceBegin();
-        $pgt = false;
-
-        // initialize the PDO object for this method
-        $pdo = $this->_getPdo();
-        $this->_setErrorMode();
-
-        try {
-            $pdo->beginTransaction();
-
-            // fetch the pgt for the specified pgt_iou
-            $query = $pdo->prepare($this->retrievePgtSql());
-            $query->bindValue(':pgt_iou', $pgt_iou, PDO::PARAM_STR);
-            $query->execute();
-            $pgt = $query->fetchColumn(0);
-            $query->closeCursor();
-
-            // delete the specified pgt_iou from the database
-            $query = $pdo->prepare($this->deletePgtSql());
-            $query->bindValue(':pgt_iou', $pgt_iou, PDO::PARAM_STR);
-            $query->execute();
-            $query->closeCursor();
-
-            $pdo->commit();
-        }
-        catch(PDOException $e) {
-            // attempt rolling back the transaction before throwing a phpCAS error
-            try {
-                $pdo->rollBack();
-            }
-            catch(PDOException $e) {
-            }
-            phpCAS::trace('error reading PGT from database: ' . $e->getMessage());
-        }
-
-        // reset the PDO object
-        $this->_resetErrorMode();
-
-        phpCAS::traceEnd();
-        return $pgt;
-    }
-
-    /** @} */
-
-}
-
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/PGTStorage/File.php b/vendor/jasig/phpcas/source/CAS/PGTStorage/File.php
deleted file mode 100644
index fbacd3b7d21b77915a906071fcd09b3cd5a10c42..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/PGTStorage/File.php
+++ /dev/null
@@ -1,261 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/PGTStorage/AbstractStorage.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * The CAS_PGTStorage_File class is a class for PGT file storage. An instance of
- * this class is returned by CAS_Client::SetPGTStorageFile().
- *
- * @class    CAS_PGTStorage_File
- * @category Authentication
- * @package  PhpCAS
- * @author   Pascal Aubry <pascal.aubry@univ-rennes1.fr>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- *
- * @ingroup internalPGTStorageFile
- */
-
-class CAS_PGTStorage_File extends CAS_PGTStorage_AbstractStorage
-{
-    /**
-     * @addtogroup internalPGTStorageFile
-     * @{
-     */
-
-    /**
-     * a string telling where PGT's should be stored on the filesystem. Written by
-     * PGTStorageFile::PGTStorageFile(), read by getPath().
-     *
-     * @private
-     */
-    var $_path;
-
-    /**
-     * This method returns the name of the directory where PGT's should be stored
-     * on the filesystem.
-     *
-     * @return string the name of a directory (with leading and trailing '/')
-     *
-     * @private
-     */
-    function getPath()
-    {
-        return $this->_path;
-    }
-
-    // ########################################################################
-    //  DEBUGGING
-    // ########################################################################
-
-    /**
-     * This method returns an informational string giving the type of storage
-     * used by the object (used for debugging purposes).
-     *
-     * @return string an informational string.
-     * @public
-     */
-    function getStorageType()
-    {
-        return "file";
-    }
-
-    /**
-     * This method returns an informational string giving informations on the
-     * parameters of the storage.(used for debugging purposes).
-     *
-     * @return string an informational string.
-     * @public
-     */
-    function getStorageInfo()
-    {
-        return 'path=`'.$this->getPath().'\'';
-    }
-
-    // ########################################################################
-    //  CONSTRUCTOR
-    // ########################################################################
-
-    /**
-     * The class constructor, called by CAS_Client::SetPGTStorageFile().
-     *
-     * @param CAS_Client $cas_parent the CAS_Client instance that creates the object.
-     * @param string     $path       the path where the PGT's should be stored
-     *
-     * @return void
-     *
-     * @public
-     */
-    function __construct($cas_parent,$path)
-    {
-        phpCAS::traceBegin();
-        // call the ancestor's constructor
-        parent::__construct($cas_parent);
-
-        if (empty($path)) {
-            $path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
-        }
-        // check that the path is an absolute path
-        if (getenv("OS")=="Windows_NT" || strtoupper(substr(PHP_OS,0,3)) == 'WIN') {
-
-            if (!preg_match('`^[a-zA-Z]:`', $path)) {
-                phpCAS::error('an absolute path is needed for PGT storage to file');
-            }
-
-        } else {
-
-            if ( $path[0] != '/' ) {
-                phpCAS::error('an absolute path is needed for PGT storage to file');
-            }
-
-            // store the path (with a leading and trailing '/')
-            $path = preg_replace('|[/]*$|', '/', $path);
-            $path = preg_replace('|^[/]*|', '/', $path);
-        }
-
-        $this->_path = $path;
-        phpCAS::traceEnd();
-    }
-
-    // ########################################################################
-    //  INITIALIZATION
-    // ########################################################################
-
-    /**
-     * This method is used to initialize the storage. Halts on error.
-     *
-     * @return void
-     * @public
-     */
-    function init()
-    {
-        phpCAS::traceBegin();
-        // if the storage has already been initialized, return immediatly
-        if ($this->isInitialized()) {
-            return;
-        }
-        // call the ancestor's method (mark as initialized)
-        parent::init();
-        phpCAS::traceEnd();
-    }
-
-    // ########################################################################
-    //  PGT I/O
-    // ########################################################################
-
-    /**
-     * This method returns the filename corresponding to a PGT Iou.
-     *
-     * @param string $pgt_iou the PGT iou.
-     *
-     * @return string a filename
-     * @private
-     */
-    function getPGTIouFilename($pgt_iou)
-    {
-        phpCAS::traceBegin();
-        $filename = $this->getPath()."phpcas-".hash("sha256", $pgt_iou);
-//        $filename = $this->getPath().$pgt_iou.'.plain';
-        phpCAS::trace("Sha256 filename:" . $filename);
-        phpCAS::traceEnd();
-        return $filename;
-    }
-
-    /**
-     * This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
-     * warning on error.
-     *
-     * @param string $pgt     the PGT
-     * @param string $pgt_iou the PGT iou
-     *
-     * @return void
-     *
-     * @public
-     */
-    function write($pgt,$pgt_iou)
-    {
-        phpCAS::traceBegin();
-        $fname = $this->getPGTIouFilename($pgt_iou);
-        if (!file_exists($fname)) {
-            touch($fname);
-            // Chmod will fail on windows
-            @chmod($fname, 0600);
-            if ($f=fopen($fname, "w")) {
-                if (fputs($f, $pgt) === false) {
-                    phpCAS::error('could not write PGT to `'.$fname.'\'');
-                }
-                phpCAS::trace('Successful write of PGT to `'.$fname.'\'');
-                fclose($f);
-            } else {
-                phpCAS::error('could not open `'.$fname.'\'');
-            }
-        } else {
-            phpCAS::error('File exists: `'.$fname.'\'');
-        }
-        phpCAS::traceEnd();
-    }
-
-    /**
-     * This method reads a PGT corresponding to a PGT Iou and deletes the
-     * corresponding file.
-     *
-     * @param string $pgt_iou the PGT iou
-     *
-     * @return string|false the corresponding PGT, or FALSE on error
-     *
-     * @public
-     */
-    function read($pgt_iou)
-    {
-        phpCAS::traceBegin();
-        $pgt = false;
-        $fname = $this->getPGTIouFilename($pgt_iou);
-        if (file_exists($fname)) {
-            if (!($f=fopen($fname, "r"))) {
-                phpCAS::error('could not open `'.$fname.'\'');
-            } else {
-                if (($pgt=fgets($f)) === false) {
-                    phpCAS::error('could not read PGT from `'.$fname.'\'');
-                }
-                phpCAS::trace('Successful read of PGT to `'.$fname.'\'');
-                fclose($f);
-            }
-            // delete the PGT file
-            @unlink($fname);
-        } else {
-            phpCAS::error('No such file `'.$fname.'\'');
-        }
-        phpCAS::traceEnd($pgt);
-        return $pgt;
-    }
-
-    /** @} */
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService.php b/vendor/jasig/phpcas/source/CAS/ProxiedService.php
deleted file mode 100644
index 2673ee955fd5331891309af5a6cb386656840e00..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This interface defines methods that allow proxy-authenticated service handlers
- * to interact with phpCAS.
- *
- * Proxy service handlers must implement this interface as well as call
- * phpCAS::initializeProxiedService($this) at some point in their implementation.
- *
- * While not required, proxy-authenticated service handlers are encouraged to
- * implement the CAS_ProxiedService_Testable interface to facilitate unit testing.
- *
- * @class    CAS_ProxiedService
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-interface CAS_ProxiedService
-{
-
-    /**
-     * Answer a service identifier (URL) for whom we should fetch a proxy ticket.
-     *
-     * @return string
-     * @throws Exception If no service url is available.
-     */
-    public function getServiceUrl ();
-
-    /**
-     * Register a proxy ticket with the ProxiedService that it can use when
-     * making requests.
-     *
-     * @param string $proxyTicket Proxy ticket string
-     *
-     * @return void
-     * @throws InvalidArgumentException If the $proxyTicket is invalid.
-     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
-     * already been initialized/set.
-     */
-    public function setProxyTicket ($proxyTicket);
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Abstract.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Abstract.php
deleted file mode 100644
index 0801c723bd86574f1c48fcb7851a78818a81e914..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Abstract.php
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Abstract.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class implements common methods for ProxiedService implementations included
- * with phpCAS.
- *
- * @class    CAS_ProxiedService_Abstract
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-abstract class CAS_ProxiedService_Abstract
-implements CAS_ProxiedService, CAS_ProxiedService_Testable
-{
-
-    /**
-     * The proxy ticket that can be used when making service requests.
-     * @var string $_proxyTicket;
-     */
-    private $_proxyTicket;
-
-    /**
-     * Register a proxy ticket with the Proxy that it can use when making requests.
-     *
-     * @param string $proxyTicket proxy ticket
-     *
-     * @return void
-     * @throws InvalidArgumentException If the $proxyTicket is invalid.
-     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
-     *         already been initialized/set.
-     */
-    public function setProxyTicket ($proxyTicket)
-    {
-        if (empty($proxyTicket)) {
-            throw new CAS_InvalidArgumentException(
-                'Trying to initialize with an empty proxy ticket.'
-            );
-        }
-        if (!empty($this->_proxyTicket)) {
-            throw new CAS_OutOfSequenceException(
-                'Already initialized, cannot change the proxy ticket.'
-            );
-        }
-        $this->_proxyTicket = $proxyTicket;
-    }
-
-    /**
-     * Answer the proxy ticket to be used when making requests.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before a proxy ticket has
-     * already been initialized/set.
-     */
-    protected function getProxyTicket ()
-    {
-        if (empty($this->_proxyTicket)) {
-            throw new CAS_OutOfSequenceException(
-                'No proxy ticket yet. Call $this->initializeProxyTicket() to aquire the proxy ticket.'
-            );
-        }
-
-        return $this->_proxyTicket;
-    }
-
-    /**
-     * @var CAS_Client $_casClient;
-     */
-    private $_casClient;
-
-    /**
-     * Use a particular CAS_Client->initializeProxiedService() rather than the
-     * static phpCAS::initializeProxiedService().
-     *
-     * This method should not be called in standard operation, but is needed for unit
-     * testing.
-     *
-     * @param CAS_Client $casClient cas client
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
-     * already been initialized/set.
-     */
-    public function setCasClient (CAS_Client $casClient)
-    {
-        if (!empty($this->_proxyTicket)) {
-            throw new CAS_OutOfSequenceException(
-                'Already initialized, cannot change the CAS_Client.'
-            );
-        }
-
-        $this->_casClient = $casClient;
-    }
-
-    /**
-     * Fetch our proxy ticket.
-     *
-     * Descendent classes should call this method once their service URL is available
-     * to initialize their proxy ticket.
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
-     * already been initialized.
-     */
-    protected function initializeProxyTicket()
-    {
-        if (!empty($this->_proxyTicket)) {
-            throw new CAS_OutOfSequenceException(
-                'Already initialized, cannot initialize again.'
-            );
-        }
-        // Allow usage of a particular CAS_Client for unit testing.
-        if (empty($this->_casClient)) {
-            phpCAS::initializeProxiedService($this);
-        } else {
-            $this->_casClient->initializeProxiedService($this);
-        }
-    }
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Exception.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Exception.php
deleted file mode 100644
index 0f87413dd918223443708fa46ee0b4d264015823..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Exception.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Exception.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * An Exception for problems communicating with a proxied service.
- *
- * @class    CAS_ProxiedService_Exception
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_ProxiedService_Exception
-extends Exception
-implements CAS_Exception
-{
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Http.php
deleted file mode 100644
index 4240b061ae694dc1c0d10b76d103887abecbd22e..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Http.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This interface defines methods that clients should use for configuring, sending,
- * and receiving proxied HTTP requests.
- *
- * @class    CAS_ProxiedService_Http
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-interface CAS_ProxiedService_Http
-{
-
-    /*********************************************************
-     * Configure the Request
-    *********************************************************/
-
-    /**
-     * Set the URL of the Request
-     *
-     * @param string $url Url to set
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setUrl ($url);
-
-    /*********************************************************
-     * 2. Send the Request
-    *********************************************************/
-
-    /**
-     * Perform the request.
-     *
-     * @return bool TRUE on success, FALSE on failure.
-     * @throws CAS_OutOfSequenceException If called multiple times.
-     */
-    public function send ();
-
-    /*********************************************************
-     * 3. Access the response
-    *********************************************************/
-
-    /**
-     * Answer the headers of the response.
-     *
-     * @return array An array of header strings.
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseHeaders ();
-
-    /**
-     * Answer the body of response.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseBody ();
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Abstract.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Abstract.php
deleted file mode 100644
index 8d55edd502bad06f1d2a2a52dea54177018c4eb8..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Abstract.php
+++ /dev/null
@@ -1,360 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Http/Abstract.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class implements common methods for ProxiedService implementations included
- * with phpCAS.
- *
- * @class    CAS_ProxiedService_Http_Abstract
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-abstract class CAS_ProxiedService_Http_Abstract extends
-CAS_ProxiedService_Abstract implements CAS_ProxiedService_Http
-{
-    /**
-     * The HTTP request mechanism talking to the target service.
-     *
-     * @var CAS_Request_RequestInterface $requestHandler
-     */
-    protected $requestHandler;
-
-    /**
-     * The storage mechanism for cookies set by the target service.
-     *
-     * @var CAS_CookieJar $_cookieJar
-     */
-    private $_cookieJar;
-
-    /**
-     * Constructor.
-     *
-     * @param CAS_Request_RequestInterface $requestHandler request handler object
-     * @param CAS_CookieJar                $cookieJar      cookieJar object
-     *
-     * @return void
-     */
-    public function __construct(CAS_Request_RequestInterface $requestHandler,
-        CAS_CookieJar $cookieJar
-    ) {
-        $this->requestHandler = $requestHandler;
-        $this->_cookieJar = $cookieJar;
-    }
-
-    /**
-     * The target service url.
-     * @var string $_url;
-     */
-    private $_url;
-
-    /**
-     * Answer a service identifier (URL) for whom we should fetch a proxy ticket.
-     *
-     * @return string
-     * @throws Exception If no service url is available.
-     */
-    public function getServiceUrl()
-    {
-        if (empty($this->_url)) {
-            throw new CAS_ProxiedService_Exception(
-                'No URL set via ' . get_class($this) . '->setUrl($url).'
-            );
-        }
-
-        return $this->_url;
-    }
-
-    /*********************************************************
-     * Configure the Request
-     *********************************************************/
-
-    /**
-     * Set the URL of the Request
-     *
-     * @param string $url url to set
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setUrl($url)
-    {
-        if ($this->hasBeenSent()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot set the URL, request already sent.'
-            );
-        }
-        if (!is_string($url)) {
-            throw new CAS_InvalidArgumentException('$url must be a string.');
-        }
-
-        $this->_url = $url;
-    }
-
-    /*********************************************************
-     * 2. Send the Request
-     *********************************************************/
-
-    /**
-     * Perform the request.
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called multiple times.
-     * @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
-     *		The code of the Exception will be one of:
-     *			PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_FAILURE
-     * @throws CAS_ProxiedService_Exception If there is a failure sending the
-     * request to the target service.
-     */
-    public function send()
-    {
-        if ($this->hasBeenSent()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot send, request already sent.'
-            );
-        }
-
-        phpCAS::traceBegin();
-
-        // Get our proxy ticket and append it to our URL.
-        $this->initializeProxyTicket();
-        $url = $this->getServiceUrl();
-        if (strstr($url, '?') === false) {
-            $url = $url . '?ticket=' . $this->getProxyTicket();
-        } else {
-            $url = $url . '&ticket=' . $this->getProxyTicket();
-        }
-
-        try {
-            $this->makeRequest($url);
-        } catch (Exception $e) {
-            phpCAS::traceEnd();
-            throw $e;
-        }
-    }
-
-    /**
-     * Indicator of the number of requests (including redirects performed.
-     *
-     * @var int $_numRequests;
-     */
-    private $_numRequests = 0;
-
-    /**
-     * The response headers.
-     *
-     * @var array $_responseHeaders;
-     */
-    private $_responseHeaders = array();
-
-    /**
-     * The response status code.
-     *
-     * @var int $_responseStatusCode;
-     */
-    private $_responseStatusCode = '';
-
-    /**
-     * The response headers.
-     *
-     * @var string $_responseBody;
-     */
-    private $_responseBody = '';
-
-    /**
-     * Build and perform a request, following redirects
-     *
-     * @param string $url url for the request
-     *
-     * @return void
-     * @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
-     *		The code of the Exception will be one of:
-     *			PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_FAILURE
-     * @throws CAS_ProxiedService_Exception If there is a failure sending the
-     * request to the target service.
-     */
-    protected function makeRequest($url)
-    {
-        // Verify that we are not in a redirect loop
-        $this->_numRequests++;
-        if ($this->_numRequests > 4) {
-            $message = 'Exceeded the maximum number of redirects (3) in proxied service request.';
-            phpCAS::trace($message);
-            throw new CAS_ProxiedService_Exception($message);
-        }
-
-        // Create a new request.
-        $request = clone $this->requestHandler;
-        $request->setUrl($url);
-
-        // Add any cookies to the request.
-        $request->addCookies($this->_cookieJar->getCookies($url));
-
-        // Add any other parts of the request needed by concrete classes
-        $this->populateRequest($request);
-
-        // Perform the request.
-        phpCAS::trace('Performing proxied service request to \'' . $url . '\'');
-        if (!$request->send()) {
-            $message = 'Could not perform proxied service request to URL`'
-            . $url . '\'. ' . $request->getErrorMessage();
-            phpCAS::trace($message);
-            throw new CAS_ProxiedService_Exception($message);
-        }
-
-        // Store any cookies from the response;
-        $this->_cookieJar->storeCookies($url, $request->getResponseHeaders());
-
-        // Follow any redirects
-        if ($redirectUrl = $this->getRedirectUrl($request->getResponseHeaders())
-        ) {
-            phpCAS::trace('Found redirect:' . $redirectUrl);
-            $this->makeRequest($redirectUrl);
-        } else {
-
-            $this->_responseHeaders = $request->getResponseHeaders();
-            $this->_responseBody = $request->getResponseBody();
-            $this->_responseStatusCode = $request->getResponseStatusCode();
-        }
-    }
-
-    /**
-     * Add any other parts of the request needed by concrete classes
-     *
-     * @param CAS_Request_RequestInterface $request request interface object
-     *
-     * @return void
-     */
-    abstract protected function populateRequest(
-        CAS_Request_RequestInterface $request
-    );
-
-    /**
-     * Answer a redirect URL if a redirect header is found, otherwise null.
-     *
-     * @param array $responseHeaders response header to extract a redirect from
-     *
-     * @return string|null
-     */
-    protected function getRedirectUrl(array $responseHeaders)
-    {
-        // Check for the redirect after authentication
-        foreach ($responseHeaders as $header) {
-            if ( preg_match('/^(Location:|URI:)\s*([^\s]+.*)$/', $header, $matches)
-            ) {
-                return trim(array_pop($matches));
-            }
-        }
-        return null;
-    }
-
-    /*********************************************************
-     * 3. Access the response
-     *********************************************************/
-
-    /**
-     * Answer true if our request has been sent yet.
-     *
-     * @return bool
-     */
-    protected function hasBeenSent()
-    {
-        return ($this->_numRequests > 0);
-    }
-
-    /**
-     * Answer the headers of the response.
-     *
-     * @return array An array of header strings.
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseHeaders()
-    {
-        if (!$this->hasBeenSent()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot access response, request not sent yet.'
-            );
-        }
-
-        return $this->_responseHeaders;
-    }
-
-    /**
-     * Answer HTTP status code of the response
-     *
-     * @return int
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseStatusCode()
-    {
-        if (!$this->hasBeenSent()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot access response, request not sent yet.'
-            );
-        }
-
-        return $this->_responseStatusCode;
-    }
-
-    /**
-     * Answer the body of response.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseBody()
-    {
-        if (!$this->hasBeenSent()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot access response, request not sent yet.'
-            );
-        }
-
-        return $this->_responseBody;
-    }
-
-    /**
-     * Answer the cookies from the response. This may include cookies set during
-     * redirect responses.
-     *
-     * @return array An array containing cookies. E.g. array('name' => 'val');
-     */
-    public function getCookies()
-    {
-        return $this->_cookieJar->getCookies($this->getServiceUrl());
-    }
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Get.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Get.php
deleted file mode 100644
index a459d55ae972c24bca1df53fdf09a6e632af496e..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Get.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Http/Get.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class is used to make proxied service requests via the HTTP GET method.
- *
- * Usage Example:
- *
- *	try {
- *		$service = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_GET);
- *		$service->setUrl('http://www.example.com/path/');
- *		$service->send();
- *		if ($service->getResponseStatusCode() == 200)
- *			return $service->getResponseBody();
- *		else
- *			// The service responded with an error code 404, 500, etc.
- *			throw new Exception('The service responded with an error.');
- *
- * 	} catch (CAS_ProxyTicketException $e) {
- *	    if ($e->getCode() == PHPCAS_SERVICE_PT_FAILURE)
- *			return "Your login has timed out. You need to log in again.";
- *		else
- *			// Other proxy ticket errors are from bad request format
- *          // (shouldn't happen) or CAS server failure (unlikely)
- *          // so lets just stop if we hit those.
- *			throw $e;
- *	} catch (CAS_ProxiedService_Exception $e) {
- *		// Something prevented the service request from being sent or received.
- *		// We didn't even get a valid error response (404, 500, etc), so this
- *		// might be caused by a network error or a DNS resolution failure.
- *		// We could handle it in some way, but for now we will just stop.
- *		throw $e;
- *	}
- *
- * @class    CAS_ProxiedService_Http_Get
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_ProxiedService_Http_Get
-extends CAS_ProxiedService_Http_Abstract
-{
-
-    /**
-     * Add any other parts of the request needed by concrete classes
-     *
-     * @param CAS_Request_RequestInterface $request request interface
-     *
-     * @return void
-     */
-    protected function populateRequest (CAS_Request_RequestInterface $request)
-    {
-        // do nothing, since the URL has already been sent and that is our
-        // only data.
-    }
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Post.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Post.php
deleted file mode 100644
index 344c4398782228a30231c1895a567f4f3539ab70..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Http/Post.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Http/Post.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This class is used to make proxied service requests via the HTTP POST method.
- *
- * Usage Example:
- *
- *	try {
- * 		$service = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_POST);
- * 		$service->setUrl('http://www.example.com/path/');
- *		$service->setContentType('text/xml');
- *		$service->setBody('<?xml version="1.0"?'.'><methodCall><methodName>example.search</methodName></methodCall>');
- * 		$service->send();
- *		if ($service->getResponseStatusCode() == 200)
- *			return $service->getResponseBody();
- *		else
- *			// The service responded with an error code 404, 500, etc.
- *			throw new Exception('The service responded with an error.');
- *
- *	} catch (CAS_ProxyTicketException $e) {
- *		if ($e->getCode() == PHPCAS_SERVICE_PT_FAILURE)
- *			return "Your login has timed out. You need to log in again.";
- *		else
- *			// Other proxy ticket errors are from bad request format
- *          // (shouldn't happen) or CAS server failure (unlikely) so lets just
- *          // stop if we hit those.
- *			throw $e;
- *	} catch (CAS_ProxiedService_Exception $e) {
- *		// Something prevented the service request from being sent or received.
- *		// We didn't even get a valid error response (404, 500, etc), so this
- *		// might be caused by a network error or a DNS resolution failure.
- *		// We could handle it in some way, but for now we will just stop.
- *		throw $e;
- *	}
- *
- * @class    CAS_ProxiedService_Http_Post
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_ProxiedService_Http_Post
-extends CAS_ProxiedService_Http_Abstract
-{
-
-    /**
-     * The content-type of this request
-     *
-     * @var string $_contentType
-     */
-    private $_contentType;
-
-    /**
-     * The body of the this request
-     *
-     * @var string $_body
-     */
-    private $_body;
-
-    /**
-     * Set the content type of this POST request.
-     *
-     * @param string $contentType content type
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setContentType ($contentType)
-    {
-        if ($this->hasBeenSent()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot set the content type, request already sent.'
-            );
-        }
-
-        $this->_contentType = $contentType;
-    }
-
-    /**
-     * Set the body of this POST request.
-     *
-     * @param string $body body to set
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setBody ($body)
-    {
-        if ($this->hasBeenSent()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot set the body, request already sent.'
-            );
-        }
-
-        $this->_body = $body;
-    }
-
-    /**
-     * Add any other parts of the request needed by concrete classes
-     *
-     * @param CAS_Request_RequestInterface $request request interface class
-     *
-     * @return void
-     */
-    protected function populateRequest (CAS_Request_RequestInterface $request)
-    {
-        if (empty($this->_contentType) && !empty($this->_body)) {
-            throw new CAS_ProxiedService_Exception(
-                "If you pass a POST body, you must specify a content type via "
-                .get_class($this).'->setContentType($contentType).'
-            );
-        }
-
-        $request->makePost();
-        if (!empty($this->_body)) {
-            $request->addHeader('Content-Type: '.$this->_contentType);
-            $request->addHeader('Content-Length: '.strlen($this->_body));
-            $request->setPostBody($this->_body);
-        }
-    }
-
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Imap.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Imap.php
deleted file mode 100644
index c4b47401dd706df1e4335b8c5c1ba78e132ddb05..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Imap.php
+++ /dev/null
@@ -1,281 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Imap.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Provides access to a proxy-authenticated IMAP stream
- *
- * @class    CAS_ProxiedService_Imap
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_ProxiedService_Imap
-extends CAS_ProxiedService_Abstract
-{
-
-    /**
-     * The username to send via imap_open.
-     *
-     * @var string $_username;
-     */
-    private $_username;
-
-    /**
-     * Constructor.
-     *
-     * @param string $username Username
-     *
-     * @return void
-     */
-    public function __construct ($username)
-    {
-        if (!is_string($username) || !strlen($username)) {
-            throw new CAS_InvalidArgumentException('Invalid username.');
-        }
-
-        $this->_username = $username;
-    }
-
-    /**
-     * The target service url.
-     * @var string $_url;
-     */
-    private $_url;
-
-    /**
-     * Answer a service identifier (URL) for whom we should fetch a proxy ticket.
-     *
-     * @return string
-     * @throws Exception If no service url is available.
-     */
-    public function getServiceUrl ()
-    {
-        if (empty($this->_url)) {
-            throw new CAS_ProxiedService_Exception(
-                'No URL set via '.get_class($this).'->getServiceUrl($url).'
-            );
-        }
-
-        return $this->_url;
-    }
-
-    /*********************************************************
-     * Configure the Stream
-    *********************************************************/
-
-    /**
-     * Set the URL of the service to pass to CAS for proxy-ticket retrieval.
-     *
-     * @param string $url Url to set
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the stream has been opened.
-     */
-    public function setServiceUrl ($url)
-    {
-        if ($this->hasBeenOpened()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot set the URL, stream already opened.'
-            );
-        }
-        if (!is_string($url) || !strlen($url)) {
-            throw new CAS_InvalidArgumentException('Invalid url.');
-        }
-
-        $this->_url = $url;
-    }
-
-    /**
-     * The mailbox to open. See the $mailbox parameter of imap_open().
-     *
-     * @var string $_mailbox
-     */
-    private $_mailbox;
-
-    /**
-     * Set the mailbox to open. See the $mailbox parameter of imap_open().
-     *
-     * @param string $mailbox Mailbox to set
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the stream has been opened.
-     */
-    public function setMailbox ($mailbox)
-    {
-        if ($this->hasBeenOpened()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot set the mailbox, stream already opened.'
-            );
-        }
-        if (!is_string($mailbox) || !strlen($mailbox)) {
-            throw new CAS_InvalidArgumentException('Invalid mailbox.');
-        }
-
-        $this->_mailbox = $mailbox;
-    }
-
-    /**
-     * A bit mask of options to pass to imap_open() as the $options parameter.
-     *
-     * @var int $_options
-     */
-    private $_options = null;
-
-    /**
-     * Set the options for opening the stream. See the $options parameter of
-     * imap_open().
-     *
-     * @param int $options Options for the stream
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the stream has been opened.
-     */
-    public function setOptions ($options)
-    {
-        if ($this->hasBeenOpened()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot set options, stream already opened.'
-            );
-        }
-        if (!is_int($options)) {
-            throw new CAS_InvalidArgumentException('Invalid options.');
-        }
-
-        $this->_options = $options;
-    }
-
-    /*********************************************************
-     * 2. Open the stream
-    *********************************************************/
-
-    /**
-     * Open the IMAP stream (similar to imap_open()).
-     *
-     * @return resource Returns an IMAP stream on success
-     * @throws CAS_OutOfSequenceException If called multiple times.
-     * @throws CAS_ProxyTicketException If there is a proxy-ticket failure.
-     *		The code of the Exception will be one of:
-     *			PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE
-     *			PHPCAS_SERVICE_PT_FAILURE
-     * @throws CAS_ProxiedService_Exception If there is a failure sending the
-     *         request to the target service.
-     */
-    public function open ()
-    {
-        if ($this->hasBeenOpened()) {
-            throw new CAS_OutOfSequenceException('Stream already opened.');
-        }
-        if (empty($this->_mailbox)) {
-            throw new CAS_ProxiedService_Exception(
-                'You must specify a mailbox via '.get_class($this)
-                .'->setMailbox($mailbox)'
-            );
-        }
-
-        phpCAS::traceBegin();
-
-        // Get our proxy ticket and append it to our URL.
-        $this->initializeProxyTicket();
-        phpCAS::trace('opening IMAP mailbox `'.$this->_mailbox.'\'...');
-        $this->_stream = @imap_open(
-            $this->_mailbox, $this->_username, $this->getProxyTicket(),
-            $this->_options
-        );
-        if ($this->_stream) {
-            phpCAS::trace('ok');
-        } else {
-            phpCAS::trace('could not open mailbox');
-            // @todo add localization integration.
-            $message = 'IMAP Error: '.$this->_url.' '. var_export(imap_errors(), true);
-            phpCAS::trace($message);
-            throw new CAS_ProxiedService_Exception($message);
-        }
-
-        phpCAS::traceEnd();
-        return $this->_stream;
-    }
-
-    /**
-     * Answer true if our request has been sent yet.
-     *
-     * @return bool
-     */
-    protected function hasBeenOpened ()
-    {
-        return !empty($this->_stream);
-    }
-
-    /*********************************************************
-     * 3. Access the result
-    *********************************************************/
-    /**
-     * The IMAP stream
-     *
-     * @var resource $_stream
-     */
-    private $_stream;
-
-    /**
-     * Answer the IMAP stream
-     *
-     * @return resource
-     * @throws CAS_OutOfSequenceException if stream is not opened yet
-     */
-    public function getStream ()
-    {
-        if (!$this->hasBeenOpened()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot access stream, not opened yet.'
-            );
-        }
-        return $this->_stream;
-    }
-
-    /**
-     * CAS_Client::serviceMail() needs to return the proxy ticket for some reason,
-     * so this method provides access to it.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before the stream has been
-     * opened.
-     */
-    public function getImapProxyTicket ()
-    {
-        if (!$this->hasBeenOpened()) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot access errors, stream not opened yet.'
-            );
-        }
-        return $this->getProxyTicket();
-    }
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxiedService/Testable.php b/vendor/jasig/phpcas/source/CAS/ProxiedService/Testable.php
deleted file mode 100644
index 3ce44fd16c18b69cedf160ff84f22069233845e2..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxiedService/Testable.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxiedService/Testabel.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This interface defines methods that allow proxy-authenticated service handlers
- * to be tested in unit tests.
- *
- * Classes implementing this interface SHOULD store the CAS_Client passed and
- * initialize themselves with that client rather than via the static phpCAS
- * method. For example:
- *
- *		/ **
- *		 * Fetch our proxy ticket.
- *		 * /
- *		protected function initializeProxyTicket() {
- *			// Allow usage of a particular CAS_Client for unit testing.
- *			if (is_null($this->casClient))
- *				phpCAS::initializeProxiedService($this);
- *			else
- *				$this->casClient->initializeProxiedService($this);
- *		}
- *
- * @class    CAS_ProxiedService_Testabel
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-interface CAS_ProxiedService_Testable
-{
-
-    /**
-     * Use a particular CAS_Client->initializeProxiedService() rather than the
-     * static phpCAS::initializeProxiedService().
-     *
-     * This method should not be called in standard operation, but is needed for unit
-     * testing.
-     *
-     * @param CAS_Client $casClient Cas client object
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after a proxy ticket has
-     *         already been initialized/set.
-     */
-    public function setCasClient (CAS_Client $casClient);
-
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxyChain.php b/vendor/jasig/phpcas/source/CAS/ProxyChain.php
deleted file mode 100644
index e200724cef45bcc94cf6ce136a88fbdc78e32e85..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxyChain.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxyChain.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * A normal proxy-chain definition that lists each level of the chain as either
- * a string or regular expression.
- *
- * @class    CAS_ProxyChain
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-class CAS_ProxyChain
-implements CAS_ProxyChain_Interface
-{
-
-    protected $chain = array();
-
-    /**
-     * A chain is an array of strings or regexp strings that will be matched
-     * against. Regexp will be matched with preg_match and strings will be
-     * matched from the beginning. A string must fully match the beginning of
-     * an proxy url. So you can define a full domain as acceptable or go further
-     * down.
-     * Proxies have to be defined in reverse from the service to the user. If a
-     * user hits service A get proxied via B to service C the list of acceptable
-     * proxies on C would be array(B,A);
-     *
-     * @param array $chain A chain of proxies
-     */
-    public function __construct(array $chain)
-    {
-        // Ensure that we have an indexed array
-        $this->chain = array_values($chain);
-    }
-
-    /**
-     * Match a list of proxies.
-     *
-     * @param array $list The list of proxies in front of this service.
-     *
-     * @return bool
-     */
-    public function matches(array $list)
-    {
-        $list = array_values($list);  // Ensure that we have an indexed array
-        if ($this->isSizeValid($list)) {
-            $mismatch = false;
-            foreach ($this->chain as $i => $search) {
-                $proxy_url = $list[$i];
-                if (preg_match('/^\/.*\/[ixASUXu]*$/s', $search)) {
-                    if (preg_match($search, $proxy_url)) {
-                        phpCAS::trace(
-                            "Found regexp " .  $search . " matching " . $proxy_url
-                        );
-                    } else {
-                        phpCAS::trace(
-                            "No regexp match " .  $search . " != " . $proxy_url
-                        );
-                        $mismatch = true;
-                        break;
-                    }
-                } else {
-                    if (strncasecmp($search, $proxy_url, strlen($search)) == 0) {
-                        phpCAS::trace(
-                            "Found string " .  $search . " matching " . $proxy_url
-                        );
-                    } else {
-                        phpCAS::trace(
-                            "No match " .  $search . " != " . $proxy_url
-                        );
-                        $mismatch = true;
-                        break;
-                    }
-                }
-            }
-            if (!$mismatch) {
-                phpCAS::trace("Proxy chain matches");
-                return true;
-            }
-        } else {
-            phpCAS::trace("Proxy chain skipped: size mismatch");
-        }
-        return false;
-    }
-
-    /**
-     * Validate the size of the the list as compared to our chain.
-     *
-     * @param array $list List of proxies
-     *
-     * @return bool
-     */
-    protected function isSizeValid (array $list)
-    {
-        return (sizeof($this->chain) == sizeof($list));
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/ProxyChain/AllowedList.php b/vendor/jasig/phpcas/source/CAS/ProxyChain/AllowedList.php
deleted file mode 100644
index 988ddbb3c35e8fa2abea818375ae88d4c59c4e08..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxyChain/AllowedList.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxyChain/AllowedList.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-
-/**
- * ProxyChain is a container for storing chains of valid proxies that can
- * be used to validate proxied requests to a service
- *
- * @class    CAS_ProxyChain_AllowedList
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-class CAS_ProxyChain_AllowedList
-{
-
-    private $_chains = array();
-
-    /**
-     * Check whether proxies are allowed by configuration
-     *
-     * @return bool
-     */
-    public function isProxyingAllowed()
-    {
-        return (count($this->_chains) > 0);
-    }
-
-    /**
-     * Add a chain of proxies to the list of possible chains
-     *
-     * @param CAS_ProxyChain_Interface $chain A chain of proxies
-     *
-     * @return void
-     */
-    public function allowProxyChain(CAS_ProxyChain_Interface $chain)
-    {
-        $this->_chains[] = $chain;
-    }
-
-    /**
-     * Check if the proxies found in the response match the allowed proxies
-     *
-     * @param array $proxies list of proxies to check
-     *
-     * @return bool whether the proxies match the allowed proxies
-     */
-    public function isProxyListAllowed(array $proxies)
-    {
-        phpCAS::traceBegin();
-        if (empty($proxies)) {
-            phpCAS::trace("No proxies were found in the response");
-            phpCAS::traceEnd(true);
-            return true;
-        } elseif (!$this->isProxyingAllowed()) {
-            phpCAS::trace("Proxies are not allowed");
-            phpCAS::traceEnd(false);
-            return false;
-        } else {
-            $res = $this->contains($proxies);
-            phpCAS::traceEnd($res);
-            return $res;
-        }
-    }
-
-    /**
-     * Validate the proxies from the proxy ticket validation against the
-     * chains that were definded.
-     *
-     * @param array $list List of proxies from the proxy ticket validation.
-     *
-     * @return bool if any chain fully matches the supplied list
-     */
-    public function contains(array $list)
-    {
-        phpCAS::traceBegin();
-        $count = 0;
-        foreach ($this->_chains as $chain) {
-            phpCAS::trace("Checking chain ". $count++);
-            if ($chain->matches($list)) {
-                phpCAS::traceEnd(true);
-                return true;
-            }
-        }
-        phpCAS::trace("No proxy chain matches.");
-        phpCAS::traceEnd(false);
-        return false;
-    }
-}
-?>
diff --git a/vendor/jasig/phpcas/source/CAS/ProxyChain/Any.php b/vendor/jasig/phpcas/source/CAS/ProxyChain/Any.php
deleted file mode 100644
index fe18c5fbf15f3cc0ac0df305b1d01b35d4b81815..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxyChain/Any.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxyChain/Any.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * A proxy-chain definition that will match any list of proxies.
- *
- * Use this class for quick testing or in certain production screnarios you
- * might want to allow allow any other valid service to proxy your service.
- *
- * THIS CLASS IS HOWEVER NOT RECOMMENDED FOR PRODUCTION AND HAS SECURITY
- * IMPLICATIONS: YOU ARE ALLOWING ANY SERVICE TO ACT ON BEHALF OF A USER
- * ON THIS SERVICE.
- *
- * @class    CAS_ProxyChain_Any
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_ProxyChain_Any
-implements CAS_ProxyChain_Interface
-{
-
-    /**
-     * Match a list of proxies.
-     *
-     * @param array $list The list of proxies in front of this service.
-     *
-     * @return bool
-     */
-    public function matches(array $list)
-    {
-        phpCAS::trace("Using CAS_ProxyChain_Any. No proxy validation is performed.");
-        return true;
-    }
-
-}
diff --git a/vendor/jasig/phpcas/source/CAS/ProxyChain/Interface.php b/vendor/jasig/phpcas/source/CAS/ProxyChain/Interface.php
deleted file mode 100644
index b1d6881747dd28036222f1588011a2f793fbe056..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxyChain/Interface.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxyChain/Interface.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * An interface for classes that define a list of allowed proxies in front of
- * the current application.
- *
- * @class    CAS_ProxyChain_Interface
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-interface CAS_ProxyChain_Interface
-{
-
-    /**
-     * Match a list of proxies.
-     *
-     * @param array $list The list of proxies in front of this service.
-     *
-     * @return bool
-     */
-    public function matches(array $list);
-
-}
diff --git a/vendor/jasig/phpcas/source/CAS/ProxyChain/Trusted.php b/vendor/jasig/phpcas/source/CAS/ProxyChain/Trusted.php
deleted file mode 100644
index e67d70852a564631368d535d056a65d876fb35c1..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxyChain/Trusted.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/ProxyChain/Trusted.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * A proxy-chain definition that defines a chain up to a trusted proxy and
- * delegates the resposibility of validating the rest of the chain to that
- * trusted proxy.
- *
- * @class    CAS_ProxyChain_Trusted
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_ProxyChain_Trusted
-extends CAS_ProxyChain
-implements CAS_ProxyChain_Interface
-{
-
-    /**
-     * Validate the size of the the list as compared to our chain.
-     *
-     * @param array $list list of proxies
-     *
-     * @return bool
-     */
-    protected function isSizeValid (array $list)
-    {
-        return (sizeof($this->chain) <= sizeof($list));
-    }
-
-}
diff --git a/vendor/jasig/phpcas/source/CAS/ProxyTicketException.php b/vendor/jasig/phpcas/source/CAS/ProxyTicketException.php
deleted file mode 100644
index 2f825b421c238573b19beb5b9b9218efc4f18347..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/ProxyTicketException.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @class    CAS/ProxyTicketException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- *
- */
-
-/**
- * An Exception for errors related to fetching or validating proxy tickets.
- *
- * @class    CAS_ProxyTicketException
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_ProxyTicketException
-extends BadMethodCallException
-implements CAS_Exception
-{
-
-    /**
-     * Constructor
-     *
-     * @param string $message Message text
-     * @param int    $code    Error code
-     *
-     * @return void
-     */
-    public function __construct ($message, $code = PHPCAS_SERVICE_PT_FAILURE)
-    {
-        // Warn if the code is not in our allowed list
-        $ptCodes = array(
-        PHPCAS_SERVICE_PT_FAILURE,
-        PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE,
-        PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
-        );
-        if (!in_array($code, $ptCodes)) {
-            trigger_error(
-                'Invalid code '.$code
-                .' passed. Must be one of PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, or PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE.'
-            );
-        }
-
-        parent::__construct($message, $code);
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Request/AbstractRequest.php b/vendor/jasig/phpcas/source/CAS/Request/AbstractRequest.php
deleted file mode 100644
index 4f9013ee2cc2125d1044edeefa1db304a06c4928..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Request/AbstractRequest.php
+++ /dev/null
@@ -1,380 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Request/AbstractRequest.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Provides support for performing web-requests via curl
- *
- * @class    CAS_Request_AbstractRequest
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-abstract class CAS_Request_AbstractRequest
-implements CAS_Request_RequestInterface
-{
-
-    protected $url = null;
-    protected $cookies = array();
-    protected $headers = array();
-    protected $isPost = false;
-    protected $postBody = null;
-    protected $caCertPath = null;
-    protected $validateCN = true;
-    private $_sent = false;
-    private $_responseHeaders = array();
-    private $_responseBody = null;
-    private $_errorMessage = '';
-
-    /*********************************************************
-     * Configure the Request
-    *********************************************************/
-
-    /**
-     * Set the URL of the Request
-     *
-     * @param string $url Url to set
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setUrl ($url)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-
-        $this->url = $url;
-    }
-
-    /**
-     * Add a cookie to the request.
-     *
-     * @param string $name  Name of entry
-     * @param string $value value of entry
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addCookie ($name, $value)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-
-        $this->cookies[$name] = $value;
-    }
-
-    /**
-     * Add an array of cookies to the request.
-     * The cookie array is of the form
-     *     array('cookie_name' => 'cookie_value', 'cookie_name2' => cookie_value2')
-     *
-     * @param array $cookies cookies to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addCookies (array $cookies)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-
-        $this->cookies = array_merge($this->cookies, $cookies);
-    }
-
-    /**
-     * Add a header string to the request.
-     *
-     * @param string $header Header to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addHeader ($header)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-
-        $this->headers[] = $header;
-    }
-
-    /**
-     * Add an array of header strings to the request.
-     *
-     * @param array $headers headers to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addHeaders (array $headers)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-
-        $this->headers = array_merge($this->headers, $headers);
-    }
-
-    /**
-     * Make the request a POST request rather than the default GET request.
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function makePost ()
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-
-        $this->isPost = true;
-    }
-
-    /**
-     * Add a POST body to the request
-     *
-     * @param string $body body to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setPostBody ($body)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-        if (!$this->isPost) {
-            throw new CAS_OutOfSequenceException(
-                'Cannot add a POST body to a GET request, use makePost() first.'
-            );
-        }
-
-        $this->postBody = $body;
-    }
-
-    /**
-     * Specify the path to an SSL CA certificate to validate the server with.
-     *
-     * @param string $caCertPath  path to cert
-     * @param bool   $validate_cn valdiate CN of certificate
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setSslCaCert ($caCertPath,$validate_cn=true)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-        $this->caCertPath = $caCertPath;
-        $this->validateCN = $validate_cn;
-    }
-
-    /*********************************************************
-     * 2. Send the Request
-    *********************************************************/
-
-    /**
-     * Perform the request.
-     *
-     * @return bool TRUE on success, FALSE on failure.
-     * @throws CAS_OutOfSequenceException If called multiple times.
-     */
-    public function send ()
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot send again.'
-            );
-        }
-        if (is_null($this->url) || !$this->url) {
-            throw new CAS_OutOfSequenceException(
-                'A url must be specified via setUrl() before the request can be sent.'
-            );
-        }
-        $this->_sent = true;
-        return $this->sendRequest();
-    }
-
-    /**
-     * Send the request and store the results.
-     *
-     * @return bool TRUE on success, FALSE on failure.
-     */
-    abstract protected function sendRequest ();
-
-    /**
-     * Store the response headers.
-     *
-     * @param array $headers headers to store
-     *
-     * @return void
-     */
-    protected function storeResponseHeaders (array $headers)
-    {
-        $this->_responseHeaders = array_merge($this->_responseHeaders, $headers);
-    }
-
-    /**
-     * Store a single response header to our array.
-     *
-     * @param string $header header to store
-     *
-     * @return void
-     */
-    protected function storeResponseHeader ($header)
-    {
-        $this->_responseHeaders[] = $header;
-    }
-
-    /**
-     * Store the response body.
-     *
-     * @param string $body body to store
-     *
-     * @return void
-     */
-    protected function storeResponseBody ($body)
-    {
-        $this->_responseBody = $body;
-    }
-
-    /**
-     * Add a string to our error message.
-     *
-     * @param string $message message to add
-     *
-     * @return void
-     */
-    protected function storeErrorMessage ($message)
-    {
-        $this->_errorMessage .= $message;
-    }
-
-    /*********************************************************
-     * 3. Access the response
-    *********************************************************/
-
-    /**
-     * Answer the headers of the response.
-     *
-     * @return array An array of header strings.
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseHeaders ()
-    {
-        if (!$this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has not been sent yet. Cannot '.__METHOD__
-            );
-        }
-        return $this->_responseHeaders;
-    }
-
-    /**
-     * Answer HTTP status code of the response
-     *
-     * @return int
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     * @throws CAS_Request_Exception if the response did not contain a status code
-     */
-    public function getResponseStatusCode ()
-    {
-        if (!$this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has not been sent yet. Cannot '.__METHOD__
-            );
-        }
-
-        if (!preg_match(
-            '/HTTP\/[0-9.]+\s+([0-9]+)\s*(.*)/',
-            $this->_responseHeaders[0], $matches
-        )
-        ) {
-            throw new CAS_Request_Exception(
-                'Bad response, no status code was found in the first line.'
-            );
-        }
-
-        return intval($matches[1]);
-    }
-
-    /**
-     * Answer the body of response.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseBody ()
-    {
-        if (!$this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has not been sent yet. Cannot '.__METHOD__
-            );
-        }
-
-        return $this->_responseBody;
-    }
-
-    /**
-     * Answer a message describing any errors if the request failed.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getErrorMessage ()
-    {
-        if (!$this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has not been sent yet. Cannot '.__METHOD__
-            );
-        }
-        return $this->_errorMessage;
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Request/CurlMultiRequest.php b/vendor/jasig/phpcas/source/CAS/Request/CurlMultiRequest.php
deleted file mode 100644
index 850f6f0e4a680e2bdf975c088ea2752253df85f7..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Request/CurlMultiRequest.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Request/AbstractRequest.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This interface defines a class library for performing multiple web requests
- * in batches. Implementations of this interface may perform requests serially
- * or in parallel.
- *
- * @class    CAS_Request_CurlMultiRequest
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_Request_CurlMultiRequest
-implements CAS_Request_MultiRequestInterface
-{
-    private $_requests = array();
-    private $_sent = false;
-
-    /*********************************************************
-     * Add Requests
-    *********************************************************/
-
-    /**
-     * Add a new Request to this batch.
-     * Note, implementations will likely restrict requests to their own concrete
-     * class hierarchy.
-     *
-     * @param CAS_Request_RequestInterface $request reqest to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     * @throws CAS_InvalidArgumentException If passed a Request of the wrong
-     * implmentation.
-     */
-    public function addRequest (CAS_Request_RequestInterface $request)
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-        if (!$request instanceof CAS_Request_CurlRequest) {
-            throw new CAS_InvalidArgumentException(
-                'As a CAS_Request_CurlMultiRequest, I can only work with CAS_Request_CurlRequest objects.'
-            );
-        }
-
-        $this->_requests[] = $request;
-    }
-
-    /**
-     * Retrieve the number of requests added to this batch.
-     *
-     * @return int number of request elements
-     * @throws CAS_OutOfSequenceException if the request has already been sent
-     */
-    public function getNumRequests()
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot '.__METHOD__
-            );
-        }
-        return count($this->_requests);
-    }
-
-    /*********************************************************
-     * 2. Send the Request
-    *********************************************************/
-
-    /**
-     * Perform the request. After sending, all requests will have their
-     * responses poulated.
-     *
-     * @return bool TRUE on success, FALSE on failure.
-     * @throws CAS_OutOfSequenceException If called multiple times.
-     */
-    public function send ()
-    {
-        if ($this->_sent) {
-            throw new CAS_OutOfSequenceException(
-                'Request has already been sent cannot send again.'
-            );
-        }
-        if (!count($this->_requests)) {
-            throw new CAS_OutOfSequenceException(
-                'At least one request must be added via addRequest() before the multi-request can be sent.'
-            );
-        }
-
-        $this->_sent = true;
-
-        // Initialize our handles and configure all requests.
-        $handles = array();
-        $multiHandle = curl_multi_init();
-        foreach ($this->_requests as $i => $request) {
-            $handle = $request->initAndConfigure();
-            curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
-            $handles[$i] = $handle;
-            curl_multi_add_handle($multiHandle, $handle);
-        }
-
-        // Execute the requests in parallel.
-        do {
-            curl_multi_exec($multiHandle, $running);
-        } while ($running > 0);
-
-        // Populate all of the responses or errors back into the request objects.
-        foreach ($this->_requests as $i => $request) {
-            $buf = curl_multi_getcontent($handles[$i]);
-            $request->_storeResponseBody($buf);
-            curl_multi_remove_handle($multiHandle, $handles[$i]);
-            curl_close($handles[$i]);
-        }
-
-        curl_multi_close($multiHandle);
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Request/CurlRequest.php b/vendor/jasig/phpcas/source/CAS/Request/CurlRequest.php
deleted file mode 100644
index 3eaa0d3c16bfba4d4ff4fa05e4f512effda608d4..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Request/CurlRequest.php
+++ /dev/null
@@ -1,193 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Request/CurlRequest.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Provides support for performing web-requests via curl
- *
- * @class    CAS_Request_CurlRequest
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_Request_CurlRequest
-extends CAS_Request_AbstractRequest
-implements CAS_Request_RequestInterface
-{
-
-    /**
-     * Set additional curl options
-     *
-     * @param array $options option to set
-     *
-     * @return void
-     */
-    public function setCurlOptions (array $options)
-    {
-        $this->_curlOptions = $options;
-    }
-    private $_curlOptions = array();
-
-    /**
-     * Send the request and store the results.
-     *
-     * @return bool true on success, false on failure.
-     */
-    protected function sendRequest ()
-    {
-        phpCAS::traceBegin();
-
-        /*********************************************************
-         * initialize the CURL session
-        *********************************************************/
-        $ch = $this->initAndConfigure();
-
-        /*********************************************************
-         * Perform the query
-        *********************************************************/
-        $buf = curl_exec($ch);
-        if ( $buf === false ) {
-            phpCAS::trace('curl_exec() failed');
-            $this->storeErrorMessage(
-                'CURL error #'.curl_errno($ch).': '.curl_error($ch)
-            );
-            $res = false;
-        } else {
-            $this->storeResponseBody($buf);
-            phpCAS::trace("Response Body: \n".$buf."\n");
-            $res = true;
-
-        }
-        // close the CURL session
-        curl_close($ch);
-
-        phpCAS::traceEnd($res);
-        return $res;
-    }
-
-    /**
-     * Internal method to initialize our cURL handle and configure the request.
-     * This method should NOT be used outside of the CurlRequest or the
-     * CurlMultiRequest.
-     *
-     * @return resource|false The cURL handle on success, false on failure
-     */
-    public function initAndConfigure()
-    {
-        /*********************************************************
-         * initialize the CURL session
-        *********************************************************/
-        $ch = curl_init($this->url);
-
-        curl_setopt_array($ch, $this->_curlOptions);
-
-        /*********************************************************
-         * Set SSL configuration
-        *********************************************************/
-        if ($this->caCertPath) {
-            if ($this->validateCN) {
-                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
-            } else {
-                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
-            }
-            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
-            curl_setopt($ch, CURLOPT_CAINFO, $this->caCertPath);
-            phpCAS::trace('CURL: Set CURLOPT_CAINFO ' . $this->caCertPath);
-        } else {
-            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
-        }
-
-        /*********************************************************
-         * Configure curl to capture our output.
-        *********************************************************/
-        // return the CURL output into a variable
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
-        // get the HTTP header with a callback
-        curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, '_curlReadHeaders'));
-
-        /*********************************************************
-         * Add cookie headers to our request.
-        *********************************************************/
-        if (count($this->cookies)) {
-            $cookieStrings = array();
-            foreach ($this->cookies as $name => $val) {
-                $cookieStrings[] = $name.'='.$val;
-            }
-            curl_setopt($ch, CURLOPT_COOKIE, implode(';', $cookieStrings));
-        }
-
-        /*********************************************************
-         * Add any additional headers
-        *********************************************************/
-        if (count($this->headers)) {
-            curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
-        }
-
-        /*********************************************************
-         * Flag and Body for POST requests
-        *********************************************************/
-        if ($this->isPost) {
-            curl_setopt($ch, CURLOPT_POST, 1);
-            curl_setopt($ch, CURLOPT_POSTFIELDS, $this->postBody);
-        }
-
-        return $ch;
-    }
-
-    /**
-     * Store the response body.
-     * This method should NOT be used outside of the CurlRequest or the
-     * CurlMultiRequest.
-     *
-     * @param string $body body to stor
-     *
-     * @return void
-     */
-    public function _storeResponseBody ($body)
-    {
-        $this->storeResponseBody($body);
-    }
-
-    /**
-     * Internal method for capturing the headers from a curl request.
-     *
-     * @param resource $ch     handle of curl
-     * @param string $header header
-     *
-     * @return int
-     */
-    public function _curlReadHeaders ($ch, $header)
-    {
-        $this->storeResponseHeader($header);
-        return strlen($header);
-    }
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Request/Exception.php b/vendor/jasig/phpcas/source/CAS/Request/Exception.php
deleted file mode 100644
index dd5a2a55a5f93b7e501169b197bcc69d6cd7891d..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Request/Exception.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Request/Exception.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * An Exception for problems performing requests
- *
- * @class    CAS_Request_Exception
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_Request_Exception
-extends Exception
-implements CAS_Exception
-{
-
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Request/MultiRequestInterface.php b/vendor/jasig/phpcas/source/CAS/Request/MultiRequestInterface.php
deleted file mode 100644
index 41002c7776cf30cdcc8e527e8d6d7c5abcfcb941..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Request/MultiRequestInterface.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Request/MultiRequestInterface.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This interface defines a class library for performing multiple web requests
- * in batches. Implementations of this interface may perform requests serially
- * or in parallel.
- *
- * @class    CAS_Request_MultiRequestInterface
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-interface CAS_Request_MultiRequestInterface
-{
-
-    /*********************************************************
-     * Add Requests
-    *********************************************************/
-
-    /**
-     * Add a new Request to this batch.
-     * Note, implementations will likely restrict requests to their own concrete
-     * class hierarchy.
-     *
-     * @param CAS_Request_RequestInterface $request request interface
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been
-     * sent.
-     * @throws CAS_InvalidArgumentException If passed a Request of the wrong
-     * implmentation.
-     */
-    public function addRequest (CAS_Request_RequestInterface $request);
-
-    /**
-     * Retrieve the number of requests added to this batch.
-     *
-     * @return int number of request elements
-     */
-    public function getNumRequests ();
-
-    /*********************************************************
-     * 2. Send the Request
-    *********************************************************/
-
-    /**
-     * Perform the request. After sending, all requests will have their
-     * responses poulated.
-     *
-     * @return bool TRUE on success, FALSE on failure.
-     * @throws CAS_OutOfSequenceException If called multiple times.
-     */
-    public function send ();
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Request/RequestInterface.php b/vendor/jasig/phpcas/source/CAS/Request/RequestInterface.php
deleted file mode 100644
index b8e8772e938fb5232f823bf94cbbba51eaa6e7b3..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Request/RequestInterface.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/Request/RequestInterface.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * This interface defines a class library for performing web requests.
- *
- * @class    CAS_Request_RequestInterface
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-interface CAS_Request_RequestInterface
-{
-
-    /*********************************************************
-     * Configure the Request
-    *********************************************************/
-
-    /**
-     * Set the URL of the Request
-     *
-     * @param string $url url to set
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setUrl ($url);
-
-    /**
-     * Add a cookie to the request.
-     *
-     * @param string $name  name of cookie
-     * @param string $value value of cookie
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addCookie ($name, $value);
-
-    /**
-     * Add an array of cookies to the request.
-     * The cookie array is of the form
-     *     array('cookie_name' => 'cookie_value', 'cookie_name2' => cookie_value2')
-     *
-     * @param array $cookies cookies to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addCookies (array $cookies);
-
-    /**
-     * Add a header string to the request.
-     *
-     * @param string $header header to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addHeader ($header);
-
-    /**
-     * Add an array of header strings to the request.
-     *
-     * @param array $headers headers to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function addHeaders (array $headers);
-
-    /**
-     * Make the request a POST request rather than the default GET request.
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function makePost ();
-
-    /**
-     * Add a POST body to the request
-     *
-     * @param string $body body to add
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setPostBody ($body);
-
-
-    /**
-     * Specify the path to an SSL CA certificate to validate the server with.
-     *
-     * @param string  $caCertPath  path to cert file
-     * @param boolean $validate_cn validate CN of SSL certificate
-     *
-     * @return void
-     * @throws CAS_OutOfSequenceException If called after the Request has been sent.
-     */
-    public function setSslCaCert ($caCertPath, $validate_cn = true);
-
-
-
-    /*********************************************************
-     * 2. Send the Request
-    *********************************************************/
-
-    /**
-     * Perform the request.
-     *
-     * @return bool TRUE on success, FALSE on failure.
-     * @throws CAS_OutOfSequenceException If called multiple times.
-     */
-    public function send ();
-
-    /*********************************************************
-     * 3. Access the response
-    *********************************************************/
-
-    /**
-     * Answer the headers of the response.
-     *
-     * @return array An array of header strings.
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseHeaders ();
-
-    /**
-     * Answer HTTP status code of the response
-     *
-     * @return int
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseStatusCode ();
-
-    /**
-     * Answer the body of response.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getResponseBody ();
-
-    /**
-     * Answer a message describing any errors if the request failed.
-     *
-     * @return string
-     * @throws CAS_OutOfSequenceException If called before the Request has been sent.
-     */
-    public function getErrorMessage ();
-}
diff --git a/vendor/jasig/phpcas/source/CAS/Session/PhpSession.php b/vendor/jasig/phpcas/source/CAS/Session/PhpSession.php
deleted file mode 100644
index 031cbbc70f4a03290ceb15c15f9a422250ddefbe..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/Session/PhpSession.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- * PHP Version 7
- *
- * @file     CAS/Session/PhpSession.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Empty class used as a default implementation for phpCAS.
- *
- * Implements the standard PHP session handler without no alterations.
- *
- * @class    CAS_Session_PhpSession
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_Session_PhpSession extends SessionHandler implements SessionHandlerInterface
-{
-}
diff --git a/vendor/jasig/phpcas/source/CAS/TypeMismatchException.php b/vendor/jasig/phpcas/source/CAS/TypeMismatchException.php
deleted file mode 100644
index 72bdc87a170cb2e2636b73aade9e4da7421b8f54..0000000000000000000000000000000000000000
--- a/vendor/jasig/phpcas/source/CAS/TypeMismatchException.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * Licensed to Jasig under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for
- * additional information regarding copyright ownership.
- *
- * Jasig licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * PHP Version 7
- *
- * @file     CAS/InvalidArgumentException.php
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-
-/**
- * Exception that denotes invalid arguments were passed.
- *
- * @class    CAS_InvalidArgumentException
- * @category Authentication
- * @package  PhpCAS
- * @author   Adam Franco <afranco@middlebury.edu>
- * @license  http://www.apache.org/licenses/LICENSE-2.0  Apache License 2.0
- * @link     https://wiki.jasig.org/display/CASC/phpCAS
- */
-class CAS_TypeMismatchException
-extends CAS_InvalidArgumentException
-{
-    /**
-     * Constructor, provides a nice message.
-     *
-     * @param mixed   $argument     Argument
-     * @param string  $argumentName Argument Name
-     * @param string  $type         Type
-     * @param string  $message      Error Message
-     * @param integer $code         Code
-     *
-     * @return void
-     */
-    public function __construct (
-        $argument, $argumentName, $type, $message = '', $code = 0
-    ) {
-        if (is_object($argument)) {
-            $foundType = get_class($argument).' object';
-        } else {
-            $foundType = gettype($argument);
-        }
-
-        parent::__construct(
-            'type mismatched for parameter '
-            . $argumentName . ' (should be \'' . $type .' \'), '
-            . $foundType . ' given. ' . $message, $code
-        );
-    }
-}
-?>
diff --git a/vendor/psr/cache/CHANGELOG.md b/vendor/psr/cache/CHANGELOG.md
deleted file mode 100644
index 58ddab05aa1466153e77c25abbb4e7eb7905171a..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/CHANGELOG.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file, in reverse chronological order by release.
-
-## 1.0.1 - 2016-08-06
-
-### Fixed
-
-- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr
-- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr
-- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell
-- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell
-
-## 1.0.0 - 2015-12-11
-
-Initial stable release; reflects accepted PSR-6 specification
diff --git a/vendor/psr/cache/LICENSE.txt b/vendor/psr/cache/LICENSE.txt
deleted file mode 100644
index b1c2c97b9d42af7147b9a1a56848d7c746418f8c..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/LICENSE.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2015 PHP Framework Interoperability Group
-
-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/vendor/psr/cache/README.md b/vendor/psr/cache/README.md
deleted file mode 100644
index c8706ceea6625ab367583434c1b640af977c61ba..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-PSR Cache
-=========
-
-This repository holds all interfaces defined by
-[PSR-6](http://www.php-fig.org/psr/psr-6/).
-
-Note that this is not a Cache implementation of its own. It is merely an
-interface that describes a Cache implementation. See the specification for more 
-details.
diff --git a/vendor/psr/cache/composer.json b/vendor/psr/cache/composer.json
deleted file mode 100644
index e828fec9430d6397ab4b17eb8c384e4db381e245..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/composer.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    "name": "psr/cache",
-    "description": "Common interface for caching libraries",
-    "keywords": ["psr", "psr-6", "cache"],
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "PHP-FIG",
-            "homepage": "http://www.php-fig.org/"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.0"
-    },
-    "autoload": {
-        "psr-4": {
-            "Psr\\Cache\\": "src/"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.0.x-dev"
-        }
-    }
-}
diff --git a/vendor/psr/cache/src/CacheException.php b/vendor/psr/cache/src/CacheException.php
deleted file mode 100644
index e27f22f8d6026cfa5bcb94bba6f316a88cb722b4..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/src/CacheException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace Psr\Cache;
-
-/**
- * Exception interface for all exceptions thrown by an Implementing Library.
- */
-interface CacheException
-{
-}
diff --git a/vendor/psr/cache/src/CacheItemInterface.php b/vendor/psr/cache/src/CacheItemInterface.php
deleted file mode 100644
index 63d05dd1f464399289500ad3d5c89cebe97de9eb..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/src/CacheItemInterface.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-namespace Psr\Cache;
-
-/**
- * CacheItemInterface defines an interface for interacting with objects inside a cache.
- *
- * Each Item object MUST be associated with a specific key, which can be set
- * according to the implementing system and is typically passed by the
- * Cache\CacheItemPoolInterface object.
- *
- * The Cache\CacheItemInterface object encapsulates the storage and retrieval of
- * cache items. Each Cache\CacheItemInterface is generated by a
- * Cache\CacheItemPoolInterface object, which is responsible for any required
- * setup as well as associating the object with a unique Key.
- * Cache\CacheItemInterface objects MUST be able to store and retrieve any type
- * of PHP value defined in the Data section of the specification.
- *
- * Calling Libraries MUST NOT instantiate Item objects themselves. They may only
- * be requested from a Pool object via the getItem() method.  Calling Libraries
- * SHOULD NOT assume that an Item created by one Implementing Library is
- * compatible with a Pool from another Implementing Library.
- */
-interface CacheItemInterface
-{
-    /**
-     * Returns the key for the current cache item.
-     *
-     * The key is loaded by the Implementing Library, but should be available to
-     * the higher level callers when needed.
-     *
-     * @return string
-     *   The key string for this cache item.
-     */
-    public function getKey();
-
-    /**
-     * Retrieves the value of the item from the cache associated with this object's key.
-     *
-     * The value returned must be identical to the value originally stored by set().
-     *
-     * If isHit() returns false, this method MUST return null. Note that null
-     * is a legitimate cached value, so the isHit() method SHOULD be used to
-     * differentiate between "null value was found" and "no value was found."
-     *
-     * @return mixed
-     *   The value corresponding to this cache item's key, or null if not found.
-     */
-    public function get();
-
-    /**
-     * Confirms if the cache item lookup resulted in a cache hit.
-     *
-     * Note: This method MUST NOT have a race condition between calling isHit()
-     * and calling get().
-     *
-     * @return bool
-     *   True if the request resulted in a cache hit. False otherwise.
-     */
-    public function isHit();
-
-    /**
-     * Sets the value represented by this cache item.
-     *
-     * The $value argument may be any item that can be serialized by PHP,
-     * although the method of serialization is left up to the Implementing
-     * Library.
-     *
-     * @param mixed $value
-     *   The serializable value to be stored.
-     *
-     * @return static
-     *   The invoked object.
-     */
-    public function set($value);
-
-    /**
-     * Sets the expiration time for this cache item.
-     *
-     * @param \DateTimeInterface|null $expiration
-     *   The point in time after which the item MUST be considered expired.
-     *   If null is passed explicitly, a default value MAY be used. If none is set,
-     *   the value should be stored permanently or for as long as the
-     *   implementation allows.
-     *
-     * @return static
-     *   The called object.
-     */
-    public function expiresAt($expiration);
-
-    /**
-     * Sets the expiration time for this cache item.
-     *
-     * @param int|\DateInterval|null $time
-     *   The period of time from the present after which the item MUST be considered
-     *   expired. An integer parameter is understood to be the time in seconds until
-     *   expiration. If null is passed explicitly, a default value MAY be used.
-     *   If none is set, the value should be stored permanently or for as long as the
-     *   implementation allows.
-     *
-     * @return static
-     *   The called object.
-     */
-    public function expiresAfter($time);
-}
diff --git a/vendor/psr/cache/src/CacheItemPoolInterface.php b/vendor/psr/cache/src/CacheItemPoolInterface.php
deleted file mode 100644
index 0351419671e2642f9973f9fcfa023787b117780a..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/src/CacheItemPoolInterface.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-
-namespace Psr\Cache;
-
-/**
- * CacheItemPoolInterface generates CacheItemInterface objects.
- *
- * The primary purpose of Cache\CacheItemPoolInterface is to accept a key from
- * the Calling Library and return the associated Cache\CacheItemInterface object.
- * It is also the primary point of interaction with the entire cache collection.
- * All configuration and initialization of the Pool is left up to an
- * Implementing Library.
- */
-interface CacheItemPoolInterface
-{
-    /**
-     * Returns a Cache Item representing the specified key.
-     *
-     * This method must always return a CacheItemInterface object, even in case of
-     * a cache miss. It MUST NOT return null.
-     *
-     * @param string $key
-     *   The key for which to return the corresponding Cache Item.
-     *
-     * @throws InvalidArgumentException
-     *   If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException
-     *   MUST be thrown.
-     *
-     * @return CacheItemInterface
-     *   The corresponding Cache Item.
-     */
-    public function getItem($key);
-
-    /**
-     * Returns a traversable set of cache items.
-     *
-     * @param string[] $keys
-     *   An indexed array of keys of items to retrieve.
-     *
-     * @throws InvalidArgumentException
-     *   If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException
-     *   MUST be thrown.
-     *
-     * @return array|\Traversable
-     *   A traversable collection of Cache Items keyed by the cache keys of
-     *   each item. A Cache item will be returned for each key, even if that
-     *   key is not found. However, if no keys are specified then an empty
-     *   traversable MUST be returned instead.
-     */
-    public function getItems(array $keys = array());
-
-    /**
-     * Confirms if the cache contains specified cache item.
-     *
-     * Note: This method MAY avoid retrieving the cached value for performance reasons.
-     * This could result in a race condition with CacheItemInterface::get(). To avoid
-     * such situation use CacheItemInterface::isHit() instead.
-     *
-     * @param string $key
-     *   The key for which to check existence.
-     *
-     * @throws InvalidArgumentException
-     *   If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException
-     *   MUST be thrown.
-     *
-     * @return bool
-     *   True if item exists in the cache, false otherwise.
-     */
-    public function hasItem($key);
-
-    /**
-     * Deletes all items in the pool.
-     *
-     * @return bool
-     *   True if the pool was successfully cleared. False if there was an error.
-     */
-    public function clear();
-
-    /**
-     * Removes the item from the pool.
-     *
-     * @param string $key
-     *   The key to delete.
-     *
-     * @throws InvalidArgumentException
-     *   If the $key string is not a legal value a \Psr\Cache\InvalidArgumentException
-     *   MUST be thrown.
-     *
-     * @return bool
-     *   True if the item was successfully removed. False if there was an error.
-     */
-    public function deleteItem($key);
-
-    /**
-     * Removes multiple items from the pool.
-     *
-     * @param string[] $keys
-     *   An array of keys that should be removed from the pool.
-
-     * @throws InvalidArgumentException
-     *   If any of the keys in $keys are not a legal value a \Psr\Cache\InvalidArgumentException
-     *   MUST be thrown.
-     *
-     * @return bool
-     *   True if the items were successfully removed. False if there was an error.
-     */
-    public function deleteItems(array $keys);
-
-    /**
-     * Persists a cache item immediately.
-     *
-     * @param CacheItemInterface $item
-     *   The cache item to save.
-     *
-     * @return bool
-     *   True if the item was successfully persisted. False if there was an error.
-     */
-    public function save(CacheItemInterface $item);
-
-    /**
-     * Sets a cache item to be persisted later.
-     *
-     * @param CacheItemInterface $item
-     *   The cache item to save.
-     *
-     * @return bool
-     *   False if the item could not be queued or if a commit was attempted and failed. True otherwise.
-     */
-    public function saveDeferred(CacheItemInterface $item);
-
-    /**
-     * Persists any deferred cache items.
-     *
-     * @return bool
-     *   True if all not-yet-saved items were successfully saved or there were none. False otherwise.
-     */
-    public function commit();
-}
diff --git a/vendor/psr/cache/src/InvalidArgumentException.php b/vendor/psr/cache/src/InvalidArgumentException.php
deleted file mode 100644
index be7c6fa0ef18689bb415312f579993a10f9b7943..0000000000000000000000000000000000000000
--- a/vendor/psr/cache/src/InvalidArgumentException.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace Psr\Cache;
-
-/**
- * Exception interface for invalid cache arguments.
- *
- * Any time an invalid argument is passed into a method it must throw an
- * exception class which implements Psr\Cache\InvalidArgumentException.
- */
-interface InvalidArgumentException extends CacheException
-{
-}
diff --git a/vendor/psr/http-factory/.gitignore b/vendor/psr/http-factory/.gitignore
deleted file mode 100644
index d8a7996ab38543fe86834f6cffca7af09b935ec8..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-composer.lock
-vendor/
diff --git a/vendor/psr/http-factory/.pullapprove.yml b/vendor/psr/http-factory/.pullapprove.yml
deleted file mode 100644
index 8cf081942c727499edb57c8f33df8701ef664748..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/.pullapprove.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-extends: default
-reviewers:
-    -
-        name: contributors
-        required: 1
-        teams:
-            - http-factory-contributors
diff --git a/vendor/psr/http-factory/README.md b/vendor/psr/http-factory/README.md
deleted file mode 100644
index 41d362a6257fd6806b322d1c312fcb7377190ebc..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-HTTP Factories
-==============
-
-This repository holds all interfaces related to [PSR-17 (HTTP Message Factories)][psr-17]. 
-Please refer to the specification for a description.
-
-You can find implementations of the specification by looking for packages providing the 
-[psr/http-factory-implementation](https://packagist.org/providers/psr/http-factory-implementation) virtual package.
-
-[psr-17]: https://www.php-fig.org/psr/psr-17/
diff --git a/vendor/psr/http-factory/composer.json b/vendor/psr/http-factory/composer.json
deleted file mode 100644
index af62b290f918398db8fd557b2bcf6a5cae1e62f3..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/composer.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
-    "name": "psr/http-factory",
-    "description": "Common interfaces for PSR-7 HTTP message factories",
-    "keywords": [
-        "psr",
-        "psr-7",
-        "psr-17",
-        "http",
-        "factory",
-        "message",
-        "request",
-        "response"
-    ],
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "PHP-FIG",
-            "homepage": "http://www.php-fig.org/"
-        }
-    ],
-    "require": {
-        "php": ">=7.0.0",
-        "psr/http-message": "^1.0"
-    },
-    "autoload": {
-        "psr-4": {
-            "Psr\\Http\\Message\\": "src/"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.0.x-dev"
-        }
-    }
-}
diff --git a/vendor/psr/http-factory/src/RequestFactoryInterface.php b/vendor/psr/http-factory/src/RequestFactoryInterface.php
deleted file mode 100644
index cb39a08bf5c9969d9d8f8fc6bab847868583c465..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/src/RequestFactoryInterface.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-interface RequestFactoryInterface
-{
-    /**
-     * Create a new request.
-     *
-     * @param string $method The HTTP method associated with the request.
-     * @param UriInterface|string $uri The URI associated with the request. If
-     *     the value is a string, the factory MUST create a UriInterface
-     *     instance based on it.
-     *
-     * @return RequestInterface
-     */
-    public function createRequest(string $method, $uri): RequestInterface;
-}
diff --git a/vendor/psr/http-factory/src/ResponseFactoryInterface.php b/vendor/psr/http-factory/src/ResponseFactoryInterface.php
deleted file mode 100644
index 212562f00f3cb66e00d8534eb7dc88ec4b46f72d..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/src/ResponseFactoryInterface.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-interface ResponseFactoryInterface
-{
-    /**
-     * Create a new response.
-     *
-     * @param int $code HTTP status code; defaults to 200
-     * @param string $reasonPhrase Reason phrase to associate with status code
-     *     in generated response; if none is provided implementations MAY use
-     *     the defaults as suggested in the HTTP specification.
-     *
-     * @return ResponseInterface
-     */
-    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface;
-}
diff --git a/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php b/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php
deleted file mode 100644
index 9fe031a8f4a1989a0779f45b7fb0584ff29fda61..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-interface ServerRequestFactoryInterface
-{
-    /**
-     * Create a new server request.
-     *
-     * Note that server-params are taken precisely as given - no parsing/processing
-     * of the given values is performed, and, in particular, no attempt is made to
-     * determine the HTTP method or URI, which must be provided explicitly.
-     *
-     * @param string $method The HTTP method associated with the request.
-     * @param UriInterface|string $uri The URI associated with the request. If
-     *     the value is a string, the factory MUST create a UriInterface
-     *     instance based on it.
-     * @param array $serverParams Array of SAPI parameters with which to seed
-     *     the generated request instance.
-     *
-     * @return ServerRequestInterface
-     */
-    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface;
-}
diff --git a/vendor/psr/http-factory/src/StreamFactoryInterface.php b/vendor/psr/http-factory/src/StreamFactoryInterface.php
deleted file mode 100644
index 90e3240c47e6485beb80198d6a8b5d010bf0b93c..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/src/StreamFactoryInterface.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-interface StreamFactoryInterface
-{
-    /**
-     * Create a new stream from a string.
-     *
-     * The stream SHOULD be created with a temporary resource.
-     *
-     * @param string $content String content with which to populate the stream.
-     *
-     * @return StreamInterface
-     */
-    public function createStream(string $content = ''): StreamInterface;
-
-    /**
-     * Create a stream from an existing file.
-     *
-     * The file MUST be opened using the given mode, which may be any mode
-     * supported by the `fopen` function.
-     *
-     * The `$filename` MAY be any string supported by `fopen()`.
-     *
-     * @param string $filename Filename or stream URI to use as basis of stream.
-     * @param string $mode Mode with which to open the underlying filename/stream.
-     *
-     * @return StreamInterface
-     * @throws \RuntimeException If the file cannot be opened.
-     * @throws \InvalidArgumentException If the mode is invalid.
-     */
-    public function createStreamFromFile(string $filename, string $mode = 'r'): StreamInterface;
-
-    /**
-     * Create a new stream from an existing resource.
-     *
-     * The stream MUST be readable and may be writable.
-     *
-     * @param resource $resource PHP resource to use as basis of stream.
-     *
-     * @return StreamInterface
-     */
-    public function createStreamFromResource($resource): StreamInterface;
-}
diff --git a/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php b/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php
deleted file mode 100644
index 7db4e30af736bffb28181cf8f454ea3328d0e833..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-interface UploadedFileFactoryInterface
-{
-    /**
-     * Create a new uploaded file.
-     *
-     * If a size is not provided it will be determined by checking the size of
-     * the file.
-     *
-     * @see http://php.net/manual/features.file-upload.post-method.php
-     * @see http://php.net/manual/features.file-upload.errors.php
-     *
-     * @param StreamInterface $stream Underlying stream representing the
-     *     uploaded file content.
-     * @param int $size in bytes
-     * @param int $error PHP file upload error
-     * @param string $clientFilename Filename as provided by the client, if any.
-     * @param string $clientMediaType Media type as provided by the client, if any.
-     *
-     * @return UploadedFileInterface
-     *
-     * @throws \InvalidArgumentException If the file resource is not readable.
-     */
-    public function createUploadedFile(
-        StreamInterface $stream,
-        int $size = null,
-        int $error = \UPLOAD_ERR_OK,
-        string $clientFilename = null,
-        string $clientMediaType = null
-    ): UploadedFileInterface;
-}
diff --git a/vendor/psr/http-factory/src/UriFactoryInterface.php b/vendor/psr/http-factory/src/UriFactoryInterface.php
deleted file mode 100644
index 06df0b46acd072a490ca9df1182abb2b01acbc14..0000000000000000000000000000000000000000
--- a/vendor/psr/http-factory/src/UriFactoryInterface.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-interface UriFactoryInterface
-{
-    /**
-     * Create a new URI.
-     *
-     * @param string $uri
-     *
-     * @return UriInterface
-     *
-     * @throws \InvalidArgumentException If the given URI cannot be parsed.
-     */
-    public function createUri(string $uri = ''): UriInterface;
-}
diff --git a/vendor/psr/http-server-handler/LICENSE b/vendor/psr/http-server-handler/LICENSE
deleted file mode 100644
index b71ec5dfc20eeb8d3b27274630406a52d643bab9..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-handler/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2016 PHP Framework Interoperability Group
-
-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/vendor/psr/http-server-handler/README.md b/vendor/psr/http-server-handler/README.md
deleted file mode 100644
index 1b7b4860c182b3b94abad817711d30a1b5a4ff7e..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-handler/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-HTTP Server Handler
-===================
-
-Provides the `RequestHandlerInterface` of [PSR-15][psr-15].
-
-[psr-15]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-15-request-handlers.md
diff --git a/vendor/psr/http-server-handler/composer.json b/vendor/psr/http-server-handler/composer.json
deleted file mode 100644
index 9e8b51d1eed14cb172931604827439be4fdddea8..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-handler/composer.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-    "name": "psr/http-server-handler",
-    "description": "Common interface for HTTP server-side request handler",
-    "keywords": [
-        "psr",
-        "psr-7",
-        "psr-15",
-        "http-interop",
-        "http",
-        "server",
-        "handler",
-        "request",
-        "response"
-    ],
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "PHP-FIG",
-            "homepage": "http://www.php-fig.org/"
-        }
-    ],
-    "require": {
-        "php": ">=7.0",
-        "psr/http-message": "^1.0"
-    },
-    "autoload": {
-        "psr-4": {
-            "Psr\\Http\\Server\\": "src/"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.0.x-dev"
-        }
-    }
-}
diff --git a/vendor/psr/http-server-handler/src/RequestHandlerInterface.php b/vendor/psr/http-server-handler/src/RequestHandlerInterface.php
deleted file mode 100644
index 83911e265b8530a8026ed28ec72c14d9edf84ece..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-handler/src/RequestHandlerInterface.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace Psr\Http\Server;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-
-/**
- * Handles a server request and produces a response.
- *
- * An HTTP request handler process an HTTP request in order to produce an
- * HTTP response.
- */
-interface RequestHandlerInterface
-{
-    /**
-     * Handles a request and produces a response.
-     *
-     * May call other collaborating code to generate the response.
-     */
-    public function handle(ServerRequestInterface $request): ResponseInterface;
-}
diff --git a/vendor/psr/http-server-middleware/LICENSE b/vendor/psr/http-server-middleware/LICENSE
deleted file mode 100644
index b71ec5dfc20eeb8d3b27274630406a52d643bab9..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-middleware/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2016 PHP Framework Interoperability Group
-
-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/vendor/psr/http-server-middleware/README.md b/vendor/psr/http-server-middleware/README.md
deleted file mode 100644
index 8359bd05c14acbf33cdabfc363a17b8d2a045923..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-middleware/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-HTTP Server Middleware
-======================
-
-Provides the `MiddlewareInterface` of [PSR-15][psr-15].
-
-[psr-15]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-15-request-handlers.md
diff --git a/vendor/psr/http-server-middleware/composer.json b/vendor/psr/http-server-middleware/composer.json
deleted file mode 100644
index 1595513c30517d778c07a6284eb8f7f1ba2007ee..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-middleware/composer.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-    "name": "psr/http-server-middleware",
-    "description": "Common interface for HTTP server-side middleware",
-    "keywords": [
-        "psr",
-        "psr-7",
-        "psr-15",
-        "http-interop",
-        "http",
-        "middleware",
-        "request",
-        "response"
-    ],
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "PHP-FIG",
-            "homepage": "http://www.php-fig.org/"
-        }
-    ],
-    "require": {
-        "php": ">=7.0",
-        "psr/http-message": "^1.0",
-        "psr/http-server-handler": "^1.0"
-    },
-    "autoload": {
-        "psr-4": {
-            "Psr\\Http\\Server\\": "src/"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.0.x-dev"
-        }
-    }
-}
diff --git a/vendor/psr/http-server-middleware/src/MiddlewareInterface.php b/vendor/psr/http-server-middleware/src/MiddlewareInterface.php
deleted file mode 100644
index a6c14f8c72980ecfc90e76c6e624553c7090ca92..0000000000000000000000000000000000000000
--- a/vendor/psr/http-server-middleware/src/MiddlewareInterface.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace Psr\Http\Server;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-
-/**
- * Participant in processing a server request and response.
- *
- * An HTTP middleware component participates in processing an HTTP message:
- * by acting on the request, generating the response, or forwarding the
- * request to a subsequent middleware and possibly acting on its response.
- */
-interface MiddlewareInterface
-{
-    /**
-     * Process an incoming server request.
-     *
-     * Processes an incoming server request in order to produce a response.
-     * If unable to produce the response itself, it may delegate to the provided
-     * request handler to do so.
-     */
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface;
-}
diff --git a/vendor/psr/log/.gitignore b/vendor/psr/log/.gitignore
deleted file mode 100644
index 22d0d82f8095e9c0ed572776afb47f9ca293ce00..0000000000000000000000000000000000000000
--- a/vendor/psr/log/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vendor
diff --git a/vendor/psr/log/LICENSE b/vendor/psr/log/LICENSE
deleted file mode 100644
index 474c952b4b50c761c9b031f410ac0dfbc1daac4c..0000000000000000000000000000000000000000
--- a/vendor/psr/log/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 PHP Framework Interoperability Group
-
-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/vendor/psr/log/Psr/Log/AbstractLogger.php b/vendor/psr/log/Psr/Log/AbstractLogger.php
deleted file mode 100644
index 90e721af2d37716f0984a6b17b2385c223a248ed..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/AbstractLogger.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-/**
- * This is a simple Logger implementation that other Loggers can inherit from.
- *
- * It simply delegates all log-level-specific methods to the `log` method to
- * reduce boilerplate code that a simple Logger that does the same thing with
- * messages regardless of the error level has to implement.
- */
-abstract class AbstractLogger implements LoggerInterface
-{
-    /**
-     * System is unusable.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function emergency($message, array $context = array())
-    {
-        $this->log(LogLevel::EMERGENCY, $message, $context);
-    }
-
-    /**
-     * Action must be taken immediately.
-     *
-     * Example: Entire website down, database unavailable, etc. This should
-     * trigger the SMS alerts and wake you up.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function alert($message, array $context = array())
-    {
-        $this->log(LogLevel::ALERT, $message, $context);
-    }
-
-    /**
-     * Critical conditions.
-     *
-     * Example: Application component unavailable, unexpected exception.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function critical($message, array $context = array())
-    {
-        $this->log(LogLevel::CRITICAL, $message, $context);
-    }
-
-    /**
-     * Runtime errors that do not require immediate action but should typically
-     * be logged and monitored.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function error($message, array $context = array())
-    {
-        $this->log(LogLevel::ERROR, $message, $context);
-    }
-
-    /**
-     * Exceptional occurrences that are not errors.
-     *
-     * Example: Use of deprecated APIs, poor use of an API, undesirable things
-     * that are not necessarily wrong.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function warning($message, array $context = array())
-    {
-        $this->log(LogLevel::WARNING, $message, $context);
-    }
-
-    /**
-     * Normal but significant events.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function notice($message, array $context = array())
-    {
-        $this->log(LogLevel::NOTICE, $message, $context);
-    }
-
-    /**
-     * Interesting events.
-     *
-     * Example: User logs in, SQL logs.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function info($message, array $context = array())
-    {
-        $this->log(LogLevel::INFO, $message, $context);
-    }
-
-    /**
-     * Detailed debug information.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function debug($message, array $context = array())
-    {
-        $this->log(LogLevel::DEBUG, $message, $context);
-    }
-}
diff --git a/vendor/psr/log/Psr/Log/InvalidArgumentException.php b/vendor/psr/log/Psr/Log/InvalidArgumentException.php
deleted file mode 100644
index 67f852d1dbc660ba05e703fe9b727727da2b3f78..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/InvalidArgumentException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-class InvalidArgumentException extends \InvalidArgumentException
-{
-}
diff --git a/vendor/psr/log/Psr/Log/LogLevel.php b/vendor/psr/log/Psr/Log/LogLevel.php
deleted file mode 100644
index 9cebcace652f5bc52ee4c20497162df4ef00b16d..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/LogLevel.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-/**
- * Describes log levels.
- */
-class LogLevel
-{
-    const EMERGENCY = 'emergency';
-    const ALERT     = 'alert';
-    const CRITICAL  = 'critical';
-    const ERROR     = 'error';
-    const WARNING   = 'warning';
-    const NOTICE    = 'notice';
-    const INFO      = 'info';
-    const DEBUG     = 'debug';
-}
diff --git a/vendor/psr/log/Psr/Log/LoggerAwareInterface.php b/vendor/psr/log/Psr/Log/LoggerAwareInterface.php
deleted file mode 100644
index 4d64f4786adb9b25259533304542302ca687eba2..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/LoggerAwareInterface.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-/**
- * Describes a logger-aware instance.
- */
-interface LoggerAwareInterface
-{
-    /**
-     * Sets a logger instance on the object.
-     *
-     * @param LoggerInterface $logger
-     *
-     * @return void
-     */
-    public function setLogger(LoggerInterface $logger);
-}
diff --git a/vendor/psr/log/Psr/Log/LoggerAwareTrait.php b/vendor/psr/log/Psr/Log/LoggerAwareTrait.php
deleted file mode 100644
index 639f79bdaa5a007de241f4d902b679c51980eaca..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/LoggerAwareTrait.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-/**
- * Basic Implementation of LoggerAwareInterface.
- */
-trait LoggerAwareTrait
-{
-    /**
-     * The logger instance.
-     *
-     * @var LoggerInterface
-     */
-    protected $logger;
-
-    /**
-     * Sets a logger.
-     *
-     * @param LoggerInterface $logger
-     */
-    public function setLogger(LoggerInterface $logger)
-    {
-        $this->logger = $logger;
-    }
-}
diff --git a/vendor/psr/log/Psr/Log/LoggerInterface.php b/vendor/psr/log/Psr/Log/LoggerInterface.php
deleted file mode 100644
index 5ea72438b56694639c13101cbc3c82339a6e96a8..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/LoggerInterface.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-/**
- * Describes a logger instance.
- *
- * The message MUST be a string or object implementing __toString().
- *
- * The message MAY contain placeholders in the form: {foo} where foo
- * will be replaced by the context data in key "foo".
- *
- * The context array can contain arbitrary data. The only assumption that
- * can be made by implementors is that if an Exception instance is given
- * to produce a stack trace, it MUST be in a key named "exception".
- *
- * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
- * for the full interface specification.
- */
-interface LoggerInterface
-{
-    /**
-     * System is unusable.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function emergency($message, array $context = array());
-
-    /**
-     * Action must be taken immediately.
-     *
-     * Example: Entire website down, database unavailable, etc. This should
-     * trigger the SMS alerts and wake you up.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function alert($message, array $context = array());
-
-    /**
-     * Critical conditions.
-     *
-     * Example: Application component unavailable, unexpected exception.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function critical($message, array $context = array());
-
-    /**
-     * Runtime errors that do not require immediate action but should typically
-     * be logged and monitored.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function error($message, array $context = array());
-
-    /**
-     * Exceptional occurrences that are not errors.
-     *
-     * Example: Use of deprecated APIs, poor use of an API, undesirable things
-     * that are not necessarily wrong.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function warning($message, array $context = array());
-
-    /**
-     * Normal but significant events.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function notice($message, array $context = array());
-
-    /**
-     * Interesting events.
-     *
-     * Example: User logs in, SQL logs.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function info($message, array $context = array());
-
-    /**
-     * Detailed debug information.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function debug($message, array $context = array());
-
-    /**
-     * Logs with an arbitrary level.
-     *
-     * @param mixed  $level
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function log($level, $message, array $context = array());
-}
diff --git a/vendor/psr/log/Psr/Log/LoggerTrait.php b/vendor/psr/log/Psr/Log/LoggerTrait.php
deleted file mode 100644
index 867225df1d12469facd1355e6db7467e0d8de128..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/LoggerTrait.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-/**
- * This is a simple Logger trait that classes unable to extend AbstractLogger
- * (because they extend another class, etc) can include.
- *
- * It simply delegates all log-level-specific methods to the `log` method to
- * reduce boilerplate code that a simple Logger that does the same thing with
- * messages regardless of the error level has to implement.
- */
-trait LoggerTrait
-{
-    /**
-     * System is unusable.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function emergency($message, array $context = array())
-    {
-        $this->log(LogLevel::EMERGENCY, $message, $context);
-    }
-
-    /**
-     * Action must be taken immediately.
-     *
-     * Example: Entire website down, database unavailable, etc. This should
-     * trigger the SMS alerts and wake you up.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function alert($message, array $context = array())
-    {
-        $this->log(LogLevel::ALERT, $message, $context);
-    }
-
-    /**
-     * Critical conditions.
-     *
-     * Example: Application component unavailable, unexpected exception.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function critical($message, array $context = array())
-    {
-        $this->log(LogLevel::CRITICAL, $message, $context);
-    }
-
-    /**
-     * Runtime errors that do not require immediate action but should typically
-     * be logged and monitored.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function error($message, array $context = array())
-    {
-        $this->log(LogLevel::ERROR, $message, $context);
-    }
-
-    /**
-     * Exceptional occurrences that are not errors.
-     *
-     * Example: Use of deprecated APIs, poor use of an API, undesirable things
-     * that are not necessarily wrong.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function warning($message, array $context = array())
-    {
-        $this->log(LogLevel::WARNING, $message, $context);
-    }
-
-    /**
-     * Normal but significant events.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function notice($message, array $context = array())
-    {
-        $this->log(LogLevel::NOTICE, $message, $context);
-    }
-
-    /**
-     * Interesting events.
-     *
-     * Example: User logs in, SQL logs.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function info($message, array $context = array())
-    {
-        $this->log(LogLevel::INFO, $message, $context);
-    }
-
-    /**
-     * Detailed debug information.
-     *
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function debug($message, array $context = array())
-    {
-        $this->log(LogLevel::DEBUG, $message, $context);
-    }
-
-    /**
-     * Logs with an arbitrary level.
-     *
-     * @param mixed  $level
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    abstract public function log($level, $message, array $context = array());
-}
diff --git a/vendor/psr/log/Psr/Log/NullLogger.php b/vendor/psr/log/Psr/Log/NullLogger.php
deleted file mode 100644
index d8cd682c8f963e8f5e04f46a4a57308cc8d9ecf0..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/NullLogger.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace Psr\Log;
-
-/**
- * This Logger can be used to avoid conditional log calls.
- *
- * Logging should always be optional, and if no logger is provided to your
- * library creating a NullLogger instance to have something to throw logs at
- * is a good way to avoid littering your code with `if ($this->logger) { }`
- * blocks.
- */
-class NullLogger extends AbstractLogger
-{
-    /**
-     * Logs with an arbitrary level.
-     *
-     * @param mixed  $level
-     * @param string $message
-     * @param array  $context
-     *
-     * @return void
-     */
-    public function log($level, $message, array $context = array())
-    {
-        // noop
-    }
-}
diff --git a/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php b/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php
deleted file mode 100644
index 4b861c3ef6c31bf99c0fc78d0fc2fbc2711d88aa..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-
-namespace Psr\Log\Test;
-
-use Psr\Log\LoggerInterface;
-use Psr\Log\LogLevel;
-
-/**
- * Provides a base test class for ensuring compliance with the LoggerInterface.
- *
- * Implementors can extend the class and implement abstract methods to run this
- * as part of their test suite.
- */
-abstract class LoggerInterfaceTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @return LoggerInterface
-     */
-    abstract public function getLogger();
-
-    /**
-     * This must return the log messages in order.
-     *
-     * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>".
-     *
-     * Example ->error('Foo') would yield "error Foo".
-     *
-     * @return string[]
-     */
-    abstract public function getLogs();
-
-    public function testImplements()
-    {
-        $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger());
-    }
-
-    /**
-     * @dataProvider provideLevelsAndMessages
-     */
-    public function testLogsAtAllLevels($level, $message)
-    {
-        $logger = $this->getLogger();
-        $logger->{$level}($message, array('user' => 'Bob'));
-        $logger->log($level, $message, array('user' => 'Bob'));
-
-        $expected = array(
-            $level.' message of level '.$level.' with context: Bob',
-            $level.' message of level '.$level.' with context: Bob',
-        );
-        $this->assertEquals($expected, $this->getLogs());
-    }
-
-    public function provideLevelsAndMessages()
-    {
-        return array(
-            LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
-            LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
-            LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
-            LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
-            LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
-            LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
-            LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
-            LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
-        );
-    }
-
-    /**
-     * @expectedException \Psr\Log\InvalidArgumentException
-     */
-    public function testThrowsOnInvalidLevel()
-    {
-        $logger = $this->getLogger();
-        $logger->log('invalid level', 'Foo');
-    }
-
-    public function testContextReplacement()
-    {
-        $logger = $this->getLogger();
-        $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
-
-        $expected = array('info {Message {nothing} Bob Bar a}');
-        $this->assertEquals($expected, $this->getLogs());
-    }
-
-    public function testObjectCastToString()
-    {
-        if (method_exists($this, 'createPartialMock')) {
-            $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString'));
-        } else {
-            $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString'));
-        }
-        $dummy->expects($this->once())
-            ->method('__toString')
-            ->will($this->returnValue('DUMMY'));
-
-        $this->getLogger()->warning($dummy);
-
-        $expected = array('warning DUMMY');
-        $this->assertEquals($expected, $this->getLogs());
-    }
-
-    public function testContextCanContainAnything()
-    {
-        $closed = fopen('php://memory', 'r');
-        fclose($closed);
-
-        $context = array(
-            'bool' => true,
-            'null' => null,
-            'string' => 'Foo',
-            'int' => 0,
-            'float' => 0.5,
-            'nested' => array('with object' => new DummyTest),
-            'object' => new \DateTime,
-            'resource' => fopen('php://memory', 'r'),
-            'closed' => $closed,
-        );
-
-        $this->getLogger()->warning('Crazy context data', $context);
-
-        $expected = array('warning Crazy context data');
-        $this->assertEquals($expected, $this->getLogs());
-    }
-
-    public function testContextExceptionKeyCanBeExceptionOrOtherValues()
-    {
-        $logger = $this->getLogger();
-        $logger->warning('Random message', array('exception' => 'oops'));
-        $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));
-
-        $expected = array(
-            'warning Random message',
-            'critical Uncaught Exception!'
-        );
-        $this->assertEquals($expected, $this->getLogs());
-    }
-}
-
-class DummyTest
-{
-    public function __toString()
-    {
-    }
-}
diff --git a/vendor/psr/log/Psr/Log/Test/TestLogger.php b/vendor/psr/log/Psr/Log/Test/TestLogger.php
deleted file mode 100644
index 0cdffe4f9263b98f870b9615c07b005f54b14ca7..0000000000000000000000000000000000000000
--- a/vendor/psr/log/Psr/Log/Test/TestLogger.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-
-namespace Psr\Log\Test;
-
-use Psr\Log\AbstractLogger;
-
-/**
- * Used for testing purposes.
- *
- * It records all records and gives you access to them for verification.
- *
- * @method bool hasEmergency($record)
- * @method bool hasAlert($record)
- * @method bool hasCritical($record)
- * @method bool hasError($record)
- * @method bool hasWarning($record)
- * @method bool hasNotice($record)
- * @method bool hasInfo($record)
- * @method bool hasDebug($record)
- *
- * @method bool hasEmergencyRecords()
- * @method bool hasAlertRecords()
- * @method bool hasCriticalRecords()
- * @method bool hasErrorRecords()
- * @method bool hasWarningRecords()
- * @method bool hasNoticeRecords()
- * @method bool hasInfoRecords()
- * @method bool hasDebugRecords()
- *
- * @method bool hasEmergencyThatContains($message)
- * @method bool hasAlertThatContains($message)
- * @method bool hasCriticalThatContains($message)
- * @method bool hasErrorThatContains($message)
- * @method bool hasWarningThatContains($message)
- * @method bool hasNoticeThatContains($message)
- * @method bool hasInfoThatContains($message)
- * @method bool hasDebugThatContains($message)
- *
- * @method bool hasEmergencyThatMatches($message)
- * @method bool hasAlertThatMatches($message)
- * @method bool hasCriticalThatMatches($message)
- * @method bool hasErrorThatMatches($message)
- * @method bool hasWarningThatMatches($message)
- * @method bool hasNoticeThatMatches($message)
- * @method bool hasInfoThatMatches($message)
- * @method bool hasDebugThatMatches($message)
- *
- * @method bool hasEmergencyThatPasses($message)
- * @method bool hasAlertThatPasses($message)
- * @method bool hasCriticalThatPasses($message)
- * @method bool hasErrorThatPasses($message)
- * @method bool hasWarningThatPasses($message)
- * @method bool hasNoticeThatPasses($message)
- * @method bool hasInfoThatPasses($message)
- * @method bool hasDebugThatPasses($message)
- */
-class TestLogger extends AbstractLogger
-{
-    /**
-     * @var array
-     */
-    public $records = [];
-
-    public $recordsByLevel = [];
-
-    /**
-     * @inheritdoc
-     */
-    public function log($level, $message, array $context = [])
-    {
-        $record = [
-            'level' => $level,
-            'message' => $message,
-            'context' => $context,
-        ];
-
-        $this->recordsByLevel[$record['level']][] = $record;
-        $this->records[] = $record;
-    }
-
-    public function hasRecords($level)
-    {
-        return isset($this->recordsByLevel[$level]);
-    }
-
-    public function hasRecord($record, $level)
-    {
-        if (is_string($record)) {
-            $record = ['message' => $record];
-        }
-        return $this->hasRecordThatPasses(function ($rec) use ($record) {
-            if ($rec['message'] !== $record['message']) {
-                return false;
-            }
-            if (isset($record['context']) && $rec['context'] !== $record['context']) {
-                return false;
-            }
-            return true;
-        }, $level);
-    }
-
-    public function hasRecordThatContains($message, $level)
-    {
-        return $this->hasRecordThatPasses(function ($rec) use ($message) {
-            return strpos($rec['message'], $message) !== false;
-        }, $level);
-    }
-
-    public function hasRecordThatMatches($regex, $level)
-    {
-        return $this->hasRecordThatPasses(function ($rec) use ($regex) {
-            return preg_match($regex, $rec['message']) > 0;
-        }, $level);
-    }
-
-    public function hasRecordThatPasses(callable $predicate, $level)
-    {
-        if (!isset($this->recordsByLevel[$level])) {
-            return false;
-        }
-        foreach ($this->recordsByLevel[$level] as $i => $rec) {
-            if (call_user_func($predicate, $rec, $i)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public function __call($method, $args)
-    {
-        if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
-            $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
-            $level = strtolower($matches[2]);
-            if (method_exists($this, $genericMethod)) {
-                $args[] = $level;
-                return call_user_func_array([$this, $genericMethod], $args);
-            }
-        }
-        throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
-    }
-
-    public function reset()
-    {
-        $this->records = [];
-    }
-}
diff --git a/vendor/psr/log/README.md b/vendor/psr/log/README.md
deleted file mode 100644
index 5571a25e8df01732f1b7141b3ccc6835b3bb429c..0000000000000000000000000000000000000000
--- a/vendor/psr/log/README.md
+++ /dev/null
@@ -1,52 +0,0 @@
-PSR Log
-=======
-
-This repository holds all interfaces/classes/traits related to
-[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md).
-
-Note that this is not a logger of its own. It is merely an interface that
-describes a logger. See the specification for more details.
-
-Installation
-------------
-
-```bash
-composer require psr/log
-```
-
-Usage
------
-
-If you need a logger, you can use the interface like this:
-
-```php
-<?php
-
-use Psr\Log\LoggerInterface;
-
-class Foo
-{
-    private $logger;
-
-    public function __construct(LoggerInterface $logger = null)
-    {
-        $this->logger = $logger;
-    }
-
-    public function doSomething()
-    {
-        if ($this->logger) {
-            $this->logger->info('Doing work');
-        }
-
-        // do something useful
-    }
-}
-```
-
-You can then pick one of the implementations of the interface to get a logger.
-
-If you want to implement the interface, you can require this package and
-implement `Psr\Log\LoggerInterface` in your code. Please read the
-[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)
-for details.
diff --git a/vendor/psr/log/composer.json b/vendor/psr/log/composer.json
deleted file mode 100644
index 87934d707e7a37325a0ec6afe4b63aaa4ca6337c..0000000000000000000000000000000000000000
--- a/vendor/psr/log/composer.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-    "name": "psr/log",
-    "description": "Common interface for logging libraries",
-    "keywords": ["psr", "psr-3", "log"],
-    "homepage": "https://github.com/php-fig/log",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "PHP-FIG",
-            "homepage": "http://www.php-fig.org/"
-        }
-    ],
-    "require": {
-        "php": ">=5.3.0"
-    },
-    "autoload": {
-        "psr-4": {
-            "Psr\\Log\\": "Psr/Log/"
-        }
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "1.0.x-dev"
-        }
-    }
-}
diff --git a/vendor/slim/psr7/LICENSE.md b/vendor/slim/psr7/LICENSE.md
deleted file mode 100644
index 2bd2d5af050b5f2a38617fdd1d12daa1b291973e..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/LICENSE.md
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Slim Framework
-
-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/vendor/slim/psr7/MAINTAINERS.md b/vendor/slim/psr7/MAINTAINERS.md
deleted file mode 100644
index 5c2496e1d38f13e510ae09264c54f150205ec373..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/MAINTAINERS.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Maintainers
-
-There aren't many rules for maintainers of Slim-Psr7 to remember; what we have is listed here.
-
-## We don't merge our own PRs
-
-Our code is better if more than one set of eyes looks at it. Therefore we do not merge our own pull requests unless there is an exceptional circumstance. This helps to spot errors in the patch and also enables us to share information about the project around the maintainer team.
-
-## PRs tagged `[WIP]` are not ready to be merged
-
-Sometimes it's helpful to collaborate on a patch before it's ready to be merged. We use the `[WIP]` tag (for _Work in Progress_) in the title to mark these PRs. 
-
-If a PR has `[WIP]` in its title, then it is not to be merged. The person who raised the PR will remove the `[WIP]` tag when they are ready for a full review and merge.
-
-## Assign a merged PR to a milestone
-
-By ensuring that all merged PRs are assigned to a milestone, we can easily find which PRs were in which release.
diff --git a/vendor/slim/psr7/composer.json b/vendor/slim/psr7/composer.json
deleted file mode 100644
index 318f710e7b159ee16d3477af8e9a696b03ef4da5..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/composer.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-  "name": "slim/psr7",
-  "type": "library",
-  "description": "Strict PSR-7 implementation",
-  "keywords": ["psr7","psr-7","http"],
-  "homepage": "https://www.slimframework.com",
-  "license": "MIT",
-  "authors": [
-    {
-      "name": "Josh Lockhart",
-      "email": "hello@joshlockhart.com",
-      "homepage": "http://joshlockhart.com"
-    },
-    {
-      "name": "Andrew Smith",
-      "email": "a.smith@silentworks.co.uk",
-      "homepage": "http://silentworks.co.uk"
-    },
-    {
-      "name": "Rob Allen",
-      "email": "rob@akrabat.com",
-      "homepage": "http://akrabat.com"
-    },
-    {
-      "name": "Pierre Berube",
-      "email": "pierre@lgse.com",
-      "homepage": "http://www.lgse.com"
-    }
-  ],
-  "require": {
-    "php": "^7.4 || ^8.0",
-    "fig/http-message-util": "^1.1.5",
-    "psr/http-factory": "^1.0",
-    "psr/http-message": "^1.0",
-    "ralouphie/getallheaders": "^3.0",
-    "symfony/polyfill-php80": "^1.26"
-  },
-  "require-dev": {
-    "ext-json": "*",
-    "adriansuter/php-autoload-override": "^1.3",
-    "http-interop/http-factory-tests": "^0.9.0",
-    "php-http/psr7-integration-tests": "dev-master",
-    "phpspec/prophecy": "^1.15",
-    "phpspec/prophecy-phpunit": "^2.0",
-    "phpstan/phpstan": "^1.8",
-    "phpunit/phpunit": "^9.5",
-    "squizlabs/php_codesniffer": "^3.7"
-  },
-  "provide": {
-    "psr/http-message-implementation": "1.0",
-    "psr/http-factory-implementation": "1.0"
-  },
-  "autoload": {
-    "psr-4": {
-      "Slim\\Psr7\\": "src"
-    }
-  },
-  "autoload-dev": {
-    "psr-4": {
-      "Slim\\Tests\\Psr7\\": "tests"
-    }
-  },
-  "scripts": {
-    "test": [
-      "@phpunit",
-      "@phpcs",
-      "@phpstan"
-    ],
-    "phpunit": "phpunit",
-    "phpcs": "phpcs",
-    "phpstan": "phpstan --memory-limit=-1"
-  },
-  "config": {
-    "sort-packages": true
-  }
-}
diff --git a/vendor/slim/psr7/src/Environment.php b/vendor/slim/psr7/src/Environment.php
deleted file mode 100644
index 55f187b36fc51e50124db506df044038e1e42c0b..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Environment.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use function array_merge;
-use function microtime;
-use function time;
-
-class Environment
-{
-    /**
-     * @param  array $data Array of custom environment keys and values
-     *
-     * @return array
-     */
-    public static function mock(array $data = []): array
-    {
-        if (
-            (isset($data['HTTPS']) && $data['HTTPS'] !== 'off')
-            || ((isset($data['REQUEST_SCHEME']) && $data['REQUEST_SCHEME'] === 'https'))
-        ) {
-            $scheme = 'https';
-            $port = 443;
-        } else {
-            $scheme = 'http';
-            $port = 80;
-        }
-
-        return array_merge([
-            'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
-            'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
-            'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8',
-            'HTTP_USER_AGENT' => 'Slim Framework',
-            'QUERY_STRING' => '',
-            'REMOTE_ADDR' => '127.0.0.1',
-            'REQUEST_METHOD' => 'GET',
-            'REQUEST_SCHEME' => $scheme,
-            'REQUEST_TIME' => time(),
-            'REQUEST_TIME_FLOAT' => microtime(true),
-            'REQUEST_URI' => '',
-            'SCRIPT_NAME' => '',
-            'SERVER_NAME' => 'localhost',
-            'SERVER_PORT' => $port,
-            'SERVER_PROTOCOL' => 'HTTP/1.1',
-        ], $data);
-    }
-}
diff --git a/vendor/slim/psr7/src/Factory/RequestFactory.php b/vendor/slim/psr7/src/Factory/RequestFactory.php
deleted file mode 100644
index e825ee3777703a55fb69dae22e552e1b984d34ce..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Factory/RequestFactory.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7\Factory;
-
-use InvalidArgumentException;
-use Psr\Http\Message\RequestFactoryInterface;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\StreamFactoryInterface;
-use Psr\Http\Message\UriFactoryInterface;
-use Psr\Http\Message\UriInterface;
-use Slim\Psr7\Headers;
-use Slim\Psr7\Request;
-
-use function is_string;
-
-class RequestFactory implements RequestFactoryInterface
-{
-    protected StreamFactoryInterface $streamFactory;
-
-    protected UriFactoryInterface $uriFactory;
-
-    /**
-     * @param StreamFactoryInterface|null $streamFactory
-     * @param UriFactoryInterface|null    $uriFactory
-     */
-    public function __construct(?StreamFactoryInterface $streamFactory = null, ?UriFactoryInterface $uriFactory = null)
-    {
-        $this->streamFactory = $streamFactory ?? new StreamFactory();
-        $this->uriFactory = $uriFactory ?? new UriFactory();
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function createRequest(string $method, $uri): RequestInterface
-    {
-        if (is_string($uri)) {
-            $uri = $this->uriFactory->createUri($uri);
-        }
-
-        if (!$uri instanceof UriInterface) {
-            throw new InvalidArgumentException(
-                'Parameter 2 of RequestFactory::createRequest() must be a string or a compatible UriInterface.'
-            );
-        }
-
-        $body = $this->streamFactory->createStream();
-
-        return new Request($method, $uri, new Headers(), [], [], $body);
-    }
-}
diff --git a/vendor/slim/psr7/src/Factory/ResponseFactory.php b/vendor/slim/psr7/src/Factory/ResponseFactory.php
deleted file mode 100644
index c1a23a7d7207da627b0d5c80fe9289a7c66c0d12..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Factory/ResponseFactory.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7\Factory;
-
-use Fig\Http\Message\StatusCodeInterface;
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\ResponseInterface;
-use Slim\Psr7\Response;
-
-class ResponseFactory implements ResponseFactoryInterface
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function createResponse(
-        int $code = StatusCodeInterface::STATUS_OK,
-        string $reasonPhrase = ''
-    ): ResponseInterface {
-        $res = new Response($code);
-
-        if ($reasonPhrase !== '') {
-            $res = $res->withStatus($code, $reasonPhrase);
-        }
-
-        return $res;
-    }
-}
diff --git a/vendor/slim/psr7/src/Factory/ServerRequestFactory.php b/vendor/slim/psr7/src/Factory/ServerRequestFactory.php
deleted file mode 100644
index 5bc2447aed52befc87e289546351ebd78ee41c5a..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Factory/ServerRequestFactory.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7\Factory;
-
-use InvalidArgumentException;
-use Psr\Http\Message\ServerRequestFactoryInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\StreamFactoryInterface;
-use Psr\Http\Message\UriFactoryInterface;
-use Psr\Http\Message\UriInterface;
-use Slim\Psr7\Cookies;
-use Slim\Psr7\Headers;
-use Slim\Psr7\Request;
-use Slim\Psr7\Stream;
-use Slim\Psr7\UploadedFile;
-
-use function current;
-use function explode;
-use function fopen;
-use function in_array;
-use function is_string;
-
-class ServerRequestFactory implements ServerRequestFactoryInterface
-{
-    protected StreamFactoryInterface $streamFactory;
-
-    protected UriFactoryInterface $uriFactory;
-
-    /**
-     * @param StreamFactoryInterface|null $streamFactory
-     * @param UriFactoryInterface|null    $uriFactory
-     */
-    public function __construct(?StreamFactoryInterface $streamFactory = null, ?UriFactoryInterface $uriFactory = null)
-    {
-        $this->streamFactory = $streamFactory ?? new StreamFactory();
-        $this->uriFactory = $uriFactory ?? new UriFactory();
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface
-    {
-        if (is_string($uri)) {
-            $uri = $this->uriFactory->createUri($uri);
-        }
-
-        if (!$uri instanceof UriInterface) {
-            throw new InvalidArgumentException('URI must either be string or instance of ' . UriInterface::class);
-        }
-
-        $body = $this->streamFactory->createStream();
-        $headers = new Headers();
-        $cookies = [];
-
-        if (!empty($serverParams)) {
-            $headers = Headers::createFromGlobals();
-            $cookies = Cookies::parseHeader($headers->getHeader('Cookie', []));
-        }
-
-        return new Request($method, $uri, $headers, $cookies, $serverParams, $body);
-    }
-
-    /**
-     * Create new ServerRequest from environment.
-     *
-     * @internal This method is not part of PSR-17
-     *
-     * @return Request
-     */
-    public static function createFromGlobals(): Request
-    {
-        $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
-        $uri = (new UriFactory())->createFromGlobals($_SERVER);
-
-        $headers = Headers::createFromGlobals();
-        $cookies = Cookies::parseHeader($headers->getHeader('Cookie', []));
-
-        // Cache the php://input stream as it cannot be re-read
-        $cacheResource = fopen('php://temp', 'wb+');
-        $cache = $cacheResource ? new Stream($cacheResource) : null;
-
-        $body = (new StreamFactory())->createStreamFromFile('php://input', 'r', $cache);
-        $uploadedFiles = UploadedFile::createFromGlobals($_SERVER);
-
-        $request = new Request($method, $uri, $headers, $cookies, $_SERVER, $body, $uploadedFiles);
-        $contentTypes = $request->getHeader('Content-Type');
-
-        $parsedContentType = '';
-        foreach ($contentTypes as $contentType) {
-            $fragments = explode(';', $contentType);
-            $parsedContentType = current($fragments);
-        }
-
-        $contentTypesWithParsedBodies = ['application/x-www-form-urlencoded', 'multipart/form-data'];
-        if ($method === 'POST' && in_array($parsedContentType, $contentTypesWithParsedBodies)) {
-            return $request->withParsedBody($_POST);
-        }
-
-        return $request;
-    }
-}
diff --git a/vendor/slim/psr7/src/Factory/StreamFactory.php b/vendor/slim/psr7/src/Factory/StreamFactory.php
deleted file mode 100644
index 31d99b5e327eee6c644be36759729f8f03c4a02d..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Factory/StreamFactory.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7\Factory;
-
-use InvalidArgumentException;
-use Psr\Http\Message\StreamFactoryInterface;
-use Psr\Http\Message\StreamInterface;
-use RuntimeException;
-use Slim\Psr7\Stream;
-use ValueError;
-
-use function fopen;
-use function fwrite;
-use function is_resource;
-use function restore_error_handler;
-use function rewind;
-use function set_error_handler;
-
-class StreamFactory implements StreamFactoryInterface
-{
-    /**
-     * {@inheritdoc}
-     *
-     * @throws RuntimeException
-     */
-    public function createStream(string $content = ''): StreamInterface
-    {
-        $resource = fopen('php://temp', 'rw+');
-
-        if (!is_resource($resource)) {
-            throw new RuntimeException('StreamFactory::createStream() could not open temporary file stream.');
-        }
-
-        fwrite($resource, $content);
-        rewind($resource);
-
-        return $this->createStreamFromResource($resource);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function createStreamFromFile(
-        string $filename,
-        string $mode = 'r',
-        StreamInterface $cache = null
-    ): StreamInterface {
-        set_error_handler(
-            static function (int $errno, string $errstr) use ($filename, $mode): void {
-                throw new RuntimeException(
-                    "Unable to open $filename using mode $mode: $errstr",
-                    $errno
-                );
-            }
-        );
-
-        try {
-            $resource = fopen($filename, $mode);
-        } catch (ValueError $exception) {
-            throw new RuntimeException("Unable to open $filename using mode $mode: " . $exception->getMessage());
-        } finally {
-            restore_error_handler();
-        }
-
-        if (!is_resource($resource)) {
-            throw new RuntimeException(
-                "StreamFactory::createStreamFromFile() could not create resource from file `$filename`"
-            );
-        }
-
-        return new Stream($resource, $cache);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function createStreamFromResource($resource, StreamInterface $cache = null): StreamInterface
-    {
-        if (!is_resource($resource)) {
-            throw new InvalidArgumentException(
-                'Parameter 1 of StreamFactory::createStreamFromResource() must be a resource.'
-            );
-        }
-
-        return new Stream($resource, $cache);
-    }
-}
diff --git a/vendor/slim/psr7/src/Factory/UploadedFileFactory.php b/vendor/slim/psr7/src/Factory/UploadedFileFactory.php
deleted file mode 100644
index 5699e96dbeb5c5ddb5a8f155930b6262c40dfc83..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Factory/UploadedFileFactory.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7\Factory;
-
-use InvalidArgumentException;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UploadedFileFactoryInterface;
-use Psr\Http\Message\UploadedFileInterface;
-use Slim\Psr7\UploadedFile;
-
-use function is_string;
-
-use const UPLOAD_ERR_OK;
-
-class UploadedFileFactory implements UploadedFileFactoryInterface
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function createUploadedFile(
-        StreamInterface $stream,
-        ?int $size = null,
-        int $error = UPLOAD_ERR_OK,
-        ?string $clientFilename = null,
-        ?string $clientMediaType = null
-    ): UploadedFileInterface {
-        $file = $stream->getMetadata('uri');
-
-        if (!is_string($file) || !$stream->isReadable()) {
-            throw new InvalidArgumentException('File is not readable.');
-        }
-
-        if ($size === null) {
-            $size = $stream->getSize();
-        }
-
-        return new UploadedFile($stream, $clientFilename, $clientMediaType, $size, $error);
-    }
-}
diff --git a/vendor/slim/psr7/src/Factory/UriFactory.php b/vendor/slim/psr7/src/Factory/UriFactory.php
deleted file mode 100644
index 74ab377ad9f9047b5a7b9e64eac05177b374afc9..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Factory/UriFactory.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7\Factory;
-
-use InvalidArgumentException;
-use Psr\Http\Message\UriFactoryInterface;
-use Psr\Http\Message\UriInterface;
-use Slim\Psr7\Uri;
-
-use function count;
-use function explode;
-use function parse_url;
-use function preg_match;
-use function strpos;
-use function strstr;
-use function substr;
-
-use const PHP_URL_QUERY;
-
-class UriFactory implements UriFactoryInterface
-{
-    /**
-     * {@inheritdoc}
-     */
-    public function createUri(string $uri = ''): UriInterface
-    {
-        $parts = parse_url($uri);
-
-        if ($parts === false) {
-            throw new InvalidArgumentException('URI cannot be parsed');
-        }
-
-        $scheme = $parts['scheme'] ?? '';
-        $user = $parts['user'] ?? '';
-        $pass = $parts['pass'] ?? '';
-        $host = $parts['host'] ?? '';
-        $port = $parts['port'] ?? null;
-        $path = $parts['path'] ?? '';
-        $query = $parts['query'] ?? '';
-        $fragment = $parts['fragment'] ?? '';
-
-        return new Uri($scheme, $host, $port, $path, $query, $fragment, $user, $pass);
-    }
-
-    /**
-     * Create new Uri from environment.
-     *
-     * @internal This method is not part of PSR-17
-     *
-     * @param array $globals The global server variables.
-     *
-     * @return Uri
-     */
-    public function createFromGlobals(array $globals): Uri
-    {
-        // Scheme
-        $https = $globals['HTTPS'] ?? false;
-        $scheme = !$https || $https === 'off' ? 'http' : 'https';
-
-        // Authority: Username and password
-        $username = $globals['PHP_AUTH_USER'] ?? '';
-        $password = $globals['PHP_AUTH_PW'] ?? '';
-
-        // Authority: Host
-        $host = '';
-        if (isset($globals['HTTP_HOST'])) {
-            $host = $globals['HTTP_HOST'];
-        } elseif (isset($globals['SERVER_NAME'])) {
-            $host = $globals['SERVER_NAME'];
-        }
-
-        // Authority: Port
-        $port = !empty($globals['SERVER_PORT']) ? (int)$globals['SERVER_PORT'] : ($scheme === 'https' ? 443 : 80);
-        if (preg_match('/^(\[[a-fA-F0-9:.]+])(:\d+)?\z/', $host, $matches)) {
-            $host = $matches[1];
-
-            if (isset($matches[2])) {
-                $port = (int) substr($matches[2], 1);
-            }
-        } else {
-            $pos = strpos($host, ':');
-            if ($pos !== false) {
-                $port = (int) substr($host, $pos + 1);
-                $host = strstr($host, ':', true);
-            }
-        }
-
-        // Query string
-        $queryString = $globals['QUERY_STRING'] ?? '';
-
-        // Request URI
-        $requestUri = '';
-        if (isset($globals['REQUEST_URI'])) {
-            $uriFragments = explode('?', $globals['REQUEST_URI']);
-            $requestUri = $uriFragments[0];
-
-            if ($queryString === '' && count($uriFragments) > 1) {
-                $queryString = parse_url('https://www.example.com' . $globals['REQUEST_URI'], PHP_URL_QUERY) ?? '';
-            }
-        }
-
-        // Build Uri and return
-        return new Uri($scheme, $host, $port, $requestUri, $queryString, '', $username, $password);
-    }
-}
diff --git a/vendor/slim/psr7/src/Header.php b/vendor/slim/psr7/src/Header.php
deleted file mode 100644
index ecdad32db00486b931f64c98e023c99c4bc48657..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Header.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use InvalidArgumentException;
-
-use function array_merge;
-use function is_array;
-use function is_string;
-
-class Header
-{
-    private string $originalName;
-
-    private string $normalizedName;
-
-    private array $values;
-
-    /**
-     * Header constructor.
-     *
-     * @param string $originalName
-     * @param string $normalizedName
-     * @param array  $values
-     */
-    public function __construct(string $originalName, string $normalizedName, array $values)
-    {
-        $this->originalName = $originalName;
-        $this->normalizedName = $normalizedName;
-        $this->values = $values;
-    }
-
-    /**
-     * @return string
-     */
-    public function getOriginalName(): string
-    {
-        return $this->originalName;
-    }
-
-    /**
-     * @return string
-     */
-    public function getNormalizedName(): string
-    {
-        return $this->normalizedName;
-    }
-
-    /**
-     * @param string $value
-     *
-     * @return self
-     */
-    public function addValue(string $value): self
-    {
-        $this->values[] = $value;
-
-        return $this;
-    }
-
-    /**
-     * @param array|string $values
-     *
-     * @return self
-     */
-    public function addValues($values): self
-    {
-        if (is_string($values)) {
-            return $this->addValue($values);
-        }
-
-        if (!is_array($values)) {
-            throw new InvalidArgumentException('Parameter 1 of Header::addValues() should be a string or an array.');
-        }
-
-        $this->values = array_merge($this->values, $values);
-
-        return $this;
-    }
-
-    /**
-     * @return array
-     */
-    public function getValues(): array
-    {
-        return $this->values;
-    }
-}
diff --git a/vendor/slim/psr7/src/Headers.php b/vendor/slim/psr7/src/Headers.php
deleted file mode 100644
index 038e79206ff0256f14d453470e08b52801e28e71..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Headers.php
+++ /dev/null
@@ -1,318 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use InvalidArgumentException;
-use Slim\Psr7\Interfaces\HeadersInterface;
-
-use function base64_encode;
-use function function_exists;
-use function getallheaders;
-use function is_array;
-use function is_numeric;
-use function is_string;
-use function preg_match;
-use function strpos;
-use function strtolower;
-use function strtr;
-use function substr;
-use function trim;
-
-class Headers implements HeadersInterface
-{
-    protected array $globals;
-
-    /**
-     * @var Header[]
-     */
-    protected array $headers;
-
-    /**
-     * @param array      $headers
-     * @param array|null $globals
-     */
-    final public function __construct(array $headers = [], ?array $globals = null)
-    {
-        $this->globals = $globals ?? $_SERVER;
-        $this->setHeaders($headers);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function addHeader($name, $value): HeadersInterface
-    {
-        [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value);
-
-        if (isset($this->headers[$normalizedName])) {
-            $header = $this->headers[$normalizedName];
-            $header->addValues($values);
-        } else {
-            $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values);
-        }
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function removeHeader(string $name): HeadersInterface
-    {
-        $name = $this->normalizeHeaderName($name);
-        unset($this->headers[$name]);
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHeader(string $name, $default = []): array
-    {
-        $name = $this->normalizeHeaderName($name);
-
-        if (isset($this->headers[$name])) {
-            $header = $this->headers[$name];
-            return $header->getValues();
-        }
-
-        if (empty($default)) {
-            return $default;
-        }
-
-        $this->validateHeader($name, $default);
-        return $this->trimHeaderValue($default);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setHeader($name, $value): HeadersInterface
-    {
-        [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value);
-
-        // Ensure we preserve original case if the header already exists in the stack
-        if (isset($this->headers[$normalizedName])) {
-            $existingHeader = $this->headers[$normalizedName];
-            $originalName = $existingHeader->getOriginalName();
-        }
-
-        $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values);
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setHeaders(array $headers): HeadersInterface
-    {
-        $this->headers = [];
-
-        foreach ($this->parseAuthorizationHeader($headers) as $name => $value) {
-            $this->addHeader($name, $value);
-        }
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function hasHeader(string $name): bool
-    {
-        $name = $this->normalizeHeaderName($name);
-        return isset($this->headers[$name]);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHeaders(bool $originalCase = false): array
-    {
-        $headers = [];
-
-        foreach ($this->headers as $header) {
-            $name = $originalCase ? $header->getOriginalName() : $header->getNormalizedName();
-            $headers[$name] = $header->getValues();
-        }
-
-        return $headers;
-    }
-
-    /**
-     * @param string $name
-     * @param bool   $preserveCase
-     * @return string
-     */
-    protected function normalizeHeaderName(string $name, bool $preserveCase = false): string
-    {
-        $name = strtr($name, '_', '-');
-
-        if (!$preserveCase) {
-            $name = strtolower($name);
-        }
-
-        if (strpos(strtolower($name), 'http-') === 0) {
-            $name = substr($name, 5);
-        }
-
-        return $name;
-    }
-
-    /**
-     * Parse incoming headers and determine Authorization header from original headers
-     *
-     * @param array $headers
-     * @return array
-     */
-    protected function parseAuthorizationHeader(array $headers): array
-    {
-        $hasAuthorizationHeader = false;
-        foreach ($headers as $name => $value) {
-            if (strtolower((string) $name) === 'authorization') {
-                $hasAuthorizationHeader = true;
-                break;
-            }
-        }
-
-        if (!$hasAuthorizationHeader) {
-            if (isset($this->globals['REDIRECT_HTTP_AUTHORIZATION'])) {
-                $headers['Authorization'] = $this->globals['REDIRECT_HTTP_AUTHORIZATION'];
-            } elseif (isset($this->globals['PHP_AUTH_USER'])) {
-                $pw = $this->globals['PHP_AUTH_PW'] ?? '';
-                $headers['Authorization'] = 'Basic ' . base64_encode($this->globals['PHP_AUTH_USER'] . ':' . $pw);
-            } elseif (isset($this->globals['PHP_AUTH_DIGEST'])) {
-                $headers['Authorization'] = $this->globals['PHP_AUTH_DIGEST'];
-            }
-        }
-
-        return $headers;
-    }
-
-    /**
-     * @param array|string $value
-     *
-     * @return array
-     */
-    protected function trimHeaderValue($value): array
-    {
-        $items = is_array($value) ? $value : [$value];
-        $result = [];
-        foreach ($items as $item) {
-            $result[] = trim((string) $item, " \t");
-        }
-        return $result;
-    }
-
-    /**
-     * @param string       $name
-     * @param array|string $value
-     *
-     * @throws InvalidArgumentException
-     *
-     * @return array
-     */
-    protected function prepareHeader($name, $value): array
-    {
-        $this->validateHeader($name, $value);
-        $values = $this->trimHeaderValue($value);
-        $originalName = $this->normalizeHeaderName($name, true);
-        $normalizedName = $this->normalizeHeaderName($name);
-        return [$values, $originalName, $normalizedName];
-    }
-
-    /**
-     * Make sure the header complies with RFC 7230.
-     *
-     * Header names must be a non-empty string consisting of token characters.
-     *
-     * Header values must be strings consisting of visible characters with all optional
-     * leading and trailing whitespace stripped. This method will always strip such
-     * optional whitespace. Note that the method does not allow folding whitespace within
-     * the values as this was deprecated for almost all instances by the RFC.
-     *
-     * header-field = field-name ":" OWS field-value OWS
-     * field-name   = 1*( "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^"
-     *              / "_" / "`" / "|" / "~" / %x30-39 / ( %x41-5A / %x61-7A ) )
-     * OWS          = *( SP / HTAB )
-     * field-value  = *( ( %x21-7E / %x80-FF ) [ 1*( SP / HTAB ) ( %x21-7E / %x80-FF ) ] )
-     *
-     * @see https://tools.ietf.org/html/rfc7230#section-3.2.4
-     *
-     * @param string        $name
-     * @param array|string  $value
-     *
-     * @throws InvalidArgumentException;
-     */
-    protected function validateHeader($name, $value): void
-    {
-        $this->validateHeaderName($name);
-        $this->validateHeaderValue($value);
-    }
-
-    /**
-     * @param mixed $name
-     *
-     * @throws InvalidArgumentException
-     */
-    protected function validateHeaderName($name): void
-    {
-        if (!is_string($name) || preg_match("@^[!#$%&'*+.^_`|~0-9A-Za-z-]+$@", $name) !== 1) {
-            throw new InvalidArgumentException('Header name must be an RFC 7230 compatible string.');
-        }
-    }
-
-    /**
-     * @param mixed $value
-     *
-     * @throws InvalidArgumentException
-     */
-    protected function validateHeaderValue($value): void
-    {
-        $items = is_array($value) ? $value : [$value];
-
-        if (empty($items)) {
-            throw new InvalidArgumentException(
-                'Header values must be a string or an array of strings, empty array given.'
-            );
-        }
-
-        $pattern = "@^[ \t\x21-\x7E\x80-\xFF]*$@";
-        foreach ($items as $item) {
-            $hasInvalidType = !is_numeric($item) && !is_string($item);
-            $rejected = $hasInvalidType || preg_match($pattern, (string) $item) !== 1;
-            if ($rejected) {
-                throw new InvalidArgumentException(
-                    'Header values must be RFC 7230 compatible strings.'
-                );
-            }
-        }
-    }
-
-    /**
-     * @return static
-     */
-    public static function createFromGlobals()
-    {
-        $headers = null;
-
-        if (function_exists('getallheaders')) {
-            $headers = getallheaders();
-        }
-
-        if (!is_array($headers)) {
-            $headers = [];
-        }
-
-        return new static($headers);
-    }
-}
diff --git a/vendor/slim/psr7/src/Interfaces/HeadersInterface.php b/vendor/slim/psr7/src/Interfaces/HeadersInterface.php
deleted file mode 100644
index 3f486f170bec914b2c118a39e5a88da742be94f2..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Interfaces/HeadersInterface.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7\Interfaces;
-
-use InvalidArgumentException;
-
-interface HeadersInterface
-{
-    /**
-     * Add header value
-     *
-     * This method appends the value to the existing array of values
-     *
-     * @param string       $name
-     * @param array|string $value
-     *
-     * @return HeadersInterface
-     *
-     * @throws InvalidArgumentException
-     */
-    public function addHeader($name, $value): HeadersInterface;
-
-    /**
-     * Remove header value
-     *
-     * @param string $name
-     * @return HeadersInterface
-     */
-    public function removeHeader(string $name): HeadersInterface;
-
-    /**
-     * Get header value or values.
-     * If the array has a single value it will return that single value.
-     * If the array has multiple values, it will return an array of values.
-     *
-     * @param string   $name
-     * @param string[] $default
-     *
-     * @return array
-     */
-    public function getHeader(string $name, $default = []): array;
-
-    /**
-     * Replaces the existing header value with the new value.
-     *
-     * @param string       $name
-     * @param array|string $value
-     *
-     * @return HeadersInterface
-     *
-     * @throws InvalidArgumentException
-     */
-    public function setHeader($name, $value): HeadersInterface;
-
-    /**
-     * Replaces all existing headers with the new values.
-     *
-     * @param array $headers
-     *
-     * @return HeadersInterface
-     *
-     * @throws InvalidArgumentException
-     */
-    public function setHeaders(array $headers): HeadersInterface;
-
-    /**
-     * Is the header present in the stack.
-     *
-     * @param string $name
-     * @return bool
-     */
-    public function hasHeader(string $name): bool;
-
-    /**
-     * Return all headers in the stack.
-     *
-     * @param bool $originalCase
-     *
-     * @return array
-     */
-    public function getHeaders(bool $originalCase): array;
-}
diff --git a/vendor/slim/psr7/src/Message.php b/vendor/slim/psr7/src/Message.php
deleted file mode 100644
index 03e4123b64f911e8cfb94fc69cafdcd11d645942..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Message.php
+++ /dev/null
@@ -1,185 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\MessageInterface;
-use Psr\Http\Message\StreamInterface;
-use Slim\Psr7\Interfaces\HeadersInterface;
-
-use function array_keys;
-use function header;
-use function header_remove;
-use function implode;
-use function sprintf;
-
-abstract class Message implements MessageInterface
-{
-    protected string $protocolVersion = '1.1';
-
-    protected static array $validProtocolVersions = [
-        '1.0' => true,
-        '1.1' => true,
-        '2.0' => true,
-        '2' => true,
-    ];
-
-    /**
-     * @var HeadersInterface
-     */
-    protected $headers;
-
-    /**
-     * @var StreamInterface
-     */
-    protected $body;
-
-    /**
-     * Disable magic setter to ensure immutability
-     *
-     * @param string $name  The property name
-     * @param mixed  $value The property value
-     *
-     * @return void
-     */
-    public function __set($name, $value): void
-    {
-        // Do nothing
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getProtocolVersion(): string
-    {
-        return $this->protocolVersion;
-    }
-
-    /**
-     * @return static
-     * {@inheritdoc}
-     */
-    public function withProtocolVersion($version)
-    {
-        if (!isset(self::$validProtocolVersions[$version])) {
-            throw new InvalidArgumentException(
-                'Invalid HTTP version. Must be one of: '
-                . implode(', ', array_keys(self::$validProtocolVersions))
-            );
-        }
-
-        $clone = clone $this;
-        $clone->protocolVersion = $version;
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHeaders(): array
-    {
-        return $this->headers->getHeaders(true);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function hasHeader($name): bool
-    {
-        return $this->headers->hasHeader($name);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHeader($name): array
-    {
-        return $this->headers->getHeader($name);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHeaderLine($name): string
-    {
-        $values = $this->headers->getHeader($name);
-        return implode(',', $values);
-    }
-
-    /**
-     * @return static
-     * {@inheritdoc}
-     */
-    public function withHeader($name, $value)
-    {
-        $clone = clone $this;
-        $clone->headers->setHeader($name, $value);
-
-        if ($this instanceof Response && $this->body instanceof NonBufferedBody) {
-            header(sprintf('%s: %s', $name, $clone->getHeaderLine($name)));
-        }
-
-        return $clone;
-    }
-
-    /**
-     * @return static
-     * {@inheritdoc}
-     */
-    public function withAddedHeader($name, $value)
-    {
-        $clone = clone $this;
-        $clone->headers->addHeader($name, $value);
-
-        if ($this instanceof Response && $this->body instanceof NonBufferedBody) {
-            header(sprintf('%s: %s', $name, $clone->getHeaderLine($name)));
-        }
-
-        return $clone;
-    }
-
-    /**
-     * @return static
-     * {@inheritdoc}
-     */
-    public function withoutHeader($name)
-    {
-        $clone = clone $this;
-        $clone->headers->removeHeader($name);
-
-        if ($this instanceof Response && $this->body instanceof NonBufferedBody) {
-            header_remove($name);
-        }
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getBody(): StreamInterface
-    {
-        return $this->body;
-    }
-
-    /**
-     * @return static
-     * {@inheritdoc}
-     */
-    public function withBody(StreamInterface $body)
-    {
-        $clone = clone $this;
-        $clone->body = $body;
-
-        return $clone;
-    }
-}
diff --git a/vendor/slim/psr7/src/Request.php b/vendor/slim/psr7/src/Request.php
deleted file mode 100644
index 0b9334a78ef9875e03b74e9d80b3c1efebee7e73..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Request.php
+++ /dev/null
@@ -1,384 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UploadedFileInterface;
-use Psr\Http\Message\UriInterface;
-use Slim\Psr7\Interfaces\HeadersInterface;
-
-use function get_class;
-use function gettype;
-use function is_array;
-use function is_null;
-use function is_object;
-use function is_string;
-use function ltrim;
-use function parse_str;
-use function preg_match;
-use function sprintf;
-use function str_replace;
-
-class Request extends Message implements ServerRequestInterface
-{
-    /**
-     * @var string
-     */
-    protected $method;
-
-    /**
-     * @var UriInterface
-     */
-    protected $uri;
-
-    /**
-     * @var string
-     */
-    protected $requestTarget;
-
-    /**
-     * @var ?array
-     */
-    protected $queryParams;
-
-    protected array $cookies;
-
-    protected array $serverParams;
-
-    protected array $attributes;
-
-    /**
-     * @var null|array|object
-     */
-    protected $parsedBody;
-
-    /**
-     * @var UploadedFileInterface[]
-     */
-    protected array $uploadedFiles;
-
-    /**
-     * @param string           $method        The request method
-     * @param UriInterface     $uri           The request URI object
-     * @param HeadersInterface $headers       The request headers collection
-     * @param array            $cookies       The request cookies collection
-     * @param array            $serverParams  The server environment variables
-     * @param StreamInterface  $body          The request body object
-     * @param array            $uploadedFiles The request uploadedFiles collection
-     * @throws InvalidArgumentException on invalid HTTP method
-     */
-    public function __construct(
-        $method,
-        UriInterface $uri,
-        HeadersInterface $headers,
-        array $cookies,
-        array $serverParams,
-        StreamInterface $body,
-        array $uploadedFiles = []
-    ) {
-        $this->method = $this->filterMethod($method);
-        $this->uri = $uri;
-        $this->headers = $headers;
-        $this->cookies = $cookies;
-        $this->serverParams = $serverParams;
-        $this->attributes = [];
-        $this->body = $body;
-        $this->uploadedFiles = $uploadedFiles;
-
-        if (isset($serverParams['SERVER_PROTOCOL'])) {
-            $this->protocolVersion = str_replace('HTTP/', '', $serverParams['SERVER_PROTOCOL']);
-        }
-
-        if (!$this->headers->hasHeader('Host') || $this->uri->getHost() !== '') {
-            $this->headers->setHeader('Host', $this->uri->getHost());
-        }
-    }
-
-    /**
-     * This method is applied to the cloned object after PHP performs an initial shallow-copy.
-     * This method completes a deep-copy by creating new objects for the cloned object's internal reference pointers.
-     */
-    public function __clone()
-    {
-        $this->headers = clone $this->headers;
-        $this->body = clone $this->body;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getMethod(): string
-    {
-        return $this->method;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withMethod($method)
-    {
-        $method = $this->filterMethod($method);
-        $clone = clone $this;
-        $clone->method = $method;
-
-        return $clone;
-    }
-
-    /**
-     * Validate the HTTP method
-     *
-     * @param  string $method
-     *
-     * @return string
-     *
-     * @throws InvalidArgumentException on invalid HTTP method.
-     */
-    protected function filterMethod($method): string
-    {
-        /** @var mixed $method */
-        if (!is_string($method)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unsupported HTTP method; must be a string, received %s',
-                (is_object($method) ? get_class($method) : gettype($method))
-            ));
-        }
-
-        if (preg_match("/^[!#$%&'*+.^_`|~0-9a-z-]+$/i", $method) !== 1) {
-            throw new InvalidArgumentException(sprintf(
-                'Unsupported HTTP method "%s" provided',
-                $method
-            ));
-        }
-
-        return $method;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getRequestTarget(): string
-    {
-        if ($this->requestTarget) {
-            return $this->requestTarget;
-        }
-
-        if ($this->uri === null) {
-            return '/';
-        }
-
-        $path = $this->uri->getPath();
-        $path = '/' . ltrim($path, '/');
-
-        $query = $this->uri->getQuery();
-        if ($query) {
-            $path .= '?' . $query;
-        }
-
-        return $path;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withRequestTarget($requestTarget)
-    {
-        if (!is_string($requestTarget) || preg_match('#\s#', $requestTarget)) {
-            throw new InvalidArgumentException(
-                'Invalid request target provided; must be a string and cannot contain whitespace'
-            );
-        }
-
-        $clone = clone $this;
-        $clone->requestTarget = $requestTarget;
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getUri(): UriInterface
-    {
-        return $this->uri;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withUri(UriInterface $uri, $preserveHost = false)
-    {
-        $clone = clone $this;
-        $clone->uri = $uri;
-
-        if (!$preserveHost && $uri->getHost() !== '') {
-            $clone->headers->setHeader('Host', $uri->getHost());
-            return $clone;
-        }
-
-        if (($uri->getHost() !== '' && !$this->hasHeader('Host') || $this->getHeaderLine('Host') === '')) {
-            $clone->headers->setHeader('Host', $uri->getHost());
-            return $clone;
-        }
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getCookieParams(): array
-    {
-        return $this->cookies;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withCookieParams(array $cookies)
-    {
-        $clone = clone $this;
-        $clone->cookies = $cookies;
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getQueryParams(): array
-    {
-        if (is_array($this->queryParams)) {
-            return $this->queryParams;
-        }
-
-        if ($this->uri === null) {
-            return [];
-        }
-
-        parse_str($this->uri->getQuery(), $this->queryParams); // <-- URL decodes data
-        assert(is_array($this->queryParams));
-
-        return $this->queryParams;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withQueryParams(array $query)
-    {
-        $clone = clone $this;
-        $clone->queryParams = $query;
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getUploadedFiles(): array
-    {
-        return $this->uploadedFiles;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withUploadedFiles(array $uploadedFiles)
-    {
-        $clone = clone $this;
-        $clone->uploadedFiles = $uploadedFiles;
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getServerParams(): array
-    {
-        return $this->serverParams;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getAttributes(): array
-    {
-        return $this->attributes;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return mixed
-     */
-    public function getAttribute($name, $default = null)
-    {
-        return $this->attributes[$name] ?? $default;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withAttribute($name, $value)
-    {
-        $clone = clone $this;
-        $clone->attributes[$name] = $value;
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withoutAttribute($name)
-    {
-        $clone = clone $this;
-
-        unset($clone->attributes[$name]);
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getParsedBody()
-    {
-        return $this->parsedBody;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withParsedBody($data)
-    {
-        /** @var mixed $data */
-        if (!is_null($data) && !is_object($data) && !is_array($data)) {
-            throw new InvalidArgumentException('Parsed body value must be an array, an object, or null');
-        }
-
-        $clone = clone $this;
-        $clone->parsedBody = $data;
-
-        return $clone;
-    }
-}
diff --git a/vendor/slim/psr7/src/Response.php b/vendor/slim/psr7/src/Response.php
deleted file mode 100644
index c6d4c6eb7633a75ddfb5ccef0091a25219c6773d..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Response.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use Fig\Http\Message\StatusCodeInterface;
-use InvalidArgumentException;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\StreamInterface;
-use Slim\Psr7\Factory\StreamFactory;
-use Slim\Psr7\Interfaces\HeadersInterface;
-
-use function is_integer;
-use function is_object;
-use function is_string;
-use function method_exists;
-
-class Response extends Message implements ResponseInterface
-{
-    protected int $status = StatusCodeInterface::STATUS_OK;
-
-    protected string $reasonPhrase = '';
-
-    protected static array $messages = [
-        // Informational 1xx
-        StatusCodeInterface::STATUS_CONTINUE => 'Continue',
-        StatusCodeInterface::STATUS_SWITCHING_PROTOCOLS => 'Switching Protocols',
-        StatusCodeInterface::STATUS_PROCESSING => 'Processing',
-
-        // Successful 2xx
-        StatusCodeInterface::STATUS_OK => 'OK',
-        StatusCodeInterface::STATUS_CREATED => 'Created',
-        StatusCodeInterface::STATUS_ACCEPTED => 'Accepted',
-        StatusCodeInterface::STATUS_NON_AUTHORITATIVE_INFORMATION => 'Non-Authoritative Information',
-        StatusCodeInterface::STATUS_NO_CONTENT => 'No Content',
-        StatusCodeInterface::STATUS_RESET_CONTENT => 'Reset Content',
-        StatusCodeInterface::STATUS_PARTIAL_CONTENT => 'Partial Content',
-        StatusCodeInterface::STATUS_MULTI_STATUS => 'Multi-Status',
-        StatusCodeInterface::STATUS_ALREADY_REPORTED => 'Already Reported',
-        StatusCodeInterface::STATUS_IM_USED => 'IM Used',
-
-        // Redirection 3xx
-        StatusCodeInterface::STATUS_MULTIPLE_CHOICES => 'Multiple Choices',
-        StatusCodeInterface::STATUS_MOVED_PERMANENTLY => 'Moved Permanently',
-        StatusCodeInterface::STATUS_FOUND => 'Found',
-        StatusCodeInterface::STATUS_SEE_OTHER => 'See Other',
-        StatusCodeInterface::STATUS_NOT_MODIFIED => 'Not Modified',
-        StatusCodeInterface::STATUS_USE_PROXY => 'Use Proxy',
-        StatusCodeInterface::STATUS_RESERVED => '(Unused)',
-        StatusCodeInterface::STATUS_TEMPORARY_REDIRECT => 'Temporary Redirect',
-        StatusCodeInterface::STATUS_PERMANENT_REDIRECT => 'Permanent Redirect',
-
-        // Client Error 4xx
-        StatusCodeInterface::STATUS_BAD_REQUEST => 'Bad Request',
-        StatusCodeInterface::STATUS_UNAUTHORIZED => 'Unauthorized',
-        StatusCodeInterface::STATUS_PAYMENT_REQUIRED => 'Payment Required',
-        StatusCodeInterface::STATUS_FORBIDDEN => 'Forbidden',
-        StatusCodeInterface::STATUS_NOT_FOUND => 'Not Found',
-        StatusCodeInterface::STATUS_METHOD_NOT_ALLOWED => 'Method Not Allowed',
-        StatusCodeInterface::STATUS_NOT_ACCEPTABLE => 'Not Acceptable',
-        StatusCodeInterface::STATUS_PROXY_AUTHENTICATION_REQUIRED => 'Proxy Authentication Required',
-        StatusCodeInterface::STATUS_REQUEST_TIMEOUT => 'Request Timeout',
-        StatusCodeInterface::STATUS_CONFLICT => 'Conflict',
-        StatusCodeInterface::STATUS_GONE => 'Gone',
-        StatusCodeInterface::STATUS_LENGTH_REQUIRED => 'Length Required',
-        StatusCodeInterface::STATUS_PRECONDITION_FAILED => 'Precondition Failed',
-        StatusCodeInterface::STATUS_PAYLOAD_TOO_LARGE => 'Request Entity Too Large',
-        StatusCodeInterface::STATUS_URI_TOO_LONG => 'Request-URI Too Long',
-        StatusCodeInterface::STATUS_UNSUPPORTED_MEDIA_TYPE => 'Unsupported Media Type',
-        StatusCodeInterface::STATUS_RANGE_NOT_SATISFIABLE => 'Requested Range Not Satisfiable',
-        StatusCodeInterface::STATUS_EXPECTATION_FAILED => 'Expectation Failed',
-        StatusCodeInterface::STATUS_IM_A_TEAPOT => 'I\'m a teapot',
-        StatusCodeInterface::STATUS_MISDIRECTED_REQUEST => 'Misdirected Request',
-        StatusCodeInterface::STATUS_UNPROCESSABLE_ENTITY => 'Unprocessable Entity',
-        StatusCodeInterface::STATUS_LOCKED => 'Locked',
-        StatusCodeInterface::STATUS_FAILED_DEPENDENCY => 'Failed Dependency',
-        StatusCodeInterface::STATUS_UPGRADE_REQUIRED => 'Upgrade Required',
-        StatusCodeInterface::STATUS_PRECONDITION_REQUIRED => 'Precondition Required',
-        StatusCodeInterface::STATUS_TOO_MANY_REQUESTS => 'Too Many Requests',
-        StatusCodeInterface::STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large',
-        444 => 'Connection Closed Without Response',
-        StatusCodeInterface::STATUS_UNAVAILABLE_FOR_LEGAL_REASONS => 'Unavailable For Legal Reasons',
-        499 => 'Client Closed Request',
-
-        // Server Error 5xx
-        StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR => 'Internal Server Error',
-        StatusCodeInterface::STATUS_NOT_IMPLEMENTED => 'Not Implemented',
-        StatusCodeInterface::STATUS_BAD_GATEWAY => 'Bad Gateway',
-        StatusCodeInterface::STATUS_SERVICE_UNAVAILABLE => 'Service Unavailable',
-        StatusCodeInterface::STATUS_GATEWAY_TIMEOUT => 'Gateway Timeout',
-        StatusCodeInterface::STATUS_VERSION_NOT_SUPPORTED => 'HTTP Version Not Supported',
-        StatusCodeInterface::STATUS_VARIANT_ALSO_NEGOTIATES => 'Variant Also Negotiates',
-        StatusCodeInterface::STATUS_INSUFFICIENT_STORAGE => 'Insufficient Storage',
-        StatusCodeInterface::STATUS_LOOP_DETECTED => 'Loop Detected',
-        StatusCodeInterface::STATUS_NOT_EXTENDED => 'Not Extended',
-        StatusCodeInterface::STATUS_NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required',
-        599 => 'Network Connect Timeout Error',
-    ];
-
-    /**
-     * @param int                   $status  The response status code.
-     * @param HeadersInterface|null $headers The response headers.
-     * @param StreamInterface|null  $body    The response body.
-     */
-    public function __construct(
-        int $status = StatusCodeInterface::STATUS_OK,
-        ?HeadersInterface $headers = null,
-        ?StreamInterface $body = null
-    ) {
-        $this->status = $this->filterStatus($status);
-        $this->headers = $headers ?: new Headers([], []);
-        $this->body = $body ?: (new StreamFactory())->createStream();
-    }
-
-    /**
-     * This method is applied to the cloned object after PHP performs an initial shallow-copy.
-     * This method completes a deep-copy by creating new objects for the cloned object's internal reference pointers.
-     */
-    public function __clone()
-    {
-        $this->headers = clone $this->headers;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getStatusCode(): int
-    {
-        return $this->status;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withStatus($code, $reasonPhrase = '')
-    {
-        $code = $this->filterStatus($code);
-        $reasonPhrase = $this->filterReasonPhrase($reasonPhrase);
-
-        $clone = clone $this;
-        $clone->status = $code;
-        $clone->reasonPhrase = $reasonPhrase;
-
-        return $clone;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getReasonPhrase(): string
-    {
-        if ($this->reasonPhrase !== '') {
-            return $this->reasonPhrase;
-        }
-
-        if (isset(static::$messages[$this->status])) {
-            return static::$messages[$this->status];
-        }
-
-        return '';
-    }
-
-    /**
-     * Filter HTTP status code.
-     *
-     * @param  int $status HTTP status code.
-     *
-     * @return int
-     *
-     * @throws InvalidArgumentException If an invalid HTTP status code is provided.
-     */
-    protected function filterStatus($status): int
-    {
-        if (!is_integer($status) || $status < StatusCodeInterface::STATUS_CONTINUE || $status > 599) {
-            throw new InvalidArgumentException('Invalid HTTP status code.');
-        }
-
-        return $status;
-    }
-
-    /**
-     * Filter Reason Phrase
-     *
-     * @param mixed $reasonPhrase
-     *
-     * @return string
-     *
-     * @throws InvalidArgumentException
-     */
-    protected function filterReasonPhrase($reasonPhrase = ''): string
-    {
-        if (is_object($reasonPhrase) && method_exists($reasonPhrase, '__toString')) {
-            $reasonPhrase = (string) $reasonPhrase;
-        }
-
-        if (!is_string($reasonPhrase)) {
-            throw new InvalidArgumentException('Response reason phrase must be a string.');
-        }
-
-        if (strpos($reasonPhrase, "\r") !== false || strpos($reasonPhrase, "\n") !== false) {
-            throw new InvalidArgumentException(
-                'Reason phrase contains one of the following prohibited characters: \r \n'
-            );
-        }
-
-        return $reasonPhrase;
-    }
-}
diff --git a/vendor/slim/psr7/src/Stream.php b/vendor/slim/psr7/src/Stream.php
deleted file mode 100644
index 9de66859aadf4ba4afe42bdf8009f97f50af9c24..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Stream.php
+++ /dev/null
@@ -1,396 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\StreamInterface;
-use RuntimeException;
-
-use function fclose;
-use function feof;
-use function fread;
-use function fseek;
-use function fstat;
-use function ftell;
-use function fwrite;
-use function is_array;
-use function is_resource;
-use function is_string;
-use function pclose;
-use function rewind;
-use function stream_get_contents;
-use function stream_get_meta_data;
-use function strstr;
-
-use const SEEK_SET;
-
-class Stream implements StreamInterface
-{
-    /**
-     * Bit mask to determine if the stream is a pipe
-     *
-     * This is octal as per header stat.h
-     */
-    public const FSTAT_MODE_S_IFIFO = 0010000;
-
-    /**
-     * The underlying stream resource
-     *
-     * @var resource|null
-     */
-    protected $stream;
-
-    protected ?array $meta;
-
-    protected ?bool $readable = null;
-
-    protected ?bool $writable = null;
-
-    protected ?bool $seekable = null;
-
-    protected ?int $size = null;
-
-    protected ?bool $isPipe = null;
-
-    protected bool $finished = false;
-
-    protected ?StreamInterface $cache;
-
-    /**
-     * @param  resource         $stream A PHP resource handle.
-     * @param  ?StreamInterface $cache  A stream to cache $stream (useful for non-seekable streams)
-     *
-     * @throws InvalidArgumentException If argument is not a resource.
-     */
-    public function __construct($stream, ?StreamInterface $cache = null)
-    {
-        $this->attach($stream);
-
-        if ($cache && (!$cache->isSeekable() || !$cache->isWritable())) {
-            throw new RuntimeException('Cache stream must be seekable and writable');
-        }
-        $this->cache = $cache;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return array|mixed
-     */
-    public function getMetadata($key = null)
-    {
-        if (!$this->stream) {
-            return null;
-        }
-
-        $this->meta = stream_get_meta_data($this->stream);
-
-        if (!$key) {
-            return $this->meta;
-        }
-
-        return $this->meta[$key] ?? null;
-    }
-
-    /**
-     * Attach new resource to this object.
-     *
-     * @internal This method is not part of the PSR-7 standard.
-     *
-     * @param resource $stream A PHP resource handle.
-     *
-     * @throws InvalidArgumentException If argument is not a valid PHP resource.
-     *
-     * @return void
-     */
-    protected function attach($stream): void
-    {
-        if (!is_resource($stream)) {
-            throw new InvalidArgumentException(__METHOD__ . ' argument must be a valid PHP resource');
-        }
-
-        if ($this->stream) {
-            $this->detach();
-        }
-
-        $this->stream = $stream;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function detach()
-    {
-        $oldResource = $this->stream;
-        $this->stream = null;
-        $this->meta = null;
-        $this->readable = null;
-        $this->writable = null;
-        $this->seekable = null;
-        $this->size = null;
-        $this->isPipe = null;
-
-        $this->cache = null;
-        $this->finished = false;
-
-        return $oldResource;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function __toString(): string
-    {
-        if (!$this->stream) {
-            return '';
-        }
-        if ($this->cache && $this->finished) {
-            $this->cache->rewind();
-            return $this->cache->getContents();
-        }
-        if ($this->isSeekable()) {
-            $this->rewind();
-        }
-        return $this->getContents();
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function close(): void
-    {
-        if ($this->stream) {
-            if ($this->isPipe()) {
-                pclose($this->stream);
-            } else {
-                fclose($this->stream);
-            }
-        }
-
-        $this->detach();
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getSize(): ?int
-    {
-        if ($this->stream && !$this->size) {
-            $stats = fstat($this->stream);
-
-            if ($stats) {
-                $this->size = !$this->isPipe() ? $stats['size'] : null;
-            }
-        }
-
-        return $this->size;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function tell(): int
-    {
-        $position = false;
-
-        if ($this->stream) {
-            $position = ftell($this->stream);
-        }
-
-        if ($position === false || $this->isPipe()) {
-            throw new RuntimeException('Could not get the position of the pointer in stream.');
-        }
-
-        return $position;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function eof(): bool
-    {
-        return !$this->stream || feof($this->stream);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isReadable(): bool
-    {
-        if ($this->readable !== null) {
-            return $this->readable;
-        }
-
-        $this->readable = false;
-
-        if ($this->stream) {
-            $mode = $this->getMetadata('mode');
-
-            if (is_string($mode) && (strstr($mode, 'r') !== false || strstr($mode, '+') !== false)) {
-                $this->readable = true;
-            }
-        }
-
-        return $this->readable;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isWritable(): bool
-    {
-        if ($this->writable === null) {
-            $this->writable = false;
-
-            if ($this->stream) {
-                $mode = $this->getMetadata('mode');
-
-                if (is_string($mode) && (strstr($mode, 'w') !== false || strstr($mode, '+') !== false)) {
-                    $this->writable = true;
-                }
-            }
-        }
-
-        return $this->writable;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function isSeekable(): bool
-    {
-        if ($this->seekable === null) {
-            $this->seekable = false;
-
-            if ($this->stream) {
-                $this->seekable = !$this->isPipe() && $this->getMetadata('seekable');
-            }
-        }
-
-        return $this->seekable;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function seek($offset, $whence = SEEK_SET): void
-    {
-        if (!$this->isSeekable() || $this->stream && fseek($this->stream, $offset, $whence) === -1) {
-            throw new RuntimeException('Could not seek in stream.');
-        }
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function rewind(): void
-    {
-        if (!$this->isSeekable() || $this->stream && rewind($this->stream) === false) {
-            throw new RuntimeException('Could not rewind stream.');
-        }
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function read($length): string
-    {
-        $data = false;
-
-        if ($this->isReadable() && $this->stream && $length >= 0) {
-            $data = fread($this->stream, $length);
-        }
-
-        if (is_string($data)) {
-            if ($this->cache) {
-                $this->cache->write($data);
-            }
-            if ($this->eof()) {
-                $this->finished = true;
-            }
-            return $data;
-        }
-
-        throw new RuntimeException('Could not read from stream.');
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return int
-     */
-    public function write($string)
-    {
-        $written = false;
-
-        if ($this->isWritable() && $this->stream) {
-            $written = fwrite($this->stream, $string);
-        }
-
-        if ($written !== false) {
-            $this->size = null;
-            return $written;
-        }
-
-        throw new RuntimeException('Could not write to stream.');
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getContents(): string
-    {
-        if ($this->cache && $this->finished) {
-            $this->cache->rewind();
-            return $this->cache->getContents();
-        }
-
-        $contents = false;
-
-        if ($this->stream) {
-            $contents = stream_get_contents($this->stream);
-        }
-
-        if (is_string($contents)) {
-            if ($this->cache) {
-                $this->cache->write($contents);
-            }
-            if ($this->eof()) {
-                $this->finished = true;
-            }
-            return $contents;
-        }
-
-        throw new RuntimeException('Could not get contents of stream.');
-    }
-
-    /**
-     * Returns whether or not the stream is a pipe.
-     *
-     * @internal This method is not part of the PSR-7 standard.
-     *
-     * @return bool
-     */
-    public function isPipe(): bool
-    {
-        if ($this->isPipe === null) {
-            $this->isPipe = false;
-
-            if ($this->stream) {
-                $stats = fstat($this->stream);
-
-                if (is_array($stats)) {
-                    $this->isPipe = ($stats['mode'] & self::FSTAT_MODE_S_IFIFO) !== 0;
-                }
-            }
-        }
-
-        return $this->isPipe;
-    }
-}
diff --git a/vendor/slim/psr7/src/UploadedFile.php b/vendor/slim/psr7/src/UploadedFile.php
deleted file mode 100644
index b0c4df5bdbf988de030e4833d33b920852ab84f1..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/UploadedFile.php
+++ /dev/null
@@ -1,279 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UploadedFileInterface;
-use RuntimeException;
-use Slim\Psr7\Factory\StreamFactory;
-
-use function copy;
-use function dirname;
-use function is_array;
-use function is_string;
-use function is_uploaded_file;
-use function is_writable;
-use function move_uploaded_file;
-use function rename;
-use function sprintf;
-use function strpos;
-use function unlink;
-
-use const UPLOAD_ERR_OK;
-
-class UploadedFile implements UploadedFileInterface
-{
-    /**
-     * The client-provided full path to the file
-     */
-    protected string $file;
-
-    /**
-     * The client-provided file name.
-     */
-    protected ?string $name;
-
-    /**
-     * The client-provided media type of the file.
-     */
-    protected ?string $type;
-
-    protected ?int $size;
-
-    /**
-     * A valid PHP UPLOAD_ERR_xxx code for the file upload.
-     */
-    protected int $error = UPLOAD_ERR_OK;
-
-    /**
-     * Indicates if the upload is from a SAPI environment.
-     */
-    protected bool $sapi = false;
-
-    /**
-     * @var StreamInterface|null
-     */
-    protected $stream;
-
-    /**
-     * Indicates if the uploaded file has already been moved.
-     */
-    protected bool $moved = false;
-
-    /**
-     * @param string|StreamInterface $fileNameOrStream The full path to the uploaded file provided by the client,
-     *                                                 or a StreamInterface instance.
-     * @param string|null            $name             The file name.
-     * @param string|null            $type             The file media type.
-     * @param int|null               $size             The file size in bytes.
-     * @param int                    $error            The UPLOAD_ERR_XXX code representing the status of the upload.
-     * @param bool                   $sapi             Indicates if the upload is in a SAPI environment.
-     */
-    final public function __construct(
-        $fileNameOrStream,
-        ?string $name = null,
-        ?string $type = null,
-        ?int $size = null,
-        int $error = UPLOAD_ERR_OK,
-        bool $sapi = false
-    ) {
-        if ($fileNameOrStream instanceof StreamInterface) {
-            $file = $fileNameOrStream->getMetadata('uri');
-            if (!is_string($file)) {
-                throw new InvalidArgumentException('No URI associated with the stream.');
-            }
-            $this->file = $file;
-            $this->stream = $fileNameOrStream;
-        } elseif (is_string($fileNameOrStream)) {
-            $this->file = $fileNameOrStream;
-        } else {
-            throw new InvalidArgumentException(
-                'Please provide a string (full path to the uploaded file) or an instance of StreamInterface.'
-            );
-        }
-        $this->name = $name;
-        $this->type = $type;
-        $this->size = $size;
-        $this->error = $error;
-        $this->sapi = $sapi;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return StreamInterface
-     */
-    public function getStream()
-    {
-        if ($this->moved) {
-            throw new RuntimeException(sprintf('Uploaded file %s has already been moved', $this->name));
-        }
-
-        if (!$this->stream) {
-            $this->stream = (new StreamFactory())->createStreamFromFile($this->file);
-        }
-
-        return $this->stream;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function moveTo($targetPath): void
-    {
-        if ($this->moved) {
-            throw new RuntimeException('Uploaded file already moved');
-        }
-
-        $targetIsStream = strpos($targetPath, '://') > 0;
-        if (!$targetIsStream && !is_writable(dirname($targetPath))) {
-            throw new InvalidArgumentException('Upload target path is not writable');
-        }
-
-        if ($targetIsStream) {
-            if (!copy($this->file, $targetPath)) {
-                throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath));
-            }
-
-            if (!unlink($this->file)) {
-                throw new RuntimeException(sprintf('Error removing uploaded file %s', $this->name));
-            }
-        } elseif ($this->sapi) {
-            if (!is_uploaded_file($this->file)) {
-                throw new RuntimeException(sprintf('%s is not a valid uploaded file', $this->file));
-            }
-
-            if (!move_uploaded_file($this->file, $targetPath)) {
-                throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath));
-            }
-        } else {
-            if (!rename($this->file, $targetPath)) {
-                throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath));
-            }
-        }
-
-        $this->moved = true;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getError(): int
-    {
-        return $this->error;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getClientFilename(): ?string
-    {
-        return $this->name;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getClientMediaType(): ?string
-    {
-        return $this->type;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getSize(): ?int
-    {
-        return $this->size;
-    }
-
-    /**
-     * Returns the client-provided full path to the file
-     *
-     * @internal This method is not part of the PSR-7 standard
-     *
-     * @return string
-     */
-    public function getFilePath(): string
-    {
-        return $this->file;
-    }
-
-    /**
-     * Create a normalized tree of UploadedFile instances from the Environment.
-     *
-     * @internal This method is not part of the PSR-7 standard.
-     *
-     * @param array $globals The global server variables.
-     *
-     * @return array A normalized tree of UploadedFile instances or null if none are provided.
-     */
-    public static function createFromGlobals(array $globals): array
-    {
-        if (isset($globals['slim.files']) && is_array($globals['slim.files'])) {
-            return $globals['slim.files'];
-        }
-
-        if (!empty($_FILES)) {
-            return self::parseUploadedFiles($_FILES);
-        }
-
-        return [];
-    }
-
-    /**
-     * Parse a non-normalized, i.e. $_FILES superglobal, tree of uploaded file data.
-     *
-     * @internal This method is not part of the PSR-7 standard.
-     *
-     * @param array $uploadedFiles The non-normalized tree of uploaded file data.
-     *
-     * @return array A normalized tree of UploadedFile instances.
-     */
-    private static function parseUploadedFiles(array $uploadedFiles): array
-    {
-        $parsed = [];
-        foreach ($uploadedFiles as $field => $uploadedFile) {
-            if (!isset($uploadedFile['error'])) {
-                if (is_array($uploadedFile)) {
-                    $parsed[$field] = self::parseUploadedFiles($uploadedFile);
-                }
-                continue;
-            }
-
-            $parsed[$field] = [];
-            if (!is_array($uploadedFile['error'])) {
-                $parsed[$field] = new static(
-                    $uploadedFile['tmp_name'],
-                    $uploadedFile['name'] ?? null,
-                    $uploadedFile['type'] ?? null,
-                    $uploadedFile['size'] ?? null,
-                    $uploadedFile['error'],
-                    true
-                );
-            } else {
-                $subArray = [];
-                foreach ($uploadedFile['error'] as $fileIdx => $error) {
-                    // Normalize sub array and re-parse to move the input's key name up a level
-                    $subArray[$fileIdx]['name'] = $uploadedFile['name'][$fileIdx];
-                    $subArray[$fileIdx]['type'] = $uploadedFile['type'][$fileIdx];
-                    $subArray[$fileIdx]['tmp_name'] = $uploadedFile['tmp_name'][$fileIdx];
-                    $subArray[$fileIdx]['error'] = $uploadedFile['error'][$fileIdx];
-                    $subArray[$fileIdx]['size'] = $uploadedFile['size'][$fileIdx];
-
-                    $parsed[$field] = self::parseUploadedFiles($subArray);
-                }
-            }
-        }
-
-        return $parsed;
-    }
-}
diff --git a/vendor/slim/psr7/src/Uri.php b/vendor/slim/psr7/src/Uri.php
deleted file mode 100644
index b43aa5497587501f18d97b1dab405e6744c2afa0..0000000000000000000000000000000000000000
--- a/vendor/slim/psr7/src/Uri.php
+++ /dev/null
@@ -1,494 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim-Psr7/blob/master/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\UriInterface;
-
-use function filter_var;
-use function is_integer;
-use function is_null;
-use function is_object;
-use function is_string;
-use function ltrim;
-use function method_exists;
-use function preg_replace_callback;
-use function rawurlencode;
-use function str_replace;
-use function strtolower;
-
-use const FILTER_FLAG_IPV6;
-use const FILTER_VALIDATE_IP;
-
-class Uri implements UriInterface
-{
-    public const SUPPORTED_SCHEMES = [
-        '' => null,
-        'http' => 80,
-        'https' => 443
-    ];
-
-    /**
-     * Uri scheme (without "://" suffix)
-     */
-    protected string $scheme = '';
-
-    protected string $user = '';
-
-    protected string $password = '';
-
-    protected string $host = '';
-
-    protected ?int $port;
-
-    protected string $path = '';
-
-    /**
-     * Uri query string (without "?" prefix)
-     */
-    protected string $query = '';
-
-    /**
-     * Uri fragment string (without "#" prefix)
-     */
-    protected string $fragment = '';
-
-    /**
-     * @param string   $scheme   Uri scheme.
-     * @param string   $host     Uri host.
-     * @param int|null $port     Uri port number.
-     * @param string   $path     Uri path.
-     * @param string   $query    Uri query string.
-     * @param string   $fragment Uri fragment.
-     * @param string   $user     Uri user.
-     * @param string   $password Uri password.
-     */
-    public function __construct(
-        string $scheme,
-        string $host,
-        ?int $port = null,
-        string $path = '/',
-        string $query = '',
-        string $fragment = '',
-        string $user = '',
-        string $password = ''
-    ) {
-        $this->scheme = $this->filterScheme($scheme);
-        $this->host = $this->filterHost($host);
-        $this->port = $this->filterPort($port);
-        $this->path = $this->filterPath($path);
-        $this->query = $this->filterQuery($query);
-        $this->fragment = $this->filterFragment($fragment);
-        $this->user = $this->filterUserInfo($user);
-        $this->password = $this->filterUserInfo($password);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getScheme(): string
-    {
-        return $this->scheme;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withScheme($scheme)
-    {
-        $scheme = $this->filterScheme($scheme);
-        $clone = clone $this;
-        $clone->scheme = $scheme;
-
-        return $clone;
-    }
-
-    /**
-     * Filter Uri scheme.
-     *
-     * @param  mixed $scheme Raw Uri scheme.
-     *
-     * @return string
-     *
-     * @throws InvalidArgumentException If the Uri scheme is not a string.
-     * @throws InvalidArgumentException If Uri scheme is not exists in SUPPORTED_SCHEMES
-     */
-    protected function filterScheme($scheme): string
-    {
-        if (!is_string($scheme)) {
-            throw new InvalidArgumentException('Uri scheme must be a string.');
-        }
-
-        $scheme = str_replace('://', '', strtolower($scheme));
-        if (!key_exists($scheme, static::SUPPORTED_SCHEMES)) {
-            throw new InvalidArgumentException(
-                'Uri scheme must be one of: "' . implode('", "', array_keys(static::SUPPORTED_SCHEMES)) . '"'
-            );
-        }
-
-        return $scheme;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getAuthority(): string
-    {
-        $userInfo = $this->getUserInfo();
-        $host = $this->getHost();
-        $port = $this->getPort();
-
-        return ($userInfo !== '' ? $userInfo . '@' : '') . $host . ($port !== null ? ':' . $port : '');
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getUserInfo(): string
-    {
-        $info = $this->user;
-
-        if ($this->password !== '') {
-            $info .= ':' . $this->password;
-        }
-
-        return $info;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withUserInfo($user, $password = null)
-    {
-        $clone = clone $this;
-        $clone->user = $this->filterUserInfo($user);
-
-        if ($clone->user !== '') {
-            $clone->password = $this->filterUserInfo($password);
-        } else {
-            $clone->password = '';
-        }
-
-        return $clone;
-    }
-
-    /**
-     * Filters the user info string.
-     *
-     * Returns the percent-encoded query string.
-     *
-     * @param string|null $info The raw uri query string.
-     *
-     * @return string
-     */
-    protected function filterUserInfo(?string $info = null): string
-    {
-        if (!is_string($info)) {
-            return '';
-        }
-
-        $match =  preg_replace_callback(
-            '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=]+|%(?![A-Fa-f0-9]{2}))/u',
-            function ($match) {
-                return rawurlencode($match[0]);
-            },
-            $info
-        );
-
-        return is_string($match) ? $match : '';
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getHost(): string
-    {
-        return $this->host;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withHost($host)
-    {
-        $clone = clone $this;
-        $clone->host = $this->filterHost($host);
-
-        return $clone;
-    }
-
-    /**
-     * Filter Uri host.
-     *
-     * If the supplied host is an IPv6 address, then it is converted to a reference
-     * as per RFC 2373.
-     *
-     * @param  mixed $host The host to filter.
-     *
-     * @return string
-     *
-     * @throws InvalidArgumentException for invalid host names.
-     */
-    protected function filterHost($host): string
-    {
-        if (is_object($host) && method_exists($host, '__toString')) {
-            $host = (string) $host;
-        }
-
-        if (!is_string($host)) {
-            throw new InvalidArgumentException('Uri host must be a string');
-        }
-
-        if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
-            $host = '[' . $host . ']';
-        }
-
-        return strtolower($host);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getPort(): ?int
-    {
-        return $this->port && !$this->hasStandardPort() ? $this->port : null;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withPort($port)
-    {
-        $port = $this->filterPort($port);
-        $clone = clone $this;
-        $clone->port = $port;
-
-        return $clone;
-    }
-
-    /**
-     * Does this Uri use a standard port?
-     *
-     * @return bool
-     */
-    protected function hasStandardPort(): bool
-    {
-        return static::SUPPORTED_SCHEMES[$this->scheme] === $this->port;
-    }
-
-    /**
-     * Filter Uri port.
-     *
-     * @param  int|null $port The Uri port number.
-     *
-     * @return int|null
-     *
-     * @throws InvalidArgumentException If the port is invalid.
-     */
-    protected function filterPort($port): ?int
-    {
-        if (is_null($port) || (is_integer($port) && ($port >= 1 && $port <= 65535))) {
-            return $port;
-        }
-
-        throw new InvalidArgumentException('Uri port must be null or an integer between 1 and 65535 (inclusive)');
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getPath(): string
-    {
-        return $this->path;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withPath($path)
-    {
-        if (!is_string($path)) {
-            throw new InvalidArgumentException('Uri path must be a string');
-        }
-
-        $clone = clone $this;
-        $clone->path = $this->filterPath($path);
-
-        return $clone;
-    }
-
-    /**
-     * Filter Uri path.
-     *
-     * This method percent-encodes all reserved characters in the provided path string.
-     * This method will NOT double-encode characters that are already percent-encoded.
-     *
-     * @param  string $path The raw uri path.
-     *
-     * @return string       The RFC 3986 percent-encoded uri path.
-     *
-     * @link   http://www.faqs.org/rfcs/rfc3986.html
-     */
-    protected function filterPath($path): string
-    {
-        $match = preg_replace_callback(
-            '/(?:[^a-zA-Z0-9_\-\.~:@&=\+\$,\/;%]+|%(?![A-Fa-f0-9]{2}))/',
-            function ($match) {
-                return rawurlencode($match[0]);
-            },
-            $path
-        );
-
-        return is_string($match) ? $match : '';
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getQuery(): string
-    {
-        return $this->query;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withQuery($query)
-    {
-        $query = ltrim($this->filterQuery($query), '?');
-        $clone = clone $this;
-        $clone->query = $query;
-
-        return $clone;
-    }
-
-    /**
-     * Filters the query string of a URI.
-     *
-     * Returns the percent-encoded query string.
-     *
-     * @param mixed $query The raw uri query string.
-     *
-     * @return string
-     */
-    protected function filterQuery($query): string
-    {
-        if (is_object($query) && method_exists($query, '__toString')) {
-            $query = (string) $query;
-        }
-
-        if (!is_string($query)) {
-            throw new InvalidArgumentException('Uri query must be a string.');
-        }
-
-        $match = preg_replace_callback(
-            '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/',
-            function ($match) {
-                return rawurlencode($match[0]);
-            },
-            $query
-        );
-
-        return is_string($match) ? $match : '';
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getFragment(): string
-    {
-        return $this->fragment;
-    }
-
-    /**
-     * {@inheritdoc}
-     * @return static
-     */
-    public function withFragment($fragment)
-    {
-        $fragment = $this->filterFragment($fragment);
-        $clone = clone $this;
-        $clone->fragment = $fragment;
-
-        return $clone;
-    }
-
-    /**
-     * Filters fragment of a URI.
-     *
-     * Returns the percent-encoded fragment.
-     *
-     * @param mixed $fragment The raw uri query string.
-     *
-     * @return string
-     */
-    protected function filterFragment($fragment): string
-    {
-        if (is_object($fragment) && method_exists($fragment, '__toString')) {
-            $fragment = (string) $fragment;
-        }
-
-        if (!is_string($fragment)) {
-            throw new InvalidArgumentException('Uri fragment must be a string.');
-        }
-
-        $fragment = ltrim($fragment, '#');
-
-        $match = preg_replace_callback(
-            '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/',
-            function ($match) {
-                return rawurlencode($match[0]);
-            },
-            $fragment
-        );
-
-        return is_string($match) ? $match : '';
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function __toString(): string
-    {
-        $scheme = $this->getScheme();
-        $authority = $this->getAuthority();
-        $path = $this->getPath();
-        $query = $this->getQuery();
-        $fragment = $this->getFragment();
-
-        if ($path !== '') {
-            if ($path[0] !== '/') {
-                if ($authority !== '') {
-                    // If the path is rootless and an authority is present, the path MUST be prefixed by "/".
-                    $path = '/' . $path;
-                }
-            } elseif (isset($path[1]) && $path[1] === '/') {
-                if ($authority === '') {
-                    // If the path is starting with more than one "/" and no authority is present,
-                    // the starting slashes MUST be reduced to one.
-                    $path = '/' . ltrim($path, '/');
-                }
-            }
-        }
-
-        return ($scheme !== '' ? $scheme . ':' : '')
-            . ($authority !== '' ? '//' . $authority : '')
-            . $path
-            . ($query !== '' ? '?' . $query : '')
-            . ($fragment !== '' ? '#' . $fragment : '');
-    }
-}
diff --git a/vendor/slim/slim/CHANGELOG.md b/vendor/slim/slim/CHANGELOG.md
deleted file mode 100644
index 4953c3e655915df544231b96c5c7eb9bf4d4e909..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/CHANGELOG.md
+++ /dev/null
@@ -1,208 +0,0 @@
-# Changelog
-
-# 4.10.0 - 2022-03-14
-- [3120: Add a new PSR-17 factory to Psr17FactoryProvider](https://github.com/slimphp/Slim/pull/3120) thanks to @solventt
-- [3123: Replace deprecated setMethods() in tests](https://github.com/slimphp/Slim/pull/3123) thanks to @solventt
-- [3126: Update guzzlehttp/psr7 requirement from ^2.0 to ^2.1](https://github.com/slimphp/Slim/pull/3126) thanks to @dependabot[bot]
-- [3127: PHPStan v1.0](https://github.com/slimphp/Slim/pull/3127) thanks to @t0mmy742
-- [3128: Update phpstan/phpstan requirement from ^1.0 to ^1.2](https://github.com/slimphp/Slim/pull/3128) thanks to @dependabot[bot]
-- [3129: Deprecate PHP 7.3](https://github.com/slimphp/Slim/pull/3129) thanks to @l0gicgate
-- [3130: Removed double defined PHP 7.4](https://github.com/slimphp/Slim/pull/3130) thanks to @flangofas
-- [3132: Add new `RequestResponseNamedArgs` route strategy](https://github.com/slimphp/Slim/pull/3132) thanks to @adoy
-- [3133: Improve typehinting for `RouteParserInterface`](https://github.com/slimphp/Slim/pull/3133) thanks to @jerowork
-- [3135: Update phpstan/phpstan requirement from ^1.2 to ^1.3](https://github.com/slimphp/Slim/pull/3135) thanks to @dependabot[bot]
-- [3137: Update phpspec/prophecy requirement from ^1.14 to ^1.15](https://github.com/slimphp/Slim/pull/3137) thanks to @dependabot[bot]
-- [3138: Update license year](https://github.com/slimphp/Slim/pull/3138) thanks to @Awilum
-- [3139: Fixed #1730 (reintroduced in 4.x)](https://github.com/slimphp/Slim/pull/3139) thanks to @adoy
-- [3145: Update phpstan/phpstan requirement from ^1.3 to ^1.4](https://github.com/slimphp/Slim/pull/3145) thanks to @dependabot[bot]
-- [3146: Inherit HttpException from RuntimeException](https://github.com/slimphp/Slim/pull/3146) thanks to @nbayramberdiyev
-- [3148: Upgrade to HTML5](https://github.com/slimphp/Slim/pull/3148) thanks to @nbayramberdiyev
-- [3172: Update nyholm/psr7 requirement from ^1.4 to ^1.5](https://github.com/slimphp/Slim/pull/3172) thanks to @dependabot[bot]
-
-# 4.9.0 - 2021-10-05
-- [3058: Implement exception class for Gone Http error](https://github.com/slimphp/Slim/pull/3058) thanks to @TheKernelPanic
-- [3086: Update slim/psr7 requirement from ^1.3 to ^1.4](https://github.com/slimphp/Slim/pull/3086) thanks to @dependabot[bot]
-- [3087: Update nyholm/psr7-server requirement from ^1.0.1 to ^1.0.2](https://github.com/slimphp/Slim/pull/3087) thanks to @dependabot[bot]
-- [3093: Update phpstan/phpstan requirement from ^0.12.85 to ^0.12.90](https://github.com/slimphp/Slim/pull/3093) thanks to @dependabot[bot]
-- [3099: Allow updated psr log](https://github.com/slimphp/Slim/pull/3099) thanks to @t0mmy742
-- [3104: Drop php7.2](https://github.com/slimphp/Slim/pull/3104) thanks to @t0mmy742
-- [3106: Use PSR-17 factory from Guzzle/psr7 2.0](https://github.com/slimphp/Slim/pull/3106) thanks to @t0mmy742
-- [3108: Update README file](https://github.com/slimphp/Slim/pull/3108) thanks to @t0mmy742
-- [3112: Update laminas/laminas-diactoros requirement from ^2.6 to ^2.8](https://github.com/slimphp/Slim/pull/3112) thanks to @dependabot[bot]
-- [3114: Update slim/psr7 requirement from ^1.4 to ^1.5](https://github.com/slimphp/Slim/pull/3114) thanks to @dependabot[bot]
-- [3115: Update phpstan/phpstan requirement from ^0.12.96 to ^0.12.99](https://github.com/slimphp/Slim/pull/3115) thanks to @dependabot[bot]
-- [3116: Remove Zend Diactoros references](https://github.com/slimphp/Slim/pull/3116) thanks to @l0gicgate
-
-# 4.8.0 - 2021-05-19
-- [3034: Fix phpunit dependency version](https://github.com/slimphp/Slim/pull/3034) thanks to @l0gicgate
-- [3037: Replace Travis by GitHub Actions](https://github.com/slimphp/Slim/pull/3037) thanks to @t0mmy742
-- [3043: Cover App creation from AppFactory with empty Container](https://github.com/slimphp/Slim/pull/3043) thanks to @t0mmy742
-- [3045: Update phpstan/phpstan requirement from ^0.12.58 to ^0.12.64](https://github.com/slimphp/Slim/pull/3045) thanks to @dependabot-preview[bot]
-- [3047: documentation: min php 7.2 required](https://github.com/slimphp/Slim/pull/3047) thanks to @Rotzbua
-- [3054: Update phpstan/phpstan requirement from ^0.12.64 to ^0.12.70](https://github.com/slimphp/Slim/pull/3054) thanks to @dependabot-preview[bot]
-- [3056: Fix docblock in ErrorMiddleware](https://github.com/slimphp/Slim/pull/3056) thanks to @piotr-cz
-- [3060: Update phpstan/phpstan requirement from ^0.12.70 to ^0.12.80](https://github.com/slimphp/Slim/pull/3060) thanks to @dependabot-preview[bot]
-- [3061: Update nyholm/psr7 requirement from ^1.3 to ^1.4](https://github.com/slimphp/Slim/pull/3061) thanks to @dependabot-preview[bot]
-- [3063: Allow ^1.0 || ^2.0 in psr/container](https://github.com/slimphp/Slim/pull/3063) thanks to @Ayesh
-- [3069: Classname/Method Callable Arrays](https://github.com/slimphp/Slim/pull/3069) thanks to @ddrv
-- [3078: Update squizlabs/php&#95;codesniffer requirement from ^3.5 to ^3.6](https://github.com/slimphp/Slim/pull/3078) thanks to @dependabot[bot]
-- [3079: Update phpspec/prophecy requirement from ^1.12 to ^1.13](https://github.com/slimphp/Slim/pull/3079) thanks to @dependabot[bot]
-- [3080: Update guzzlehttp/psr7 requirement from ^1.7 to ^1.8](https://github.com/slimphp/Slim/pull/3080) thanks to @dependabot[bot]
-- [3082: Update phpstan/phpstan requirement from ^0.12.80 to ^0.12.85](https://github.com/slimphp/Slim/pull/3082) thanks to @dependabot[bot]
-
-# 4.7.0 - 2020-11-30
-
-### Fixed
-- [3027: Fix: FastRoute dispatcher and data generator should match](https://github.com/slimphp/Slim/pull/3027) thanks to @edudobay
-
-### Added
-- [3015: PHP 8 support](https://github.com/slimphp/Slim/pull/3015) thanks to @edudobay
-
-### Optimizations
-- [3024: Randomize tests](https://github.com/slimphp/Slim/pull/3024) thanks to @pawel-slowik
-
-## 4.6.0 - 2020-11-15
-
-### Fixed
-- [2942: Fix PHPdoc for error handlers in ErrorMiddleware ](https://github.com/slimphp/Slim/pull/2942) thanks to @TiMESPLiNTER
-- [2944: Remove unused function in ErrorHandler](https://github.com/slimphp/Slim/pull/2944) thanks to @l0gicgate
-- [2960: Fix phpstan 0.12 errors](https://github.com/slimphp/Slim/pull/2960) thanks to @adriansuter
-- [2982: Removing cloning statements in tests](https://github.com/slimphp/Slim/pull/2982) thanks to @l0gicgate
-- [3017: Fix request creator factory test](https://github.com/slimphp/Slim/pull/3017) thanks to @pawel-slowik
-- [3022: Ensure RouteParser Always Present After Routing](https://github.com/slimphp/Slim/pull/3022) thanks to @l0gicgate
-
-### Added
-- [2949: Add the support in composer.json](https://github.com/slimphp/Slim/pull/2949) thanks to @ddrv
-- [2958: Strict empty string content type checking in BodyParsingMiddleware::getMediaType](https://github.com/slimphp/Slim/pull/2958) thanks to @Ayesh
-- [2997: Add hints to methods](https://github.com/slimphp/Slim/pull/2997) thanks to @evgsavosin - [3000: Fix route controller test](https://github.com/slimphp/Slim/pull/3000) thanks to @pawel-slowik
-- [3001: Add missing `$strategy` parameter in a Route test](https://github.com/slimphp/Slim/pull/3001) thanks to @pawel-slowik
-
-### Optimizations
-- [2951: Minor optimizations in if() blocks](https://github.com/slimphp/Slim/pull/2951) thanks to @Ayesh
-- [2959: Micro optimization: Declare closures in BodyParsingMiddleware as static](https://github.com/slimphp/Slim/pull/2959) thanks to @Ayesh
-- [2978: Split the routing results to its own function.](https://github.com/slimphp/Slim/pull/2978) thanks to @dlundgren
-
-### Dependencies Updated
-- [2953: Update nyholm/psr7-server requirement from ^0.4.1](https://github.com/slimphp/Slim/pull/2953) thanks to @dependabot-preview[bot]
-- [2954: Update laminas/laminas-diactoros requirement from ^2.1 to ^2.3](https://github.com/slimphp/Slim/pull/2954) thanks to @dependabot-preview[bot]
-- [2955: Update guzzlehttp/psr7 requirement from ^1.5 to ^1.6](https://github.com/slimphp/Slim/pull/2955) thanks to @dependabot-preview[bot]
-- [2956: Update slim/psr7 requirement from ^1.0 to ^1.1](https://github.com/slimphp/Slim/pull/2956) thanks to @dependabot-preview[bot]
-- [2957: Update nyholm/psr7 requirement from ^1.1 to ^1.2](https://github.com/slimphp/Slim/pull/2957) thanks to @dependabot-preview[bot]
-- [2963: Update phpstan/phpstan requirement from ^0.12.23 to ^0.12.25](https://github.com/slimphp/Slim/pull/2963) thanks to @dependabot-preview[bot]
-- [2965: Update adriansuter/php-autoload-override requirement from ^1.0 to ^1.1](https://github.com/slimphp/Slim/pull/2965) thanks to @dependabot-preview[bot]
-- [2967: Update nyholm/psr7 requirement from ^1.2 to ^1.3](https://github.com/slimphp/Slim/pull/2967) thanks to @dependabot-preview[bot]
-- [2969: Update nyholm/psr7-server requirement from ^0.4.1 to ^1.0.0](https://github.com/slimphp/Slim/pull/2969) thanks to @dependabot-preview[bot]
-- [2970: Update phpstan/phpstan requirement from ^0.12.25 to ^0.12.26](https://github.com/slimphp/Slim/pull/2970) thanks to @dependabot-preview[bot]
-- [2971: Update phpstan/phpstan requirement from ^0.12.26 to ^0.12.27](https://github.com/slimphp/Slim/pull/2971) thanks to @dependabot-preview[bot]
-- [2972: Update phpstan/phpstan requirement from ^0.12.27 to ^0.12.28](https://github.com/slimphp/Slim/pull/2972) thanks to @dependabot-preview[bot]
-- [2973: Update phpstan/phpstan requirement from ^0.12.28 to ^0.12.29](https://github.com/slimphp/Slim/pull/2973) thanks to @dependabot-preview[bot]
-- [2975: Update phpstan/phpstan requirement from ^0.12.29 to ^0.12.30](https://github.com/slimphp/Slim/pull/2975) thanks to @dependabot-preview[bot]
-- [2976: Update phpstan/phpstan requirement from ^0.12.30 to ^0.12.31](https://github.com/slimphp/Slim/pull/2976) thanks to @dependabot-preview[bot]
-- [2980: Update phpstan/phpstan requirement from ^0.12.31 to ^0.12.32](https://github.com/slimphp/Slim/pull/2980) thanks to @dependabot-preview[bot]
-- [2981: Update phpspec/prophecy requirement from ^1.10 to ^1.11](https://github.com/slimphp/Slim/pull/2981) thanks to @dependabot-preview[bot]
-- [2986: Update phpstan/phpstan requirement from ^0.12.32 to ^0.12.33](https://github.com/slimphp/Slim/pull/2986) thanks to @dependabot-preview[bot]
-- [2990: Update phpstan/phpstan requirement from ^0.12.33 to ^0.12.34](https://github.com/slimphp/Slim/pull/2990) thanks to @dependabot-preview[bot]
-- [2991: Update phpstan/phpstan requirement from ^0.12.34 to ^0.12.35](https://github.com/slimphp/Slim/pull/2991) thanks to @dependabot-preview[bot]
-- [2993: Update phpstan/phpstan requirement from ^0.12.35 to ^0.12.36](https://github.com/slimphp/Slim/pull/2993) thanks to @dependabot-preview[bot]
-- [2995: Update phpstan/phpstan requirement from ^0.12.36 to ^0.12.37](https://github.com/slimphp/Slim/pull/2995) thanks to @dependabot-preview[bot]
-- [3010: Update guzzlehttp/psr7 requirement from ^1.6 to ^1.7](https://github.com/slimphp/Slim/pull/3010) thanks to @dependabot-preview[bot]
-- [3011: Update phpspec/prophecy requirement from ^1.11 to ^1.12](https://github.com/slimphp/Slim/pull/3011) thanks to @dependabot-preview[bot]
-- [3012: Update slim/http requirement from ^1.0 to ^1.1](https://github.com/slimphp/Slim/pull/3012) thanks to @dependabot-preview[bot]
-- [3013: Update slim/psr7 requirement from ^1.1 to ^1.2](https://github.com/slimphp/Slim/pull/3013) thanks to @dependabot-preview[bot]
-- [3014: Update laminas/laminas-diactoros requirement from ^2.3 to ^2.4](https://github.com/slimphp/Slim/pull/3014) thanks to @dependabot-preview[bot]
-- [3018: Update phpstan/phpstan requirement from ^0.12.37 to ^0.12.54](https://github.com/slimphp/Slim/pull/3018) thanks to @dependabot-preview[bot]
-
-## 4.5.0 - 2020-04-14
-
-### Added
-- [2928](https://github.com/slimphp/Slim/pull/2928) Test against PHP 7.4
-- [2937](https://github.com/slimphp/Slim/pull/2937) Add support for PSR-3
-
-### Fixed
-- [2916](https://github.com/slimphp/Slim/pull/2916) Rename phpcs.xml to phpcs.xml.dist
-- [2917](https://github.com/slimphp/Slim/pull/2917) Update .editorconfig
-- [2925](https://github.com/slimphp/Slim/pull/2925) ResponseEmitter: Don't remove Content-Type and Content-Length when body is empt
-- [2932](https://github.com/slimphp/Slim/pull/2932) Update the Tidelift enterprise language
-- [2938](https://github.com/slimphp/Slim/pull/2938) Modify usage of deprecated expectExceptionMessageRegExp() method
-
-## 4.4.0 - 2020-01-04
-
-### Added
-- [2862](https://github.com/slimphp/Slim/pull/2862) Optionally handle subclasses of exceptions in custom error handler
-- [2869](https://github.com/slimphp/Slim/pull/2869) php-di/php-di added in composer suggestion
-- [2874](https://github.com/slimphp/Slim/pull/2874) Add `null` to param type-hints
-- [2889](https://github.com/slimphp/Slim/pull/2889) Make `RouteContext` attributes customizable and change default to use private names
-- [2907](https://github.com/slimphp/Slim/pull/2907) Migrate to PSR-12 convention
-- [2910](https://github.com/slimphp/Slim/pull/2910) Migrate Zend to Laminas
-- [2912](https://github.com/slimphp/Slim/pull/2912) Add Laminas PSR17 Factory
-- [2913](https://github.com/slimphp/Slim/pull/2913) Update php-autoload-override version
-- [2914](https://github.com/slimphp/Slim/pull/2914) Added ability to add handled exceptions as an array
-
-### Fixed
-- [2864](https://github.com/slimphp/Slim/pull/2864) Optimize error message in error handling if displayErrorDetails was not set
-- [2876](https://github.com/slimphp/Slim/pull/2876) Update links from http to https
-- [2877](https://github.com/slimphp/Slim/pull/2877) Fix docblock for `Slim\Routing\RouteCollector::cacheFile`
-- [2878](https://github.com/slimphp/Slim/pull/2878) check body is writable only on ouput buffering append
-- [2896](https://github.com/slimphp/Slim/pull/2896) Render errors uniformly
-- [2902](https://github.com/slimphp/Slim/pull/2902) Fix prophecies
-- [2908](https://github.com/slimphp/Slim/pull/2908) Use autoload-dev for `Slim\Tests` namespace
-
-### Removed
-- [2871](https://github.com/slimphp/Slim/pull/2871) Remove explicit type-hint
-- [2872](https://github.com/slimphp/Slim/pull/2872) Remove type-hint
-
-## 4.3.0 - 2019-10-05
-
-### Added
-- [2819](https://github.com/slimphp/Slim/pull/2819) Added description to addRoutingMiddleware()
-- [2820](https://github.com/slimphp/Slim/pull/2820) Update link to homepage in composer.json
-- [2828](https://github.com/slimphp/Slim/pull/2828) Allow URIs with leading multi-slashes
-- [2832](https://github.com/slimphp/Slim/pull/2832) Refactor `FastRouteDispatcher`
-- [2835](https://github.com/slimphp/Slim/pull/2835) Rename `pathFor` to `urlFor` in docblock
-- [2846](https://github.com/slimphp/Slim/pull/2846) Correcting the branch name as per issue-2843
-- [2849](https://github.com/slimphp/Slim/pull/2849) Create class alias for FastRoute\RouteCollector
-- [2855](https://github.com/slimphp/Slim/pull/2855) Add list of allowed methods to HttpMethodNotAllowedException
-- [2860](https://github.com/slimphp/Slim/pull/2860) Add base path to `$request` and use `RouteContext` to read
-
-### Fixed
-- [2839](https://github.com/slimphp/Slim/pull/2839) Fix description for handler signature in phpdocs
-- [2844](https://github.com/slimphp/Slim/pull/2844) Handle base path by routeCollector instead of RouteCollectorProxy
-- [2845](https://github.com/slimphp/Slim/pull/2845) Fix composer scripts
-- [2851](https://github.com/slimphp/Slim/pull/2851) Fix example of 'Hello World' app
-- [2854](https://github.com/slimphp/Slim/pull/2854) Fix undefined property in tests
-
-### Removed
-- [2853](https://github.com/slimphp/Slim/pull/2853) Remove unused classes
-
-## 4.2.0 - 2019-08-20
-
-### Added
-- [2787](https://github.com/slimphp/Slim/pull/2787) Add an advanced callable resolver
-- [2791](https://github.com/slimphp/Slim/pull/2791) Add `inferPrivatePropertyTypeFromConstructor` to phpstan
-- [2793](https://github.com/slimphp/Slim/pull/2793) Add ability to configure application via a container in `AppFactory`
-- [2798](https://github.com/slimphp/Slim/pull/2798) Add PSR-7 Agnostic Body Parsing Middleware
-- [2801](https://github.com/slimphp/Slim/pull/2801) Add `setLogErrorRenderer()` method to `ErrorHandler`
-- [2807](https://github.com/slimphp/Slim/pull/2807) Add check for Slim callable notation if no resolver given
-- [2803](https://github.com/slimphp/Slim/pull/2803) Add ability to emit non seekable streams in `ResponseEmitter`
-- [2817](https://github.com/slimphp/Slim/pull/2817) Add the ability to pass in a custom `MiddlewareDispatcherInterface` to the `App`
-
-### Fixed
-- [2789](https://github.com/slimphp/Slim/pull/2789) Fix Cookie header detection in `ResponseEmitter`
-- [2796](https://github.com/slimphp/Slim/pull/2796) Fix http message format
-- [2800](https://github.com/slimphp/Slim/pull/2800) Fix null comparisons more clear in `ErrorHandler`
-- [2802](https://github.com/slimphp/Slim/pull/2802) Fix incorrect search of a header in stack
-- [2806](https://github.com/slimphp/Slim/pull/2806) Simplify `Route::prepare()` method argument preparation
-- [2809](https://github.com/slimphp/Slim/pull/2809) Eliminate a duplicate code via HOF in `MiddlewareDispatcher`
-- [2816](https://github.com/slimphp/Slim/pull/2816) Fix RouteCollectorProxy::redirect() bug
-
-### Removed
-- [2811](https://github.com/slimphp/Slim/pull/2811) Remove `DeferredCallable`
-
-## 4.1.0 - 2019-08-06
-
-### Added
-- [#2779](https://github.com/slimphp/Slim/pull/2774) Add support for Slim callables `Class:method` resolution & Container Closure auto-binding in `MiddlewareDispatcher`
-- [#2774](https://github.com/slimphp/Slim/pull/2774) Add possibility for custom `RequestHandler` invocation strategies
-
-### Fixed
-- [#2776](https://github.com/slimphp/Slim/pull/2774) Fix group middleware on multiple nested groups
diff --git a/vendor/slim/slim/SECURITY.md b/vendor/slim/slim/SECURITY.md
deleted file mode 100644
index a5b6df0b4cc0857c9433951c6652466b0ec1a1b4..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/SECURITY.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Security Policy
-
-### Supported Versions
-
-
-| Version | Supported          |
-| ------- | ------------------ |
-| 3.x.x   | :white_check_mark: |
-| 4.x.x   | :white_check_mark: |
-
-
-### Reporting a Vulnerability
-
-To report a vulnerability please send an email to security@slimframework.com
diff --git a/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php b/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php
deleted file mode 100644
index 90b290d410f7dd4bdbd6e115d3a48dd140414e81..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Error;
-
-use Slim\Exception\HttpException;
-use Slim\Interfaces\ErrorRendererInterface;
-use Throwable;
-
-/**
- * Abstract Slim application error renderer
- *
- * It outputs the error message and diagnostic information in one of the following formats:
- * JSON, XML, Plain Text or HTML
- */
-abstract class AbstractErrorRenderer implements ErrorRendererInterface
-{
-    protected string $defaultErrorTitle = 'Slim Application Error';
-
-    protected string $defaultErrorDescription = 'A website error has occurred. Sorry for the temporary inconvenience.';
-
-    protected function getErrorTitle(Throwable $exception): string
-    {
-        if ($exception instanceof HttpException) {
-            return $exception->getTitle();
-        }
-
-        return $this->defaultErrorTitle;
-    }
-
-    protected function getErrorDescription(Throwable $exception): string
-    {
-        if ($exception instanceof HttpException) {
-            return $exception->getDescription();
-        }
-
-        return $this->defaultErrorDescription;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php b/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php
deleted file mode 100644
index e030522aa873bd0078d2afc3ca45106b9665a61c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Error\Renderers;
-
-use Slim\Error\AbstractErrorRenderer;
-use Throwable;
-
-use function get_class;
-use function htmlentities;
-use function sprintf;
-
-/**
- * Default Slim application HTML Error Renderer
- */
-class HtmlErrorRenderer extends AbstractErrorRenderer
-{
-    public function __invoke(Throwable $exception, bool $displayErrorDetails): string
-    {
-        if ($displayErrorDetails) {
-            $html = '<p>The application could not run because of the following error:</p>';
-            $html .= '<h2>Details</h2>';
-            $html .= $this->renderExceptionFragment($exception);
-        } else {
-            $html = "<p>{$this->getErrorDescription($exception)}</p>";
-        }
-
-        return $this->renderHtmlBody($this->getErrorTitle($exception), $html);
-    }
-
-    private function renderExceptionFragment(Throwable $exception): string
-    {
-        $html = sprintf('<div><strong>Type:</strong> %s</div>', get_class($exception));
-
-        /** @var int|string $code */
-        $code = $exception->getCode();
-        $html .= sprintf('<div><strong>Code:</strong> %s</div>', $code);
-
-        $html .= sprintf('<div><strong>Message:</strong> %s</div>', htmlentities($exception->getMessage()));
-
-        $html .= sprintf('<div><strong>File:</strong> %s</div>', $exception->getFile());
-
-        $html .= sprintf('<div><strong>Line:</strong> %s</div>', $exception->getLine());
-
-        $html .= '<h2>Trace</h2>';
-        $html .= sprintf('<pre>%s</pre>', htmlentities($exception->getTraceAsString()));
-
-        return $html;
-    }
-
-    public function renderHtmlBody(string $title = '', string $html = ''): string
-    {
-        return sprintf(
-            '<!doctype html>' .
-            '<html lang="en">' .
-            '    <head>' .
-            '        <meta charset="utf-8">' .
-            '        <meta name="viewport" content="width=device-width, initial-scale=1">' .
-            '        <title>%s</title>' .
-            '        <style>' .
-            '            body{margin:0;padding:30px;font:12px/1.5 Helvetica,Arial,Verdana,sans-serif}' .
-            '            h1{margin:0;font-size:48px;font-weight:normal;line-height:48px}' .
-            '            strong{display:inline-block;width:65px}' .
-            '        </style>' .
-            '    </head>' .
-            '    <body>' .
-            '        <h1>%s</h1>' .
-            '        <div>%s</div>' .
-            '        <a href="#" onclick="window.history.go(-1)">Go Back</a>' .
-            '    </body>' .
-            '</html>',
-            $title,
-            $title,
-            $html
-        );
-    }
-}
diff --git a/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php b/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php
deleted file mode 100644
index 63d905b3cd39507d6d1ab0382b410e2d5ffcaf7b..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Error\Renderers;
-
-use Slim\Error\AbstractErrorRenderer;
-use Throwable;
-
-use function get_class;
-use function json_encode;
-
-use const JSON_PRETTY_PRINT;
-use const JSON_UNESCAPED_SLASHES;
-
-/**
- * Default Slim application JSON Error Renderer
- */
-class JsonErrorRenderer extends AbstractErrorRenderer
-{
-    public function __invoke(Throwable $exception, bool $displayErrorDetails): string
-    {
-        $error = ['message' => $this->getErrorTitle($exception)];
-
-        if ($displayErrorDetails) {
-            $error['exception'] = [];
-            do {
-                $error['exception'][] = $this->formatExceptionFragment($exception);
-            } while ($exception = $exception->getPrevious());
-        }
-
-        return (string) json_encode($error, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
-    }
-
-    /**
-     * @return array<string|int>
-     */
-    private function formatExceptionFragment(Throwable $exception): array
-    {
-        /** @var int|string $code */
-        $code = $exception->getCode();
-        return [
-            'type' => get_class($exception),
-            'code' => $code,
-            'message' => $exception->getMessage(),
-            'file' => $exception->getFile(),
-            'line' => $exception->getLine(),
-        ];
-    }
-}
diff --git a/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php b/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php
deleted file mode 100644
index 3d80c74be96b1e8a40428793a16cc170cfcd0eff..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Error\Renderers;
-
-use Slim\Error\AbstractErrorRenderer;
-use Throwable;
-
-use function get_class;
-use function htmlentities;
-use function sprintf;
-
-/**
- * Default Slim application Plain Text Error Renderer
- */
-class PlainTextErrorRenderer extends AbstractErrorRenderer
-{
-    public function __invoke(Throwable $exception, bool $displayErrorDetails): string
-    {
-        $text = "{$this->getErrorTitle($exception)}\n";
-
-        if ($displayErrorDetails) {
-            $text .= $this->formatExceptionFragment($exception);
-
-            while ($exception = $exception->getPrevious()) {
-                $text .= "\nPrevious Error:\n";
-                $text .= $this->formatExceptionFragment($exception);
-            }
-        }
-
-        return $text;
-    }
-
-    private function formatExceptionFragment(Throwable $exception): string
-    {
-        $text = sprintf("Type: %s\n", get_class($exception));
-
-        $code = $exception->getCode();
-        /** @var int|string $code */
-        $text .= sprintf("Code: %s\n", $code);
-
-        $text .= sprintf("Message: %s\n", htmlentities($exception->getMessage()));
-
-        $text .= sprintf("File: %s\n", $exception->getFile());
-
-        $text .= sprintf("Line: %s\n", $exception->getLine());
-
-        $text .= sprintf('Trace: %s', $exception->getTraceAsString());
-
-        return $text;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php b/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php
deleted file mode 100644
index 1171b79b2d4ea9eb844248e6132bcec205a3f780..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Error\Renderers;
-
-use Slim\Error\AbstractErrorRenderer;
-use Throwable;
-
-use function get_class;
-use function sprintf;
-use function str_replace;
-
-/**
- * Default Slim application XML Error Renderer
- */
-class XmlErrorRenderer extends AbstractErrorRenderer
-{
-    public function __invoke(Throwable $exception, bool $displayErrorDetails): string
-    {
-        $xml = '<' . '?xml version="1.0" encoding="UTF-8" standalone="yes"?' . ">\n";
-        $xml .= "<error>\n  <message>" . $this->createCdataSection($this->getErrorTitle($exception)) . "</message>\n";
-
-        if ($displayErrorDetails) {
-            do {
-                $xml .= "  <exception>\n";
-                $xml .= '    <type>' . get_class($exception) . "</type>\n";
-                $xml .= '    <code>' . $exception->getCode() . "</code>\n";
-                $xml .= '    <message>' . $this->createCdataSection($exception->getMessage()) . "</message>\n";
-                $xml .= '    <file>' . $exception->getFile() . "</file>\n";
-                $xml .= '    <line>' . $exception->getLine() . "</line>\n";
-                $xml .= "  </exception>\n";
-            } while ($exception = $exception->getPrevious());
-        }
-
-        $xml .= '</error>';
-
-        return $xml;
-    }
-
-    /**
-     * Returns a CDATA section with the given content.
-     */
-    private function createCdataSection(string $content): string
-    {
-        return sprintf('<![CDATA[%s]]>', str_replace(']]>', ']]]]><![CDATA[>', $content));
-    }
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php b/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php
deleted file mode 100644
index caea20fc09fc3f1402ea0fd12f23f70e7ad9c0d1..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-class HttpBadRequestException extends HttpSpecializedException
-{
-    /**
-     * @var int
-     */
-    protected $code = 400;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Bad request.';
-
-    protected string $title = '400 Bad Request';
-    protected string $description = 'The server cannot or will not process' .
-        'the request due to an apparent client error.';
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpException.php b/vendor/slim/slim/Slim/Exception/HttpException.php
deleted file mode 100644
index d9dbd6cbe399f63a6d18eaf0c7f40e1e3c13a0af..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpException.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-use Psr\Http\Message\ServerRequestInterface;
-use RuntimeException;
-use Throwable;
-
-/**
- * @method int getCode()
- */
-class HttpException extends RuntimeException
-{
-    protected ServerRequestInterface $request;
-
-    protected string $title = '';
-
-    protected string $description = '';
-
-    public function __construct(
-        ServerRequestInterface $request,
-        string $message = '',
-        int $code = 0,
-        ?Throwable $previous = null
-    ) {
-        parent::__construct($message, $code, $previous);
-        $this->request = $request;
-    }
-
-    public function getRequest(): ServerRequestInterface
-    {
-        return $this->request;
-    }
-
-    public function getTitle(): string
-    {
-        return $this->title;
-    }
-
-    public function setTitle(string $title): self
-    {
-        $this->title = $title;
-        return $this;
-    }
-
-    public function getDescription(): string
-    {
-        return $this->description;
-    }
-
-    public function setDescription(string $description): self
-    {
-        $this->description = $description;
-        return $this;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php b/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php
deleted file mode 100644
index dd3bb230a3080aabde099a2d7b4b26dcbd9adc55..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-class HttpForbiddenException extends HttpSpecializedException
-{
-    /**
-     * @var int
-     */
-    protected $code = 403;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Forbidden.';
-
-    protected string $title = '403 Forbidden';
-    protected string $description = 'You are not permitted to perform the requested operation.';
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpGoneException.php b/vendor/slim/slim/Slim/Exception/HttpGoneException.php
deleted file mode 100755
index 42899e1e6d779a6c642361052255b95681a179c5..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpGoneException.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-class HttpGoneException extends HttpSpecializedException
-{
-    /**
-     * @var int
-     */
-    protected $code = 410;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Gone.';
-
-    protected string $title = '410 Gone';
-    protected string $description = 'The target resource is no longer available at the origin server.';
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpInternalServerErrorException.php b/vendor/slim/slim/Slim/Exception/HttpInternalServerErrorException.php
deleted file mode 100644
index b432261909e76d962becbcb094823f08cb3c605c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpInternalServerErrorException.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-class HttpInternalServerErrorException extends HttpSpecializedException
-{
-    /**
-     * @var int
-     */
-    protected $code = 500;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Internal server error.';
-
-    protected string $title = '500 Internal Server Error';
-    protected string $description = 'Unexpected condition encountered preventing server from fulfilling request.';
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php b/vendor/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php
deleted file mode 100644
index 30aaaa743d015ee9a6b7a144ed3d4d4483e4644c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-use function implode;
-
-class HttpMethodNotAllowedException extends HttpSpecializedException
-{
-    /**
-     * @var string[]
-     */
-    protected array $allowedMethods = [];
-
-    /**
-     * @var int
-     */
-    protected $code = 405;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Method not allowed.';
-
-    protected string $title = '405 Method Not Allowed';
-    protected string $description = 'The request method is not supported for the requested resource.';
-
-    /**
-     * @return string[]
-     */
-    public function getAllowedMethods(): array
-    {
-        return $this->allowedMethods;
-    }
-
-    /**
-     * @param string[] $methods
-     */
-    public function setAllowedMethods(array $methods): self
-    {
-        $this->allowedMethods = $methods;
-        $this->message = 'Method not allowed. Must be one of: ' . implode(', ', $methods);
-        return $this;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php b/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php
deleted file mode 100644
index 865146d68f88cba89165f47fda7e9426c03ebe67..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-class HttpNotFoundException extends HttpSpecializedException
-{
-    /**
-     * @var int
-     */
-    protected $code = 404;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Not found.';
-
-    protected string $title = '404 Not Found';
-    protected string $description = 'The requested resource could not be found. Please verify the URI and try again.';
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpNotImplementedException.php b/vendor/slim/slim/Slim/Exception/HttpNotImplementedException.php
deleted file mode 100644
index 607a6f49a49ed428d595efd118abf8aca966e341..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpNotImplementedException.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-class HttpNotImplementedException extends HttpSpecializedException
-{
-    /**
-     * @var int
-     */
-    protected $code = 501;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Not implemented.';
-
-    protected string $title = '501 Not Implemented';
-    protected string $description = 'The server does not support the functionality required to fulfill the request.';
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpSpecializedException.php b/vendor/slim/slim/Slim/Exception/HttpSpecializedException.php
deleted file mode 100644
index 945e1ad44b6fd517d5632b2912868a9d8e01d3b8..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpSpecializedException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-use Psr\Http\Message\ServerRequestInterface;
-use Throwable;
-
-abstract class HttpSpecializedException extends HttpException
-{
-    /**
-     * @param ServerRequestInterface $request
-     * @param string|null            $message
-     * @param Throwable|null         $previous
-     */
-    public function __construct(ServerRequestInterface $request, ?string $message = null, ?Throwable $previous = null)
-    {
-        if ($message !== null) {
-            $this->message = $message;
-        }
-
-        parent::__construct($request, $this->message, $this->code, $previous);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php b/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php
deleted file mode 100644
index 07bd70d01e309c268965bbbe90e6591902fbf94c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Exception;
-
-class HttpUnauthorizedException extends HttpSpecializedException
-{
-    /**
-     * @var int
-     */
-    protected $code = 401;
-
-    /**
-     * @var string
-     */
-    protected $message = 'Unauthorized.';
-
-    protected string $title = '401 Unauthorized';
-    protected string $description = 'The request requires valid user authentication.';
-}
diff --git a/vendor/slim/slim/Slim/Factory/AppFactory.php b/vendor/slim/slim/Slim/Factory/AppFactory.php
deleted file mode 100644
index 6fc5f86ea635352773b29cfd96439bb816876899..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/AppFactory.php
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory;
-
-use Psr\Container\ContainerInterface;
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\StreamFactoryInterface;
-use RuntimeException;
-use Slim\App;
-use Slim\Factory\Psr17\Psr17Factory;
-use Slim\Factory\Psr17\Psr17FactoryProvider;
-use Slim\Factory\Psr17\SlimHttpPsr17Factory;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\MiddlewareDispatcherInterface;
-use Slim\Interfaces\Psr17FactoryProviderInterface;
-use Slim\Interfaces\RouteCollectorInterface;
-use Slim\Interfaces\RouteResolverInterface;
-
-class AppFactory
-{
-    protected static ?Psr17FactoryProviderInterface $psr17FactoryProvider = null;
-
-    protected static ?ResponseFactoryInterface $responseFactory = null;
-
-    protected static ?StreamFactoryInterface $streamFactory = null;
-
-    protected static ?ContainerInterface $container = null;
-
-    protected static ?CallableResolverInterface $callableResolver = null;
-
-    protected static ?RouteCollectorInterface $routeCollector = null;
-
-    protected static ?RouteResolverInterface $routeResolver = null;
-
-    protected static ?MiddlewareDispatcherInterface $middlewareDispatcher = null;
-
-    protected static bool $slimHttpDecoratorsAutomaticDetectionEnabled = true;
-
-    public static function create(
-        ?ResponseFactoryInterface $responseFactory = null,
-        ?ContainerInterface $container = null,
-        ?CallableResolverInterface $callableResolver = null,
-        ?RouteCollectorInterface $routeCollector = null,
-        ?RouteResolverInterface $routeResolver = null,
-        ?MiddlewareDispatcherInterface $middlewareDispatcher = null
-    ): App {
-        static::$responseFactory = $responseFactory ?? static::$responseFactory;
-        return new App(
-            self::determineResponseFactory(),
-            $container ?? static::$container,
-            $callableResolver ?? static::$callableResolver,
-            $routeCollector ?? static::$routeCollector,
-            $routeResolver ?? static::$routeResolver,
-            $middlewareDispatcher ?? static::$middlewareDispatcher
-        );
-    }
-
-    public static function createFromContainer(ContainerInterface $container): App
-    {
-        $responseFactory = $container->has(ResponseFactoryInterface::class)
-        && (
-            $responseFactoryFromContainer = $container->get(ResponseFactoryInterface::class)
-        ) instanceof ResponseFactoryInterface
-            ? $responseFactoryFromContainer
-            : self::determineResponseFactory();
-
-        $callableResolver = $container->has(CallableResolverInterface::class)
-        && (
-            $callableResolverFromContainer = $container->get(CallableResolverInterface::class)
-        ) instanceof CallableResolverInterface
-            ? $callableResolverFromContainer
-            : null;
-
-        $routeCollector = $container->has(RouteCollectorInterface::class)
-        && (
-            $routeCollectorFromContainer = $container->get(RouteCollectorInterface::class)
-        ) instanceof RouteCollectorInterface
-            ? $routeCollectorFromContainer
-            : null;
-
-        $routeResolver = $container->has(RouteResolverInterface::class)
-        && (
-            $routeResolverFromContainer = $container->get(RouteResolverInterface::class)
-        ) instanceof RouteResolverInterface
-            ? $routeResolverFromContainer
-            : null;
-
-        $middlewareDispatcher = $container->has(MiddlewareDispatcherInterface::class)
-        && (
-            $middlewareDispatcherFromContainer = $container->get(MiddlewareDispatcherInterface::class)
-        ) instanceof MiddlewareDispatcherInterface
-            ? $middlewareDispatcherFromContainer
-            : null;
-
-        return new App(
-            $responseFactory,
-            $container,
-            $callableResolver,
-            $routeCollector,
-            $routeResolver,
-            $middlewareDispatcher
-        );
-    }
-
-    /**
-     * @throws RuntimeException
-     */
-    public static function determineResponseFactory(): ResponseFactoryInterface
-    {
-        if (static::$responseFactory) {
-            if (static::$streamFactory) {
-                return static::attemptResponseFactoryDecoration(static::$responseFactory, static::$streamFactory);
-            }
-            return static::$responseFactory;
-        }
-
-        $psr17FactoryProvider = static::$psr17FactoryProvider ?? new Psr17FactoryProvider();
-
-        /** @var Psr17Factory $psr17factory */
-        foreach ($psr17FactoryProvider->getFactories() as $psr17factory) {
-            if ($psr17factory::isResponseFactoryAvailable()) {
-                $responseFactory = $psr17factory::getResponseFactory();
-
-                if (static::$streamFactory || $psr17factory::isStreamFactoryAvailable()) {
-                    $streamFactory = static::$streamFactory ?? $psr17factory::getStreamFactory();
-                    return static::attemptResponseFactoryDecoration($responseFactory, $streamFactory);
-                }
-
-                return $responseFactory;
-            }
-        }
-
-        throw new RuntimeException(
-            "Could not detect any PSR-17 ResponseFactory implementations. " .
-            "Please install a supported implementation in order to use `AppFactory::create()`. " .
-            "See https://github.com/slimphp/Slim/blob/4.x/README.md for a list of supported implementations."
-        );
-    }
-
-    protected static function attemptResponseFactoryDecoration(
-        ResponseFactoryInterface $responseFactory,
-        StreamFactoryInterface $streamFactory
-    ): ResponseFactoryInterface {
-        if (
-            static::$slimHttpDecoratorsAutomaticDetectionEnabled
-            && SlimHttpPsr17Factory::isResponseFactoryAvailable()
-        ) {
-            return SlimHttpPsr17Factory::createDecoratedResponseFactory($responseFactory, $streamFactory);
-        }
-
-        return $responseFactory;
-    }
-
-    public static function setPsr17FactoryProvider(Psr17FactoryProviderInterface $psr17FactoryProvider): void
-    {
-        static::$psr17FactoryProvider = $psr17FactoryProvider;
-    }
-
-    public static function setResponseFactory(ResponseFactoryInterface $responseFactory): void
-    {
-        static::$responseFactory = $responseFactory;
-    }
-
-    public static function setStreamFactory(StreamFactoryInterface $streamFactory): void
-    {
-        static::$streamFactory = $streamFactory;
-    }
-
-    public static function setContainer(ContainerInterface $container): void
-    {
-        static::$container = $container;
-    }
-
-    public static function setCallableResolver(CallableResolverInterface $callableResolver): void
-    {
-        static::$callableResolver = $callableResolver;
-    }
-
-    public static function setRouteCollector(RouteCollectorInterface $routeCollector): void
-    {
-        static::$routeCollector = $routeCollector;
-    }
-
-    public static function setRouteResolver(RouteResolverInterface $routeResolver): void
-    {
-        static::$routeResolver = $routeResolver;
-    }
-
-    public static function setMiddlewareDispatcher(MiddlewareDispatcherInterface $middlewareDispatcher): void
-    {
-        static::$middlewareDispatcher = $middlewareDispatcher;
-    }
-
-    public static function setSlimHttpDecoratorsAutomaticDetection(bool $enabled): void
-    {
-        static::$slimHttpDecoratorsAutomaticDetectionEnabled = $enabled;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php b/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php
deleted file mode 100644
index 32a548a6720c49f0149982c3907581cb72d8c945..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-class GuzzlePsr17Factory extends Psr17Factory
-{
-    protected static string $responseFactoryClass = 'GuzzleHttp\Psr7\HttpFactory';
-    protected static string $streamFactoryClass = 'GuzzleHttp\Psr7\HttpFactory';
-    protected static string $serverRequestCreatorClass = 'GuzzleHttp\Psr7\ServerRequest';
-    protected static string $serverRequestCreatorMethod = 'fromGlobals';
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php b/vendor/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php
deleted file mode 100644
index c305d7c19a88e7907321b97415aafe0945cee178..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-class HttpSoftPsr17Factory extends Psr17Factory
-{
-    protected static string $responseFactoryClass = 'HttpSoft\Message\ResponseFactory';
-    protected static string $streamFactoryClass = 'HttpSoft\Message\StreamFactory';
-    protected static string $serverRequestCreatorClass = 'HttpSoft\ServerRequest\ServerRequestCreator';
-    protected static string $serverRequestCreatorMethod = 'createFromGlobals';
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php b/vendor/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php
deleted file mode 100644
index e6a9db1acfbb070a40b8f6c866cf384ed8d83337..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-class LaminasDiactorosPsr17Factory extends Psr17Factory
-{
-    protected static string $responseFactoryClass = 'Laminas\Diactoros\ResponseFactory';
-    protected static string $streamFactoryClass = 'Laminas\Diactoros\StreamFactory';
-    protected static string $serverRequestCreatorClass = 'Laminas\Diactoros\ServerRequestFactory';
-    protected static string $serverRequestCreatorMethod = 'fromGlobals';
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php b/vendor/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php
deleted file mode 100644
index ba11095a4d4e4ff440b8d3e2cefd4bf0c32fcb15..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-use Slim\Interfaces\ServerRequestCreatorInterface;
-
-class NyholmPsr17Factory extends Psr17Factory
-{
-    protected static string $responseFactoryClass = 'Nyholm\Psr7\Factory\Psr17Factory';
-    protected static string $streamFactoryClass = 'Nyholm\Psr7\Factory\Psr17Factory';
-    protected static string $serverRequestCreatorClass = 'Nyholm\Psr7Server\ServerRequestCreator';
-    protected static string $serverRequestCreatorMethod = 'fromGlobals';
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function getServerRequestCreator(): ServerRequestCreatorInterface
-    {
-        /*
-         * Nyholm Psr17Factory implements all factories in one unified
-         * factory which implements all of the PSR-17 factory interfaces
-         */
-        $psr17Factory = new static::$responseFactoryClass();
-
-        $serverRequestCreator = new static::$serverRequestCreatorClass(
-            $psr17Factory,
-            $psr17Factory,
-            $psr17Factory,
-            $psr17Factory
-        );
-
-        return new ServerRequestCreator($serverRequestCreator, static::$serverRequestCreatorMethod);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/Psr17Factory.php b/vendor/slim/slim/Slim/Factory/Psr17/Psr17Factory.php
deleted file mode 100644
index 97977f9bb40204e2f1e913678d1aa77fc598bb76..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/Psr17Factory.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\StreamFactoryInterface;
-use RuntimeException;
-use Slim\Interfaces\Psr17FactoryInterface;
-use Slim\Interfaces\ServerRequestCreatorInterface;
-
-use function class_exists;
-use function get_called_class;
-
-abstract class Psr17Factory implements Psr17FactoryInterface
-{
-    protected static string $responseFactoryClass;
-
-    protected static string $streamFactoryClass;
-
-    protected static string $serverRequestCreatorClass;
-
-    protected static string $serverRequestCreatorMethod;
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function getResponseFactory(): ResponseFactoryInterface
-    {
-        if (
-            !static::isResponseFactoryAvailable()
-            || !(($responseFactory = new static::$responseFactoryClass()) instanceof ResponseFactoryInterface)
-        ) {
-            throw new RuntimeException(get_called_class() . ' could not instantiate a response factory.');
-        }
-
-        return $responseFactory;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function getStreamFactory(): StreamFactoryInterface
-    {
-        if (
-            !static::isStreamFactoryAvailable()
-            || !(($streamFactory = new static::$streamFactoryClass()) instanceof StreamFactoryInterface)
-        ) {
-            throw new RuntimeException(get_called_class() . ' could not instantiate a stream factory.');
-        }
-
-        return $streamFactory;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function getServerRequestCreator(): ServerRequestCreatorInterface
-    {
-        if (!static::isServerRequestCreatorAvailable()) {
-            throw new RuntimeException(get_called_class() . ' could not instantiate a server request creator.');
-        }
-
-        return new ServerRequestCreator(static::$serverRequestCreatorClass, static::$serverRequestCreatorMethod);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function isResponseFactoryAvailable(): bool
-    {
-        return static::$responseFactoryClass && class_exists(static::$responseFactoryClass);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function isStreamFactoryAvailable(): bool
-    {
-        return static::$streamFactoryClass && class_exists(static::$streamFactoryClass);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function isServerRequestCreatorAvailable(): bool
-    {
-        return (
-            static::$serverRequestCreatorClass
-            && static::$serverRequestCreatorMethod
-            && class_exists(static::$serverRequestCreatorClass)
-        );
-    }
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php b/vendor/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php
deleted file mode 100644
index 436d2af0b3d12d7b8f199b43309846b0154d2995..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-use Slim\Interfaces\Psr17FactoryProviderInterface;
-
-use function array_unshift;
-
-class Psr17FactoryProvider implements Psr17FactoryProviderInterface
-{
-    /**
-     * @var string[]
-     */
-    protected static array $factories = [
-        SlimPsr17Factory::class,
-        HttpSoftPsr17Factory::class,
-        NyholmPsr17Factory::class,
-        LaminasDiactorosPsr17Factory::class,
-        GuzzlePsr17Factory::class,
-    ];
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function getFactories(): array
-    {
-        return static::$factories;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function setFactories(array $factories): void
-    {
-        static::$factories = $factories;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function addFactory(string $factory): void
-    {
-        array_unshift(static::$factories, $factory);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php b/vendor/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php
deleted file mode 100644
index 0fc6c0663097dc9c94a0f11fcf014fdee185a31c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-use Closure;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Interfaces\ServerRequestCreatorInterface;
-
-class ServerRequestCreator implements ServerRequestCreatorInterface
-{
-    /**
-     * @var object|string
-     */
-    protected $serverRequestCreator;
-
-    protected string $serverRequestCreatorMethod;
-
-    /**
-     * @param object|string $serverRequestCreator
-     */
-    public function __construct($serverRequestCreator, string $serverRequestCreatorMethod)
-    {
-        $this->serverRequestCreator = $serverRequestCreator;
-        $this->serverRequestCreatorMethod = $serverRequestCreatorMethod;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function createServerRequestFromGlobals(): ServerRequestInterface
-    {
-        /** @var callable $callable */
-        $callable = [$this->serverRequestCreator, $this->serverRequestCreatorMethod];
-        return (Closure::fromCallable($callable))();
-    }
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php b/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php
deleted file mode 100644
index 5d636318bc845e02c600fd4f73880c6e37226369..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\StreamFactoryInterface;
-use RuntimeException;
-
-class SlimHttpPsr17Factory extends Psr17Factory
-{
-    protected static string $responseFactoryClass = 'Slim\Http\Factory\DecoratedResponseFactory';
-
-    /**
-     * @throws RuntimeException when the factory could not be instantiated
-     */
-    public static function createDecoratedResponseFactory(
-        ResponseFactoryInterface $responseFactory,
-        StreamFactoryInterface $streamFactory
-    ): ResponseFactoryInterface {
-        if (
-            !((
-                $decoratedResponseFactory = new static::$responseFactoryClass($responseFactory, $streamFactory)
-                ) instanceof ResponseFactoryInterface
-            )
-        ) {
-            throw new RuntimeException(get_called_class() . ' could not instantiate a decorated response factory.');
-        }
-
-        return $decoratedResponseFactory;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php b/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php
deleted file mode 100644
index eb50d48415595bb1c9fa534e2cbb1a38d3712262..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-use Psr\Http\Message\ServerRequestInterface;
-use RuntimeException;
-use Slim\Interfaces\ServerRequestCreatorInterface;
-
-use function class_exists;
-
-class SlimHttpServerRequestCreator implements ServerRequestCreatorInterface
-{
-    protected ServerRequestCreatorInterface $serverRequestCreator;
-
-    protected static string $serverRequestDecoratorClass = 'Slim\Http\ServerRequest';
-
-    public function __construct(ServerRequestCreatorInterface $serverRequestCreator)
-    {
-        $this->serverRequestCreator = $serverRequestCreator;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function createServerRequestFromGlobals(): ServerRequestInterface
-    {
-        if (!static::isServerRequestDecoratorAvailable()) {
-            throw new RuntimeException('The Slim-Http ServerRequest decorator is not available.');
-        }
-
-        $request = $this->serverRequestCreator->createServerRequestFromGlobals();
-
-        if (
-            !((
-                $decoratedServerRequest = new static::$serverRequestDecoratorClass($request)
-                ) instanceof ServerRequestInterface)
-        ) {
-            throw new RuntimeException(get_called_class() . ' could not instantiate a decorated server request.');
-        }
-
-        return $decoratedServerRequest;
-    }
-
-    public static function isServerRequestDecoratorAvailable(): bool
-    {
-        return class_exists(static::$serverRequestDecoratorClass);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php b/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php
deleted file mode 100644
index 46c46f9ce3b0ab4f138d7f50a9caf2e62dee2aae..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory\Psr17;
-
-class SlimPsr17Factory extends Psr17Factory
-{
-    protected static string $responseFactoryClass = 'Slim\Psr7\Factory\ResponseFactory';
-    protected static string $streamFactoryClass = 'Slim\Psr7\Factory\StreamFactory';
-    protected static string $serverRequestCreatorClass = 'Slim\Psr7\Factory\ServerRequestFactory';
-    protected static string $serverRequestCreatorMethod = 'createFromGlobals';
-}
diff --git a/vendor/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php b/vendor/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php
deleted file mode 100644
index 94f639d2adad139aa7532bd0b236a5d5b46f1a7a..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Factory;
-
-use RuntimeException;
-use Slim\Factory\Psr17\Psr17Factory;
-use Slim\Factory\Psr17\Psr17FactoryProvider;
-use Slim\Factory\Psr17\SlimHttpServerRequestCreator;
-use Slim\Interfaces\Psr17FactoryProviderInterface;
-use Slim\Interfaces\ServerRequestCreatorInterface;
-
-class ServerRequestCreatorFactory
-{
-    protected static ?Psr17FactoryProviderInterface $psr17FactoryProvider = null;
-
-    protected static ?ServerRequestCreatorInterface $serverRequestCreator = null;
-
-    protected static bool $slimHttpDecoratorsAutomaticDetectionEnabled = true;
-
-    public static function create(): ServerRequestCreatorInterface
-    {
-        return static::determineServerRequestCreator();
-    }
-
-    /**
-     * @throws RuntimeException
-     */
-    public static function determineServerRequestCreator(): ServerRequestCreatorInterface
-    {
-        if (static::$serverRequestCreator) {
-            return static::attemptServerRequestCreatorDecoration(static::$serverRequestCreator);
-        }
-
-        $psr17FactoryProvider = static::$psr17FactoryProvider ?? new Psr17FactoryProvider();
-
-        /** @var Psr17Factory $psr17Factory */
-        foreach ($psr17FactoryProvider->getFactories() as $psr17Factory) {
-            if ($psr17Factory::isServerRequestCreatorAvailable()) {
-                $serverRequestCreator = $psr17Factory::getServerRequestCreator();
-                return static::attemptServerRequestCreatorDecoration($serverRequestCreator);
-            }
-        }
-
-        throw new RuntimeException(
-            "Could not detect any ServerRequest creator implementations. " .
-            "Please install a supported implementation in order to use `App::run()` " .
-            "without having to pass in a `ServerRequest` object. " .
-            "See https://github.com/slimphp/Slim/blob/4.x/README.md for a list of supported implementations."
-        );
-    }
-
-    protected static function attemptServerRequestCreatorDecoration(
-        ServerRequestCreatorInterface $serverRequestCreator
-    ): ServerRequestCreatorInterface {
-        if (
-            static::$slimHttpDecoratorsAutomaticDetectionEnabled
-            && SlimHttpServerRequestCreator::isServerRequestDecoratorAvailable()
-        ) {
-            return new SlimHttpServerRequestCreator($serverRequestCreator);
-        }
-
-        return $serverRequestCreator;
-    }
-
-    public static function setPsr17FactoryProvider(Psr17FactoryProviderInterface $psr17FactoryProvider): void
-    {
-        static::$psr17FactoryProvider = $psr17FactoryProvider;
-    }
-
-    public static function setServerRequestCreator(ServerRequestCreatorInterface $serverRequestCreator): void
-    {
-        self::$serverRequestCreator = $serverRequestCreator;
-    }
-
-    public static function setSlimHttpDecoratorsAutomaticDetection(bool $enabled): void
-    {
-        static::$slimHttpDecoratorsAutomaticDetectionEnabled = $enabled;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Handlers/ErrorHandler.php b/vendor/slim/slim/Slim/Handlers/ErrorHandler.php
deleted file mode 100644
index f9606e364baf7da6e65be3626b643c4538c85ef9..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Handlers/ErrorHandler.php
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Handlers;
-
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Log\LoggerInterface;
-use RuntimeException;
-use Slim\Error\Renderers\HtmlErrorRenderer;
-use Slim\Error\Renderers\JsonErrorRenderer;
-use Slim\Error\Renderers\PlainTextErrorRenderer;
-use Slim\Error\Renderers\XmlErrorRenderer;
-use Slim\Exception\HttpException;
-use Slim\Exception\HttpMethodNotAllowedException;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\ErrorHandlerInterface;
-use Slim\Interfaces\ErrorRendererInterface;
-use Slim\Logger;
-use Throwable;
-
-use function array_intersect;
-use function array_key_exists;
-use function array_keys;
-use function call_user_func;
-use function count;
-use function current;
-use function explode;
-use function implode;
-use function next;
-use function preg_match;
-
-/**
- * Default Slim application error handler
- *
- * It outputs the error message and diagnostic information in one of the following formats:
- * JSON, XML, Plain Text or HTML based on the Accept header.
- */
-class ErrorHandler implements ErrorHandlerInterface
-{
-    protected string $defaultErrorRendererContentType = 'text/html';
-
-    /**
-     * @var ErrorRendererInterface|string|callable
-     */
-    protected $defaultErrorRenderer = HtmlErrorRenderer::class;
-
-    /**
-     * @var ErrorRendererInterface|string|callable
-     */
-    protected $logErrorRenderer = PlainTextErrorRenderer::class;
-
-    /**
-     * @var array<string|callable>
-     */
-    protected array $errorRenderers = [
-        'application/json' => JsonErrorRenderer::class,
-        'application/xml' => XmlErrorRenderer::class,
-        'text/xml' => XmlErrorRenderer::class,
-        'text/html' => HtmlErrorRenderer::class,
-        'text/plain' => PlainTextErrorRenderer::class,
-    ];
-
-    protected bool $displayErrorDetails = false;
-
-    protected bool $logErrors;
-
-    protected bool $logErrorDetails = false;
-
-    protected ?string $contentType = null;
-
-    protected ?string $method = null;
-
-    protected ServerRequestInterface $request;
-
-    protected Throwable $exception;
-
-    protected int $statusCode;
-
-    protected CallableResolverInterface $callableResolver;
-
-    protected ResponseFactoryInterface $responseFactory;
-
-    protected LoggerInterface $logger;
-
-    public function __construct(
-        CallableResolverInterface $callableResolver,
-        ResponseFactoryInterface $responseFactory,
-        ?LoggerInterface $logger = null
-    ) {
-        $this->callableResolver = $callableResolver;
-        $this->responseFactory = $responseFactory;
-        $this->logger = $logger ?: $this->getDefaultLogger();
-    }
-
-    /**
-     * Invoke error handler
-     *
-     * @param ServerRequestInterface $request             The most recent Request object
-     * @param Throwable              $exception           The caught Exception object
-     * @param bool                   $displayErrorDetails Whether or not to display the error details
-     * @param bool                   $logErrors           Whether or not to log errors
-     * @param bool                   $logErrorDetails     Whether or not to log error details
-     */
-    public function __invoke(
-        ServerRequestInterface $request,
-        Throwable $exception,
-        bool $displayErrorDetails,
-        bool $logErrors,
-        bool $logErrorDetails
-    ): ResponseInterface {
-        $this->displayErrorDetails = $displayErrorDetails;
-        $this->logErrors = $logErrors;
-        $this->logErrorDetails = $logErrorDetails;
-        $this->request = $request;
-        $this->exception = $exception;
-        $this->method = $request->getMethod();
-        $this->statusCode = $this->determineStatusCode();
-        if ($this->contentType === null) {
-            $this->contentType = $this->determineContentType($request);
-        }
-
-        if ($logErrors) {
-            $this->writeToErrorLog();
-        }
-
-        return $this->respond();
-    }
-
-    /**
-     * Force the content type for all error handler responses.
-     *
-     * @param string|null $contentType The content type
-     */
-    public function forceContentType(?string $contentType): void
-    {
-        $this->contentType = $contentType;
-    }
-
-    protected function determineStatusCode(): int
-    {
-        if ($this->method === 'OPTIONS') {
-            return 200;
-        }
-
-        if ($this->exception instanceof HttpException) {
-            return $this->exception->getCode();
-        }
-
-        return 500;
-    }
-
-    /**
-     * Determine which content type we know about is wanted using Accept header
-     *
-     * Note: This method is a bare-bones implementation designed specifically for
-     * Slim's error handling requirements. Consider a fully-feature solution such
-     * as willdurand/negotiation for any other situation.
-     */
-    protected function determineContentType(ServerRequestInterface $request): ?string
-    {
-        $acceptHeader = $request->getHeaderLine('Accept');
-        $selectedContentTypes = array_intersect(
-            explode(',', $acceptHeader),
-            array_keys($this->errorRenderers)
-        );
-        $count = count($selectedContentTypes);
-
-        if ($count) {
-            $current = current($selectedContentTypes);
-
-            /**
-             * Ensure other supported content types take precedence over text/plain
-             * when multiple content types are provided via Accept header.
-             */
-            if ($current === 'text/plain' && $count > 1) {
-                $next = next($selectedContentTypes);
-                if (is_string($next)) {
-                    return $next;
-                }
-            }
-
-            if (is_string($current)) {
-                return $current;
-            }
-        }
-
-        if (preg_match('/\+(json|xml)/', $acceptHeader, $matches)) {
-            $mediaType = 'application/' . $matches[1];
-            if (array_key_exists($mediaType, $this->errorRenderers)) {
-                return $mediaType;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Determine which renderer to use based on content type
-     *
-     * @throws RuntimeException
-     */
-    protected function determineRenderer(): callable
-    {
-        if ($this->contentType !== null && array_key_exists($this->contentType, $this->errorRenderers)) {
-            $renderer = $this->errorRenderers[$this->contentType];
-        } else {
-            $renderer = $this->defaultErrorRenderer;
-        }
-
-        return $this->callableResolver->resolve($renderer);
-    }
-
-    /**
-     * Register an error renderer for a specific content-type
-     *
-     * @param string  $contentType  The content-type this renderer should be registered to
-     * @param ErrorRendererInterface|string|callable $errorRenderer The error renderer
-     */
-    public function registerErrorRenderer(string $contentType, $errorRenderer): void
-    {
-        $this->errorRenderers[$contentType] = $errorRenderer;
-    }
-
-    /**
-     * Set the default error renderer
-     *
-     * @param string                                 $contentType   The content type of the default error renderer
-     * @param ErrorRendererInterface|string|callable $errorRenderer The default error renderer
-     */
-    public function setDefaultErrorRenderer(string $contentType, $errorRenderer): void
-    {
-        $this->defaultErrorRendererContentType = $contentType;
-        $this->defaultErrorRenderer = $errorRenderer;
-    }
-
-    /**
-     * Set the renderer for the error logger
-     *
-     * @param ErrorRendererInterface|string|callable $logErrorRenderer
-     */
-    public function setLogErrorRenderer($logErrorRenderer): void
-    {
-        $this->logErrorRenderer = $logErrorRenderer;
-    }
-
-    /**
-     * Write to the error log if $logErrors has been set to true
-     */
-    protected function writeToErrorLog(): void
-    {
-        $renderer = $this->callableResolver->resolve($this->logErrorRenderer);
-        $error = $renderer($this->exception, $this->logErrorDetails);
-        if (!$this->displayErrorDetails) {
-            $error .= "\nTips: To display error details in HTTP response ";
-            $error .= 'set "displayErrorDetails" to true in the ErrorHandler constructor.';
-        }
-        $this->logError($error);
-    }
-
-    /**
-     * Wraps the error_log function so that this can be easily tested
-     */
-    protected function logError(string $error): void
-    {
-        $this->logger->error($error);
-    }
-
-    /**
-     * Returns a default logger implementation.
-     */
-    protected function getDefaultLogger(): LoggerInterface
-    {
-        return new Logger();
-    }
-
-    protected function respond(): ResponseInterface
-    {
-        $response = $this->responseFactory->createResponse($this->statusCode);
-        if ($this->contentType !== null && array_key_exists($this->contentType, $this->errorRenderers)) {
-            $response = $response->withHeader('Content-type', $this->contentType);
-        } else {
-            $response = $response->withHeader('Content-type', $this->defaultErrorRendererContentType);
-        }
-
-        if ($this->exception instanceof HttpMethodNotAllowedException) {
-            $allowedMethods = implode(', ', $this->exception->getAllowedMethods());
-            $response = $response->withHeader('Allow', $allowedMethods);
-        }
-
-        $renderer = $this->determineRenderer();
-        $body = call_user_func($renderer, $this->exception, $this->displayErrorDetails);
-        if ($body !== false) {
-            /** @var string $body */
-            $response->getBody()->write($body);
-        }
-
-        return $response;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php b/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php
deleted file mode 100644
index ea88a5f12dc938b7992aee760fb5c6cdc98fbbe3..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Handlers\Strategies;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Interfaces\RequestHandlerInvocationStrategyInterface;
-
-/**
- * PSR-15 RequestHandler invocation strategy
- */
-class RequestHandler implements RequestHandlerInvocationStrategyInterface
-{
-    protected bool $appendRouteArgumentsToRequestAttributes;
-
-    public function __construct(bool $appendRouteArgumentsToRequestAttributes = false)
-    {
-        $this->appendRouteArgumentsToRequestAttributes = $appendRouteArgumentsToRequestAttributes;
-    }
-
-    /**
-     * Invoke a route callable that implements RequestHandlerInterface
-     *
-     * @param array<string, string>  $routeArguments
-     */
-    public function __invoke(
-        callable $callable,
-        ServerRequestInterface $request,
-        ResponseInterface $response,
-        array $routeArguments
-    ): ResponseInterface {
-        if ($this->appendRouteArgumentsToRequestAttributes) {
-            foreach ($routeArguments as $k => $v) {
-                $request = $request->withAttribute($k, $v);
-            }
-        }
-
-        return $callable($request);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php b/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php
deleted file mode 100644
index 651111ddeb695b618d0b69213eb0ecbd9523d849..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Handlers\Strategies;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Interfaces\InvocationStrategyInterface;
-use RuntimeException;
-
-/**
- * Route callback strategy with route parameters as individual arguments.
- */
-class RequestResponseNamedArgs implements InvocationStrategyInterface
-{
-    public function __construct()
-    {
-        if (PHP_VERSION_ID < 80000) {
-            throw new RuntimeException('Named arguments are only available for PHP >= 8.0.0');
-        }
-    }
-
-    /**
-     * Invoke a route callable with request, response and all route parameters
-     * as individual arguments.
-     *
-     * @param array<string, string>  $routeArguments
-     */
-    public function __invoke(
-        callable $callable,
-        ServerRequestInterface $request,
-        ResponseInterface $response,
-        array $routeArguments
-    ): ResponseInterface {
-        return $callable($request, $response, ...$routeArguments);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php b/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php
deleted file mode 100644
index aa1d897de613cf80046894a7c9fa0362df14ef76..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-interface AdvancedCallableResolverInterface extends CallableResolverInterface
-{
-    /**
-     * Resolve $toResolve into a callable
-     *
-     * @param string|callable $toResolve
-     */
-    public function resolveRoute($toResolve): callable;
-
-    /**
-     * Resolve $toResolve into a callable
-     *
-     * @param string|callable $toResolve
-     */
-    public function resolveMiddleware($toResolve): callable;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/DispatcherInterface.php b/vendor/slim/slim/Slim/Interfaces/DispatcherInterface.php
deleted file mode 100644
index 63133793f3ed2ca9034aa61818c73abe4b3558c4..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/DispatcherInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Slim\Routing\RoutingResults;
-
-interface DispatcherInterface
-{
-    /**
-     * Get routing results for a given request method and uri
-     */
-    public function dispatch(string $method, string $uri): RoutingResults;
-
-    /**
-     * Get allowed methods for a given uri
-     *
-     * @return string[]
-     */
-    public function getAllowedMethods(string $uri): array;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php b/vendor/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php
deleted file mode 100644
index 8950e6ecebcd4db784c1db6eb8ad169631d9dc48..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Throwable;
-
-interface ErrorHandlerInterface
-{
-    public function __invoke(
-        ServerRequestInterface $request,
-        Throwable $exception,
-        bool $displayErrorDetails,
-        bool $logErrors,
-        bool $logErrorDetails
-    ): ResponseInterface;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/ErrorRendererInterface.php b/vendor/slim/slim/Slim/Interfaces/ErrorRendererInterface.php
deleted file mode 100644
index 05be65598eb4ad987cd3d91957595ef8557c3957..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/ErrorRendererInterface.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Throwable;
-
-interface ErrorRendererInterface
-{
-    public function __invoke(Throwable $exception, bool $displayErrorDetails): string;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php b/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php
deleted file mode 100644
index aa7a26ad27e4ef4f96d33d047bdbdf0ed25a8978..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-
-interface MiddlewareDispatcherInterface extends RequestHandlerInterface
-{
-    /**
-     * Add a new middleware to the stack
-     *
-     * Middleware are organized as a stack. That means middleware
-     * that have been added before will be executed after the newly
-     * added one (last in, first out).
-     *
-     * @param MiddlewareInterface|string|callable $middleware
-     */
-    public function add($middleware): self;
-
-    /**
-     * Add a new middleware to the stack
-     *
-     * Middleware are organized as a stack. That means middleware
-     * that have been added before will be executed after the newly
-     * added one (last in, first out).
-     */
-    public function addMiddleware(MiddlewareInterface $middleware): self;
-
-    /**
-     * Seed the middleware stack with the inner request handler
-     */
-    public function seedMiddlewareStack(RequestHandlerInterface $kernel): void;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php b/vendor/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php
deleted file mode 100644
index 8cf0102874363d7d53188ec7aa120f10f8093e04..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\StreamFactoryInterface;
-use RuntimeException;
-
-interface Psr17FactoryInterface
-{
-    /**
-     * @throws RuntimeException when the factory could not be instantiated
-     */
-    public static function getResponseFactory(): ResponseFactoryInterface;
-
-    /**
-     * @throws RuntimeException when the factory could not be instantiated
-     */
-    public static function getStreamFactory(): StreamFactoryInterface;
-
-    /**
-     * @throws RuntimeException when the factory could not be instantiated
-     */
-    public static function getServerRequestCreator(): ServerRequestCreatorInterface;
-
-    /**
-     * Is the PSR-17 ResponseFactory available
-     */
-    public static function isResponseFactoryAvailable(): bool;
-
-    /**
-     * Is the PSR-17 StreamFactory available
-     */
-    public static function isStreamFactoryAvailable(): bool;
-
-    /**
-     * Is the ServerRequest creator available
-     */
-    public static function isServerRequestCreatorAvailable(): bool;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php b/vendor/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php
deleted file mode 100644
index c7b87aa78763bcacd9ad7ba32244cb8851456222..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-interface Psr17FactoryProviderInterface
-{
-    /**
-     * @return string[]
-     */
-    public static function getFactories(): array;
-
-    /**
-     * @param string[] $factories
-     */
-    public static function setFactories(array $factories): void;
-
-    public static function addFactory(string $factory): void;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php b/vendor/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php
deleted file mode 100644
index ec98fc6def2dce47bc9044e86e1bb1e99deb3dae..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-interface RequestHandlerInvocationStrategyInterface extends InvocationStrategyInterface
-{
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/RouteCollectorInterface.php b/vendor/slim/slim/Slim/Interfaces/RouteCollectorInterface.php
deleted file mode 100644
index 921a2365f7c5d1d3001a76089dc003f0d1556291..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/RouteCollectorInterface.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use InvalidArgumentException;
-use RuntimeException;
-
-interface RouteCollectorInterface
-{
-    /**
-     * Get the route parser
-     */
-    public function getRouteParser(): RouteParserInterface;
-
-    /**
-     * Get default route invocation strategy
-     */
-    public function getDefaultInvocationStrategy(): InvocationStrategyInterface;
-
-    /**
-     * Set default route invocation strategy
-     */
-    public function setDefaultInvocationStrategy(InvocationStrategyInterface $strategy): RouteCollectorInterface;
-
-    /**
-     * Get path to FastRoute cache file
-     */
-    public function getCacheFile(): ?string;
-
-    /**
-     * Set path to FastRoute cache file
-     *
-     * @throws InvalidArgumentException
-     * @throws RuntimeException
-     */
-    public function setCacheFile(string $cacheFile): RouteCollectorInterface;
-
-    /**
-     * Get the base path used in pathFor()
-     */
-    public function getBasePath(): string;
-
-    /**
-     * Set the base path used in pathFor()
-     */
-    public function setBasePath(string $basePath): RouteCollectorInterface;
-
-    /**
-     * Get route objects
-     *
-     * @return RouteInterface[]
-     */
-    public function getRoutes(): array;
-
-    /**
-     * Get named route object
-     *
-     * @param string $name Route name
-     *
-     * @throws RuntimeException   If named route does not exist
-     */
-    public function getNamedRoute(string $name): RouteInterface;
-
-    /**
-     * Remove named route
-     *
-     * @param string $name Route name
-     *
-     * @throws RuntimeException   If named route does not exist
-     */
-    public function removeNamedRoute(string $name): RouteCollectorInterface;
-
-    /**
-     * Lookup a route via the route's unique identifier
-     *
-     * @throws RuntimeException   If route of identifier does not exist
-     */
-    public function lookupRoute(string $identifier): RouteInterface;
-
-    /**
-     * Add route group
-     * @param string|callable $callable
-     */
-    public function group(string $pattern, $callable): RouteGroupInterface;
-
-    /**
-     * Add route
-     *
-     * @param string[]        $methods Array of HTTP methods
-     * @param string          $pattern The route pattern
-     * @param callable|string $handler The route callable
-     */
-    public function map(array $methods, string $pattern, $handler): RouteInterface;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php b/vendor/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php
deleted file mode 100644
index fcbed92b6565c6fc05e6817add0bd56d41109cb9..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Psr\Container\ContainerInterface;
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\UriInterface;
-
-interface RouteCollectorProxyInterface
-{
-    public function getResponseFactory(): ResponseFactoryInterface;
-
-    public function getCallableResolver(): CallableResolverInterface;
-
-    public function getContainer(): ?ContainerInterface;
-
-    public function getRouteCollector(): RouteCollectorInterface;
-
-    /**
-     * Get the RouteCollectorProxy's base path
-     */
-    public function getBasePath(): string;
-
-    /**
-     * Set the RouteCollectorProxy's base path
-     */
-    public function setBasePath(string $basePath): RouteCollectorProxyInterface;
-
-    /**
-     * Add GET route
-     *
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function get(string $pattern, $callable): RouteInterface;
-
-    /**
-     * Add POST route
-     *
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function post(string $pattern, $callable): RouteInterface;
-
-    /**
-     * Add PUT route
-     *
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function put(string $pattern, $callable): RouteInterface;
-
-    /**
-     * Add PATCH route
-     *
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function patch(string $pattern, $callable): RouteInterface;
-
-    /**
-     * Add DELETE route
-     *
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function delete(string $pattern, $callable): RouteInterface;
-
-    /**
-     * Add OPTIONS route
-     *
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function options(string $pattern, $callable): RouteInterface;
-
-    /**
-     * Add route for any HTTP method
-     *
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function any(string $pattern, $callable): RouteInterface;
-
-    /**
-     * Add route with multiple methods
-     *
-     * @param  string[]        $methods  Numeric array of HTTP method names
-     * @param  string          $pattern  The route URI pattern
-     * @param  callable|string $callable The route callback routine
-     */
-    public function map(array $methods, string $pattern, $callable): RouteInterface;
-
-    /**
-     * Route Groups
-     *
-     * This method accepts a route pattern and a callback. All route
-     * declarations in the callback will be prepended by the group(s)
-     * that it is in.
-     * @param string|callable $callable
-     */
-    public function group(string $pattern, $callable): RouteGroupInterface;
-
-    /**
-     * Add a route that sends an HTTP redirect
-     *
-     * @param string|UriInterface $to
-     */
-    public function redirect(string $from, $to, int $status = 302): RouteInterface;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php b/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php
deleted file mode 100644
index 03d9326651954265bc1116d2a6f5ebb081ecfb0a..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use InvalidArgumentException;
-use Psr\Http\Message\UriInterface;
-use RuntimeException;
-
-interface RouteParserInterface
-{
-    /**
-     * Build the path for a named route excluding the base path
-     *
-     * @param string                $routeName   Route name
-     * @param array<string, string> $data        Named argument replacement data
-     * @param array<string, string> $queryParams Optional query string parameters
-     *
-     * @throws RuntimeException         If named route does not exist
-     * @throws InvalidArgumentException If required data not provided
-     */
-    public function relativeUrlFor(string $routeName, array $data = [], array $queryParams = []): string;
-
-    /**
-     * Build the path for a named route including the base path
-     *
-     * @param string                $routeName   Route name
-     * @param array<string, string> $data        Named argument replacement data
-     * @param array<string, string> $queryParams Optional query string parameters
-     *
-     * @throws RuntimeException         If named route does not exist
-     * @throws InvalidArgumentException If required data not provided
-     */
-    public function urlFor(string $routeName, array $data = [], array $queryParams = []): string;
-
-    /**
-     * Get fully qualified URL for named route
-     *
-     * @param UriInterface              $uri
-     * @param string                    $routeName   Route name
-     * @param array<string, string>     $data        Named argument replacement data
-     * @param array<string, string>     $queryParams Optional query string parameters
-     */
-    public function fullUrlFor(UriInterface $uri, string $routeName, array $data = [], array $queryParams = []): string;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php b/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php
deleted file mode 100644
index 256a35997596f6fa5cc27848d0acb5f8dda670a0..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Slim\Routing\RoutingResults;
-
-interface RouteResolverInterface
-{
-    /**
-     * @param string $uri Should be ServerRequestInterface::getUri()->getPath()
-     */
-    public function computeRoutingResults(string $uri, string $method): RoutingResults;
-
-    public function resolveRoute(string $identifier): RouteInterface;
-}
diff --git a/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php b/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php
deleted file mode 100644
index 54d231edd5f17d604b5b107b1259d01886d9287d..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Interfaces;
-
-use Psr\Http\Message\ServerRequestInterface;
-
-interface ServerRequestCreatorInterface
-{
-    public function createServerRequestFromGlobals(): ServerRequestInterface;
-}
diff --git a/vendor/slim/slim/Slim/Logger.php b/vendor/slim/slim/Slim/Logger.php
deleted file mode 100644
index 31282175ca812f5666777e0c8996efa4cd87421a..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Logger.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim;
-
-use Psr\Log\AbstractLogger;
-use Psr\Log\InvalidArgumentException;
-use Stringable;
-
-use function error_log;
-
-class Logger extends AbstractLogger
-{
-    /**
-     * @param mixed             $level
-     * @param string|Stringable $message
-     * @param array<mixed>      $context
-     *
-     * @throws InvalidArgumentException
-     */
-    public function log($level, $message, array $context = []): void
-    {
-        error_log((string) $message);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php b/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php
deleted file mode 100644
index 9a90f30c4a5fdc733780c51d42bfb6c28613f7c7..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Middleware;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use RuntimeException;
-
-use function count;
-use function explode;
-use function is_array;
-use function is_null;
-use function is_object;
-use function is_string;
-use function json_decode;
-use function libxml_clear_errors;
-use function libxml_disable_entity_loader;
-use function libxml_use_internal_errors;
-use function parse_str;
-use function simplexml_load_string;
-use function strtolower;
-use function trim;
-
-use const LIBXML_VERSION;
-
-class BodyParsingMiddleware implements MiddlewareInterface
-{
-    /**
-     * @var callable[]
-     */
-    protected array $bodyParsers;
-
-    /**
-     * @param callable[] $bodyParsers list of body parsers as an associative array of mediaType => callable
-     */
-    public function __construct(array $bodyParsers = [])
-    {
-        $this->registerDefaultBodyParsers();
-
-        foreach ($bodyParsers as $mediaType => $parser) {
-            $this->registerBodyParser($mediaType, $parser);
-        }
-    }
-
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        $parsedBody = $request->getParsedBody();
-
-        if (empty($parsedBody)) {
-            $parsedBody = $this->parseBody($request);
-            $request = $request->withParsedBody($parsedBody);
-        }
-
-        return $handler->handle($request);
-    }
-
-    /**
-     * @param string   $mediaType A HTTP media type (excluding content-type params).
-     * @param callable $callable  A callable that returns parsed contents for media type.
-     */
-    public function registerBodyParser(string $mediaType, callable $callable): self
-    {
-        $this->bodyParsers[$mediaType] = $callable;
-        return $this;
-    }
-
-    /**
-     * @param string   $mediaType A HTTP media type (excluding content-type params).
-     */
-    public function hasBodyParser(string $mediaType): bool
-    {
-        return isset($this->bodyParsers[$mediaType]);
-    }
-
-    /**
-     * @param string    $mediaType A HTTP media type (excluding content-type params).
-     * @throws RuntimeException
-     */
-    public function getBodyParser(string $mediaType): callable
-    {
-        if (!isset($this->bodyParsers[$mediaType])) {
-            throw new RuntimeException('No parser for type ' . $mediaType);
-        }
-        return $this->bodyParsers[$mediaType];
-    }
-
-    protected function registerDefaultBodyParsers(): void
-    {
-        $this->registerBodyParser('application/json', static function ($input) {
-            $result = json_decode($input, true);
-
-            if (!is_array($result)) {
-                return null;
-            }
-
-            return $result;
-        });
-
-        $this->registerBodyParser('application/x-www-form-urlencoded', static function ($input) {
-            parse_str($input, $data);
-            return $data;
-        });
-
-        $xmlCallable = static function ($input) {
-            $backup = self::disableXmlEntityLoader(true);
-            $backup_errors = libxml_use_internal_errors(true);
-            $result = simplexml_load_string($input);
-
-            self::disableXmlEntityLoader($backup);
-            libxml_clear_errors();
-            libxml_use_internal_errors($backup_errors);
-
-            if ($result === false) {
-                return null;
-            }
-
-            return $result;
-        };
-
-        $this->registerBodyParser('application/xml', $xmlCallable);
-        $this->registerBodyParser('text/xml', $xmlCallable);
-    }
-
-    /**
-     * @return null|array<mixed>|object
-     */
-    protected function parseBody(ServerRequestInterface $request)
-    {
-        $mediaType = $this->getMediaType($request);
-        if ($mediaType === null) {
-            return null;
-        }
-
-        // Check if this specific media type has a parser registered first
-        if (!isset($this->bodyParsers[$mediaType])) {
-            // If not, look for a media type with a structured syntax suffix (RFC 6839)
-            $parts = explode('+', $mediaType);
-            if (count($parts) >= 2) {
-                $mediaType = 'application/' . $parts[count($parts) - 1];
-            }
-        }
-
-        if (isset($this->bodyParsers[$mediaType])) {
-            $body = (string)$request->getBody();
-            $parsed = $this->bodyParsers[$mediaType]($body);
-
-            if ($parsed !== null && !is_object($parsed) && !is_array($parsed)) {
-                throw new RuntimeException(
-                    'Request body media type parser return value must be an array, an object, or null'
-                );
-            }
-
-            return $parsed;
-        }
-
-        return null;
-    }
-
-    /**
-     * @return string|null The serverRequest media type, minus content-type params
-     */
-    protected function getMediaType(ServerRequestInterface $request): ?string
-    {
-        $contentType = $request->getHeader('Content-Type')[0] ?? null;
-
-        if (is_string($contentType) && trim($contentType) !== '') {
-            $contentTypeParts = explode(';', $contentType);
-            return strtolower(trim($contentTypeParts[0]));
-        }
-
-        return null;
-    }
-
-    protected static function disableXmlEntityLoader(bool $disable): bool
-    {
-        if (LIBXML_VERSION >= 20900) {
-            // libxml >= 2.9.0 disables entity loading by default, so it is
-            // safe to skip the real call (deprecated in PHP 8).
-            return true;
-        }
-
-        // @codeCoverageIgnoreStart
-        return libxml_disable_entity_loader($disable);
-        // @codeCoverageIgnoreEnd
-    }
-}
diff --git a/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php b/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php
deleted file mode 100644
index 8fa13bcf779f0a7a1af43aa7aabf191ee6b9ecc9..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Middleware;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-
-class ContentLengthMiddleware implements MiddlewareInterface
-{
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        $response = $handler->handle($request);
-
-        // Add Content-Length header if not already added
-        $size = $response->getBody()->getSize();
-        if ($size !== null && !$response->hasHeader('Content-Length')) {
-            $response = $response->withHeader('Content-Length', (string) $size);
-        }
-
-        return $response;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php b/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php
deleted file mode 100644
index 2eb5cc96ffa0592e43e006c87580c711bc773a47..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Middleware;
-
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use Psr\Log\LoggerInterface;
-use Slim\Exception\HttpException;
-use Slim\Handlers\ErrorHandler;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\ErrorHandlerInterface;
-use Throwable;
-
-use function get_class;
-use function is_subclass_of;
-
-class ErrorMiddleware implements MiddlewareInterface
-{
-    protected CallableResolverInterface $callableResolver;
-
-    protected ResponseFactoryInterface $responseFactory;
-
-    protected bool $displayErrorDetails;
-
-    protected bool $logErrors;
-
-    protected bool $logErrorDetails;
-
-    protected ?LoggerInterface $logger = null;
-
-    /**
-     * @var ErrorHandlerInterface[]|callable[]|string[]
-     */
-    protected array $handlers = [];
-
-    /**
-     * @var ErrorHandlerInterface[]|callable[]|string[]
-     */
-    protected array $subClassHandlers = [];
-
-    /**
-     * @var ErrorHandlerInterface|callable|string|null
-     */
-    protected $defaultErrorHandler;
-
-    public function __construct(
-        CallableResolverInterface $callableResolver,
-        ResponseFactoryInterface $responseFactory,
-        bool $displayErrorDetails,
-        bool $logErrors,
-        bool $logErrorDetails,
-        ?LoggerInterface $logger = null
-    ) {
-        $this->callableResolver = $callableResolver;
-        $this->responseFactory = $responseFactory;
-        $this->displayErrorDetails = $displayErrorDetails;
-        $this->logErrors = $logErrors;
-        $this->logErrorDetails = $logErrorDetails;
-        $this->logger = $logger;
-    }
-
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        try {
-            return $handler->handle($request);
-        } catch (Throwable $e) {
-            return $this->handleException($request, $e);
-        }
-    }
-
-    public function handleException(ServerRequestInterface $request, Throwable $exception): ResponseInterface
-    {
-        if ($exception instanceof HttpException) {
-            $request = $exception->getRequest();
-        }
-
-        $exceptionType = get_class($exception);
-        $handler = $this->getErrorHandler($exceptionType);
-
-        return $handler($request, $exception, $this->displayErrorDetails, $this->logErrors, $this->logErrorDetails);
-    }
-
-    /**
-     * Get callable to handle scenarios where an error
-     * occurs when processing the current request.
-     *
-     * @param string $type Exception/Throwable name. ie: RuntimeException::class
-     * @return callable|ErrorHandler
-     */
-    public function getErrorHandler(string $type)
-    {
-        if (isset($this->handlers[$type])) {
-            return $this->callableResolver->resolve($this->handlers[$type]);
-        }
-
-        if (isset($this->subClassHandlers[$type])) {
-            return $this->callableResolver->resolve($this->subClassHandlers[$type]);
-        }
-
-        foreach ($this->subClassHandlers as $class => $handler) {
-            if (is_subclass_of($type, $class)) {
-                return $this->callableResolver->resolve($handler);
-            }
-        }
-
-        return $this->getDefaultErrorHandler();
-    }
-
-    /**
-     * Get default error handler
-     *
-     * @return ErrorHandler|callable
-     */
-    public function getDefaultErrorHandler()
-    {
-        if ($this->defaultErrorHandler === null) {
-            $this->defaultErrorHandler = new ErrorHandler(
-                $this->callableResolver,
-                $this->responseFactory,
-                $this->logger
-            );
-        }
-
-        return $this->callableResolver->resolve($this->defaultErrorHandler);
-    }
-
-    /**
-     * Set callable as the default Slim application error handler.
-     *
-     * The callable signature MUST match the ErrorHandlerInterface
-     *
-     * @see \Slim\Interfaces\ErrorHandlerInterface
-     *
-     * 1. Instance of \Psr\Http\Message\ServerRequestInterface
-     * 2. Instance of \Throwable
-     * 3. Boolean $displayErrorDetails
-     * 4. Boolean $logErrors
-     * 5. Boolean $logErrorDetails
-     *
-     * The callable MUST return an instance of
-     * \Psr\Http\Message\ResponseInterface.
-     *
-     * @param string|callable|ErrorHandler $handler
-     */
-    public function setDefaultErrorHandler($handler): self
-    {
-        $this->defaultErrorHandler = $handler;
-        return $this;
-    }
-
-    /**
-     * Set callable to handle scenarios where an error
-     * occurs when processing the current request.
-     *
-     * The callable signature MUST match the ErrorHandlerInterface
-     *
-     * Pass true to $handleSubclasses to make the handler handle all subclasses of
-     * the type as well. Pass an array of classes to make the same function handle multiple exceptions.
-     *
-     * @see \Slim\Interfaces\ErrorHandlerInterface
-     *
-     * 1. Instance of \Psr\Http\Message\ServerRequestInterface
-     * 2. Instance of \Throwable
-     * 3. Boolean $displayErrorDetails
-     * 4. Boolean $logErrors
-     * 5. Boolean $logErrorDetails
-     *
-     * The callable MUST return an instance of
-     * \Psr\Http\Message\ResponseInterface.
-     *
-     * @param string|string[] $typeOrTypes Exception/Throwable name.
-     * ie: RuntimeException::class or an array of classes
-     * ie: [HttpNotFoundException::class, HttpMethodNotAllowedException::class]
-     * @param string|callable|ErrorHandlerInterface $handler
-     */
-    public function setErrorHandler($typeOrTypes, $handler, bool $handleSubclasses = false): self
-    {
-        if (is_array($typeOrTypes)) {
-            foreach ($typeOrTypes as $type) {
-                $this->addErrorHandler($type, $handler, $handleSubclasses);
-            }
-        } else {
-            $this->addErrorHandler($typeOrTypes, $handler, $handleSubclasses);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Used internally to avoid code repetition when passing multiple exceptions to setErrorHandler().
-     * @param string|callable|ErrorHandlerInterface $handler
-     */
-    private function addErrorHandler(string $type, $handler, bool $handleSubclasses): void
-    {
-        if ($handleSubclasses) {
-            $this->subClassHandlers[$type] = $handler;
-        } else {
-            $this->handlers[$type] = $handler;
-        }
-    }
-}
diff --git a/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php b/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php
deleted file mode 100644
index 079a1f18988f749a75237c552db0aeb5fbf920bf..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Middleware;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-
-use function is_array;
-use function strtoupper;
-
-class MethodOverrideMiddleware implements MiddlewareInterface
-{
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        $methodHeader = $request->getHeaderLine('X-Http-Method-Override');
-
-        if ($methodHeader) {
-            $request = $request->withMethod($methodHeader);
-        } elseif (strtoupper($request->getMethod()) === 'POST') {
-            $body = $request->getParsedBody();
-
-            if (is_array($body) && !empty($body['_METHOD'])) {
-                $request = $request->withMethod($body['_METHOD']);
-            }
-
-            if ($request->getBody()->eof()) {
-                $request->getBody()->rewind();
-            }
-        }
-
-        return $handler->handle($request);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php b/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php
deleted file mode 100644
index 69ee1f6f1fd049055189a65cbb1ed0456ad5c62d..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Middleware;
-
-use InvalidArgumentException;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\StreamFactoryInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use Throwable;
-
-use function in_array;
-use function ob_end_clean;
-use function ob_get_clean;
-use function ob_start;
-
-class OutputBufferingMiddleware implements MiddlewareInterface
-{
-    public const APPEND = 'append';
-    public const PREPEND = 'prepend';
-
-    protected StreamFactoryInterface $streamFactory;
-
-    protected string $style;
-
-    /**
-     * @param string $style Either "append" or "prepend"
-     */
-    public function __construct(StreamFactoryInterface $streamFactory, string $style = 'append')
-    {
-        $this->streamFactory = $streamFactory;
-        $this->style = $style;
-
-        if (!in_array($style, [static::APPEND, static::PREPEND], true)) {
-            throw new InvalidArgumentException("Invalid style `{$style}`. Must be `append` or `prepend`");
-        }
-    }
-
-    /**
-     * @throws Throwable
-     */
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        try {
-            ob_start();
-            $response = $handler->handle($request);
-            $output = ob_get_clean();
-        } catch (Throwable $e) {
-            ob_end_clean();
-            throw $e;
-        }
-
-        if (!empty($output)) {
-            if ($this->style === static::PREPEND) {
-                $body = $this->streamFactory->createStream();
-                $body->write($output . $response->getBody());
-                $response = $response->withBody($body);
-            } elseif ($this->style === static::APPEND && $response->getBody()->isWritable()) {
-                $response->getBody()->write($output);
-            }
-        }
-
-        return $response;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php b/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php
deleted file mode 100644
index a3d3085bd4b7f06c8491a8f1dcf00d25033be99c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Middleware;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use RuntimeException;
-use Slim\Exception\HttpMethodNotAllowedException;
-use Slim\Exception\HttpNotFoundException;
-use Slim\Interfaces\RouteParserInterface;
-use Slim\Interfaces\RouteResolverInterface;
-use Slim\Routing\RouteContext;
-use Slim\Routing\RoutingResults;
-
-class RoutingMiddleware implements MiddlewareInterface
-{
-    protected RouteResolverInterface $routeResolver;
-
-    protected RouteParserInterface $routeParser;
-
-    public function __construct(RouteResolverInterface $routeResolver, RouteParserInterface $routeParser)
-    {
-        $this->routeResolver = $routeResolver;
-        $this->routeParser = $routeParser;
-    }
-
-    /**
-     * @throws HttpNotFoundException
-     * @throws HttpMethodNotAllowedException
-     * @throws RuntimeException
-     */
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        $request = $this->performRouting($request);
-        return $handler->handle($request);
-    }
-
-    /**
-     * Perform routing
-     *
-     * @param  ServerRequestInterface $request PSR7 Server Request
-     *
-     * @throws HttpNotFoundException
-     * @throws HttpMethodNotAllowedException
-     * @throws RuntimeException
-     */
-    public function performRouting(ServerRequestInterface $request): ServerRequestInterface
-    {
-        $request = $request->withAttribute(RouteContext::ROUTE_PARSER, $this->routeParser);
-
-        $routingResults = $this->resolveRoutingResultsFromRequest($request);
-        $routeStatus = $routingResults->getRouteStatus();
-
-        $request = $request->withAttribute(RouteContext::ROUTING_RESULTS, $routingResults);
-
-        switch ($routeStatus) {
-            case RoutingResults::FOUND:
-                $routeArguments = $routingResults->getRouteArguments();
-                $routeIdentifier = $routingResults->getRouteIdentifier() ?? '';
-                $route = $this->routeResolver
-                    ->resolveRoute($routeIdentifier)
-                    ->prepare($routeArguments);
-                return $request->withAttribute(RouteContext::ROUTE, $route);
-
-            case RoutingResults::NOT_FOUND:
-                throw new HttpNotFoundException($request);
-
-            case RoutingResults::METHOD_NOT_ALLOWED:
-                $exception = new HttpMethodNotAllowedException($request);
-                $exception->setAllowedMethods($routingResults->getAllowedMethods());
-                throw $exception;
-
-            default:
-                throw new RuntimeException('An unexpected error occurred while performing routing.');
-        }
-    }
-
-    /**
-     * Resolves the route from the given request
-     */
-    protected function resolveRoutingResultsFromRequest(ServerRequestInterface $request): RoutingResults
-    {
-        return $this->routeResolver->computeRoutingResults(
-            $request->getUri()->getPath(),
-            $request->getMethod()
-        );
-    }
-}
diff --git a/vendor/slim/slim/Slim/MiddlewareDispatcher.php b/vendor/slim/slim/Slim/MiddlewareDispatcher.php
deleted file mode 100644
index 7e05644142c40d4b3598d56a8788467340d9c96c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/MiddlewareDispatcher.php
+++ /dev/null
@@ -1,275 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim;
-
-use Closure;
-use Psr\Container\ContainerInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use RuntimeException;
-use Slim\Interfaces\AdvancedCallableResolverInterface;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\MiddlewareDispatcherInterface;
-
-use function class_exists;
-use function function_exists;
-use function is_callable;
-use function is_string;
-use function preg_match;
-use function sprintf;
-
-class MiddlewareDispatcher implements MiddlewareDispatcherInterface
-{
-    /**
-     * Tip of the middleware call stack
-     */
-    protected RequestHandlerInterface $tip;
-
-    protected ?CallableResolverInterface $callableResolver;
-
-    protected ?ContainerInterface $container;
-
-    public function __construct(
-        RequestHandlerInterface $kernel,
-        ?CallableResolverInterface $callableResolver = null,
-        ?ContainerInterface $container = null
-    ) {
-        $this->seedMiddlewareStack($kernel);
-        $this->callableResolver = $callableResolver;
-        $this->container = $container;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function seedMiddlewareStack(RequestHandlerInterface $kernel): void
-    {
-        $this->tip = $kernel;
-    }
-
-    /**
-     * Invoke the middleware stack
-     */
-    public function handle(ServerRequestInterface $request): ResponseInterface
-    {
-        return $this->tip->handle($request);
-    }
-
-    /**
-     * Add a new middleware to the stack
-     *
-     * Middleware are organized as a stack. That means middleware
-     * that have been added before will be executed after the newly
-     * added one (last in, first out).
-     *
-     * @param MiddlewareInterface|string|callable $middleware
-     */
-    public function add($middleware): MiddlewareDispatcherInterface
-    {
-        if ($middleware instanceof MiddlewareInterface) {
-            return $this->addMiddleware($middleware);
-        }
-
-        if (is_string($middleware)) {
-            return $this->addDeferred($middleware);
-        }
-
-        if (is_callable($middleware)) {
-            return $this->addCallable($middleware);
-        }
-
-        /** @phpstan-ignore-next-line */
-        throw new RuntimeException(
-            'A middleware must be an object/class name referencing an implementation of ' .
-            'MiddlewareInterface or a callable with a matching signature.'
-        );
-    }
-
-    /**
-     * Add a new middleware to the stack
-     *
-     * Middleware are organized as a stack. That means middleware
-     * that have been added before will be executed after the newly
-     * added one (last in, first out).
-     */
-    public function addMiddleware(MiddlewareInterface $middleware): MiddlewareDispatcherInterface
-    {
-        $next = $this->tip;
-        $this->tip = new class ($middleware, $next) implements RequestHandlerInterface {
-            private MiddlewareInterface $middleware;
-
-            private RequestHandlerInterface $next;
-
-            public function __construct(MiddlewareInterface $middleware, RequestHandlerInterface $next)
-            {
-                $this->middleware = $middleware;
-                $this->next = $next;
-            }
-
-            public function handle(ServerRequestInterface $request): ResponseInterface
-            {
-                return $this->middleware->process($request, $this->next);
-            }
-        };
-
-        return $this;
-    }
-
-    /**
-     * Add a new middleware by class name
-     *
-     * Middleware are organized as a stack. That means middleware
-     * that have been added before will be executed after the newly
-     * added one (last in, first out).
-     */
-    public function addDeferred(string $middleware): self
-    {
-        $next = $this->tip;
-        $this->tip = new class (
-            $middleware,
-            $next,
-            $this->container,
-            $this->callableResolver
-        ) implements RequestHandlerInterface {
-            private string $middleware;
-
-            private RequestHandlerInterface $next;
-
-            private ?ContainerInterface $container;
-
-            private ?CallableResolverInterface $callableResolver;
-
-            public function __construct(
-                string $middleware,
-                RequestHandlerInterface $next,
-                ?ContainerInterface $container = null,
-                ?CallableResolverInterface $callableResolver = null
-            ) {
-                $this->middleware = $middleware;
-                $this->next = $next;
-                $this->container = $container;
-                $this->callableResolver = $callableResolver;
-            }
-
-            public function handle(ServerRequestInterface $request): ResponseInterface
-            {
-                if ($this->callableResolver instanceof AdvancedCallableResolverInterface) {
-                    $callable = $this->callableResolver->resolveMiddleware($this->middleware);
-                    return $callable($request, $this->next);
-                }
-
-                $callable = null;
-
-                if ($this->callableResolver instanceof CallableResolverInterface) {
-                    try {
-                        $callable = $this->callableResolver->resolve($this->middleware);
-                    } catch (RuntimeException $e) {
-                        // Do Nothing
-                    }
-                }
-
-                if (!$callable) {
-                    $resolved = $this->middleware;
-                    $instance = null;
-                    $method = null;
-
-                    // Check for Slim callable as `class:method`
-                    if (preg_match(CallableResolver::$callablePattern, $resolved, $matches)) {
-                        $resolved = $matches[1];
-                        $method = $matches[2];
-                    }
-
-                    if ($this->container && $this->container->has($resolved)) {
-                        $instance = $this->container->get($resolved);
-                        if ($instance instanceof MiddlewareInterface) {
-                            return $instance->process($request, $this->next);
-                        }
-                    } elseif (!function_exists($resolved)) {
-                        if (!class_exists($resolved)) {
-                            throw new RuntimeException(sprintf('Middleware %s does not exist', $resolved));
-                        }
-                        $instance = new $resolved($this->container);
-                    }
-
-                    if ($instance && $instance instanceof MiddlewareInterface) {
-                        return $instance->process($request, $this->next);
-                    }
-
-                    $callable = $instance ?? $resolved;
-                    if ($instance && $method) {
-                        $callable = [$instance, $method];
-                    }
-
-                    if ($this->container && $callable instanceof Closure) {
-                        $callable = $callable->bindTo($this->container);
-                    }
-                }
-
-                if (!is_callable($callable)) {
-                    throw new RuntimeException(
-                        sprintf(
-                            'Middleware %s is not resolvable',
-                            $this->middleware
-                        )
-                    );
-                }
-
-                return $callable($request, $this->next);
-            }
-        };
-
-        return $this;
-    }
-
-    /**
-     * Add a (non-standard) callable middleware to the stack
-     *
-     * Middleware are organized as a stack. That means middleware
-     * that have been added before will be executed after the newly
-     * added one (last in, first out).
-     */
-    public function addCallable(callable $middleware): self
-    {
-        $next = $this->tip;
-
-        if ($this->container && $middleware instanceof Closure) {
-            /** @var Closure $middleware */
-            $middleware = $middleware->bindTo($this->container);
-        }
-
-        $this->tip = new class ($middleware, $next) implements RequestHandlerInterface {
-            /**
-             * @var callable
-             */
-            private $middleware;
-
-            /**
-             * @var RequestHandlerInterface
-             */
-            private $next;
-
-            public function __construct(callable $middleware, RequestHandlerInterface $next)
-            {
-                $this->middleware = $middleware;
-                $this->next = $next;
-            }
-
-            public function handle(ServerRequestInterface $request): ResponseInterface
-            {
-                return ($this->middleware)($request, $this->next);
-            }
-        };
-
-        return $this;
-    }
-}
diff --git a/vendor/slim/slim/Slim/ResponseEmitter.php b/vendor/slim/slim/Slim/ResponseEmitter.php
deleted file mode 100644
index fac36e9e7c7fb81330d641350a247f779817b41c..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/ResponseEmitter.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim;
-
-use Psr\Http\Message\ResponseInterface;
-
-use function connection_status;
-use function header;
-use function headers_sent;
-use function in_array;
-use function min;
-use function sprintf;
-use function strlen;
-use function strtolower;
-
-use const CONNECTION_NORMAL;
-
-class ResponseEmitter
-{
-    private int $responseChunkSize;
-
-    public function __construct(int $responseChunkSize = 4096)
-    {
-        $this->responseChunkSize = $responseChunkSize;
-    }
-
-    /**
-     * Send the response the client
-     */
-    public function emit(ResponseInterface $response): void
-    {
-        $isEmpty = $this->isResponseEmpty($response);
-        if (headers_sent() === false) {
-            $this->emitHeaders($response);
-
-            // Set the status _after_ the headers, because of PHP's "helpful" behavior with location headers.
-            // See https://github.com/slimphp/Slim/issues/1730
-
-            $this->emitStatusLine($response);
-        }
-
-        if (!$isEmpty) {
-            $this->emitBody($response);
-        }
-    }
-
-    /**
-     * Emit Response Headers
-     */
-    private function emitHeaders(ResponseInterface $response): void
-    {
-        foreach ($response->getHeaders() as $name => $values) {
-            $first = strtolower($name) !== 'set-cookie';
-            foreach ($values as $value) {
-                $header = sprintf('%s: %s', $name, $value);
-                header($header, $first);
-                $first = false;
-            }
-        }
-    }
-
-    /**
-     * Emit Status Line
-     */
-    private function emitStatusLine(ResponseInterface $response): void
-    {
-        $statusLine = sprintf(
-            'HTTP/%s %s %s',
-            $response->getProtocolVersion(),
-            $response->getStatusCode(),
-            $response->getReasonPhrase()
-        );
-        header($statusLine, true, $response->getStatusCode());
-    }
-
-    /**
-     * Emit Body
-     */
-    private function emitBody(ResponseInterface $response): void
-    {
-        $body = $response->getBody();
-        if ($body->isSeekable()) {
-            $body->rewind();
-        }
-
-        $amountToRead = (int) $response->getHeaderLine('Content-Length');
-        if (!$amountToRead) {
-            $amountToRead = $body->getSize();
-        }
-
-        if ($amountToRead) {
-            while ($amountToRead > 0 && !$body->eof()) {
-                $length = min($this->responseChunkSize, $amountToRead);
-                $data = $body->read($length);
-                echo $data;
-
-                $amountToRead -= strlen($data);
-
-                if (connection_status() !== CONNECTION_NORMAL) {
-                    break;
-                }
-            }
-        } else {
-            while (!$body->eof()) {
-                echo $body->read($this->responseChunkSize);
-                if (connection_status() !== CONNECTION_NORMAL) {
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Asserts response body is empty or status code is 204, 205 or 304
-     */
-    public function isResponseEmpty(ResponseInterface $response): bool
-    {
-        if (in_array($response->getStatusCode(), [204, 205, 304], true)) {
-            return true;
-        }
-        $stream = $response->getBody();
-        $seekable = $stream->isSeekable();
-        if ($seekable) {
-            $stream->rewind();
-        }
-        return $seekable ? $stream->read(1) === '' : $stream->eof();
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/Dispatcher.php b/vendor/slim/slim/Slim/Routing/Dispatcher.php
deleted file mode 100644
index e33eac396441ba5650e605c7fee178597c996fe3..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/Dispatcher.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use FastRoute\DataGenerator\GroupCountBased;
-use FastRoute\RouteCollector as FastRouteCollector;
-use FastRoute\RouteParser\Std;
-use Slim\Interfaces\DispatcherInterface;
-use Slim\Interfaces\RouteCollectorInterface;
-
-class Dispatcher implements DispatcherInterface
-{
-    private RouteCollectorInterface $routeCollector;
-
-    private ?FastRouteDispatcher $dispatcher = null;
-
-    public function __construct(RouteCollectorInterface $routeCollector)
-    {
-        $this->routeCollector = $routeCollector;
-    }
-
-    protected function createDispatcher(): FastRouteDispatcher
-    {
-        if ($this->dispatcher) {
-            return $this->dispatcher;
-        }
-
-        $routeDefinitionCallback = function (FastRouteCollector $r): void {
-            $basePath = $this->routeCollector->getBasePath();
-
-            foreach ($this->routeCollector->getRoutes() as $route) {
-                $r->addRoute($route->getMethods(), $basePath . $route->getPattern(), $route->getIdentifier());
-            }
-        };
-
-        $cacheFile = $this->routeCollector->getCacheFile();
-        if ($cacheFile) {
-            /** @var FastRouteDispatcher $dispatcher */
-            $dispatcher = \FastRoute\cachedDispatcher($routeDefinitionCallback, [
-                'dataGenerator' => GroupCountBased::class,
-                'dispatcher' => FastRouteDispatcher::class,
-                'routeParser' => new Std(),
-                'cacheFile' => $cacheFile,
-            ]);
-        } else {
-            /** @var FastRouteDispatcher $dispatcher */
-            $dispatcher = \FastRoute\simpleDispatcher($routeDefinitionCallback, [
-                'dataGenerator' => GroupCountBased::class,
-                'dispatcher' => FastRouteDispatcher::class,
-                'routeParser' => new Std(),
-            ]);
-        }
-
-        $this->dispatcher = $dispatcher;
-        return $this->dispatcher;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function dispatch(string $method, string $uri): RoutingResults
-    {
-        $dispatcher = $this->createDispatcher();
-        $results = $dispatcher->dispatch($method, $uri);
-        return new RoutingResults($this, $method, $uri, $results[0], $results[1], $results[2]);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getAllowedMethods(string $uri): array
-    {
-        $dispatcher = $this->createDispatcher();
-        return $dispatcher->getAllowedMethods($uri);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php b/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php
deleted file mode 100644
index 1f567b54a26cfcf17f74bf3434226e67beb0b432..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use FastRoute\Dispatcher\GroupCountBased;
-
-class FastRouteDispatcher extends GroupCountBased
-{
-    /**
-     * @var string[][]
-     */
-    private array $allowedMethods = [];
-
-    /**
-     * @param string $httpMethod
-     * @param string $uri
-     *
-     * @return array{int, string|null, array<string, string>}
-     */
-    public function dispatch($httpMethod, $uri): array
-    {
-        $routingResults = $this->routingResults($httpMethod, $uri);
-        if ($routingResults[0] === self::FOUND) {
-            return $routingResults;
-        }
-
-        // For HEAD requests, attempt fallback to GET
-        if ($httpMethod === 'HEAD') {
-            $routingResults = $this->routingResults('GET', $uri);
-            if ($routingResults[0] === self::FOUND) {
-                return $routingResults;
-            }
-        }
-
-        // If nothing else matches, try fallback routes
-        $routingResults = $this->routingResults('*', $uri);
-        if ($routingResults[0] === self::FOUND) {
-            return $routingResults;
-        }
-
-        if (!empty($this->getAllowedMethods($uri))) {
-            return [self::METHOD_NOT_ALLOWED, null, []];
-        }
-
-        return [self::NOT_FOUND, null, []];
-    }
-
-    /**
-     * @param string $httpMethod
-     * @param string $uri
-     *
-     * @return array{int, string|null, array<string, string>}
-     */
-    private function routingResults(string $httpMethod, string $uri): array
-    {
-        if (isset($this->staticRouteMap[$httpMethod][$uri])) {
-            /** @var string $routeIdentifier */
-            $routeIdentifier = $this->staticRouteMap[$httpMethod][$uri];
-            return [self::FOUND, $routeIdentifier, []];
-        }
-
-        if (isset($this->variableRouteData[$httpMethod])) {
-            /** @var array{0: int, 1?: string, 2?: array<string, string>} $result */
-            $result = $this->dispatchVariableRoute($this->variableRouteData[$httpMethod], $uri);
-            if ($result[0] === self::FOUND) {
-                /** @var array{int, string, array<string, string>} $result */
-                return [self::FOUND, $result[1], $result[2]];
-            }
-        }
-
-        return [self::NOT_FOUND, null, []];
-    }
-
-    /**
-     * @param string $uri
-     *
-     * @return string[]
-     */
-    public function getAllowedMethods(string $uri): array
-    {
-        if (isset($this->allowedMethods[$uri])) {
-            return $this->allowedMethods[$uri];
-        }
-
-        $this->allowedMethods[$uri] = [];
-        foreach ($this->staticRouteMap as $method => $uriMap) {
-            if (isset($uriMap[$uri])) {
-                $this->allowedMethods[$uri][] = $method;
-            }
-        }
-
-        foreach ($this->variableRouteData as $method => $routeData) {
-            $result = $this->dispatchVariableRoute($routeData, $uri);
-            if ($result[0] === self::FOUND) {
-                $this->allowedMethods[$uri][] = $method;
-            }
-        }
-
-        return $this->allowedMethods[$uri];
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/Route.php b/vendor/slim/slim/Slim/Routing/Route.php
deleted file mode 100644
index c4984235b6c1dd771f4bed6559f062651ac1d65d..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/Route.php
+++ /dev/null
@@ -1,360 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use Psr\Container\ContainerInterface;
-use Psr\Http\Message\ResponseFactoryInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use Slim\Handlers\Strategies\RequestHandler;
-use Slim\Handlers\Strategies\RequestResponse;
-use Slim\Interfaces\AdvancedCallableResolverInterface;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\InvocationStrategyInterface;
-use Slim\Interfaces\RequestHandlerInvocationStrategyInterface;
-use Slim\Interfaces\RouteGroupInterface;
-use Slim\Interfaces\RouteInterface;
-use Slim\MiddlewareDispatcher;
-
-use function array_key_exists;
-use function array_replace;
-use function array_reverse;
-use function class_implements;
-use function in_array;
-use function is_array;
-
-class Route implements RouteInterface, RequestHandlerInterface
-{
-    /**
-     * HTTP methods supported by this route
-     *
-     * @var string[]
-     */
-    protected array $methods = [];
-
-    /**
-     * Route identifier
-     */
-    protected string $identifier;
-
-    /**
-     * Route name
-     */
-    protected ?string $name = null;
-
-    /**
-     * Parent route groups
-     *
-     * @var RouteGroupInterface[]
-     */
-    protected array $groups;
-
-    protected InvocationStrategyInterface $invocationStrategy;
-
-    /**
-     * Route parameters
-     *
-     * @var array<string, string>
-     */
-    protected array $arguments = [];
-
-    /**
-     * Route arguments parameters
-     *
-     * @var string[]
-     */
-    protected array $savedArguments = [];
-
-    /**
-     * Container
-     */
-    protected ?ContainerInterface $container = null;
-
-    protected MiddlewareDispatcher $middlewareDispatcher;
-
-    /**
-     * Route callable
-     *
-     * @var callable|string
-     */
-    protected $callable;
-
-    protected CallableResolverInterface $callableResolver;
-
-    protected ResponseFactoryInterface $responseFactory;
-
-    /**
-     * Route pattern
-     */
-    protected string $pattern;
-
-    protected bool $groupMiddlewareAppended = false;
-
-    /**
-     * @param string[]                         $methods    The route HTTP methods
-     * @param string                           $pattern    The route pattern
-     * @param callable|string                  $callable   The route callable
-     * @param ResponseFactoryInterface         $responseFactory
-     * @param CallableResolverInterface        $callableResolver
-     * @param ContainerInterface|null          $container
-     * @param InvocationStrategyInterface|null $invocationStrategy
-     * @param RouteGroup[]                     $groups     The parent route groups
-     * @param int                              $identifier The route identifier
-     */
-    public function __construct(
-        array $methods,
-        string $pattern,
-        $callable,
-        ResponseFactoryInterface $responseFactory,
-        CallableResolverInterface $callableResolver,
-        ?ContainerInterface $container = null,
-        ?InvocationStrategyInterface $invocationStrategy = null,
-        array $groups = [],
-        int $identifier = 0
-    ) {
-        $this->methods = $methods;
-        $this->pattern = $pattern;
-        $this->callable = $callable;
-        $this->responseFactory = $responseFactory;
-        $this->callableResolver = $callableResolver;
-        $this->container = $container;
-        $this->invocationStrategy = $invocationStrategy ?? new RequestResponse();
-        $this->groups = $groups;
-        $this->identifier = 'route' . $identifier;
-        $this->middlewareDispatcher = new MiddlewareDispatcher($this, $callableResolver, $container);
-    }
-
-    public function getCallableResolver(): CallableResolverInterface
-    {
-        return $this->callableResolver;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getInvocationStrategy(): InvocationStrategyInterface
-    {
-        return $this->invocationStrategy;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setInvocationStrategy(InvocationStrategyInterface $invocationStrategy): RouteInterface
-    {
-        $this->invocationStrategy = $invocationStrategy;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getMethods(): array
-    {
-        return $this->methods;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getPattern(): string
-    {
-        return $this->pattern;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setPattern(string $pattern): RouteInterface
-    {
-        $this->pattern = $pattern;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getCallable()
-    {
-        return $this->callable;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setCallable($callable): RouteInterface
-    {
-        $this->callable = $callable;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getName(): ?string
-    {
-        return $this->name;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setName(string $name): RouteInterface
-    {
-        $this->name = $name;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getIdentifier(): string
-    {
-        return $this->identifier;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getArgument(string $name, ?string $default = null): ?string
-    {
-        if (array_key_exists($name, $this->arguments)) {
-            return $this->arguments[$name];
-        }
-        return $default;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getArguments(): array
-    {
-        return $this->arguments;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setArguments(array $arguments, bool $includeInSavedArguments = true): RouteInterface
-    {
-        if ($includeInSavedArguments) {
-            $this->savedArguments = $arguments;
-        }
-
-        $this->arguments = $arguments;
-        return $this;
-    }
-
-    /**
-     * @return RouteGroupInterface[]
-     */
-    public function getGroups(): array
-    {
-        return $this->groups;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function add($middleware): RouteInterface
-    {
-        $this->middlewareDispatcher->add($middleware);
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function addMiddleware(MiddlewareInterface $middleware): RouteInterface
-    {
-        $this->middlewareDispatcher->addMiddleware($middleware);
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function prepare(array $arguments): RouteInterface
-    {
-        $this->arguments = array_replace($this->savedArguments, $arguments);
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setArgument(string $name, string $value, bool $includeInSavedArguments = true): RouteInterface
-    {
-        if ($includeInSavedArguments) {
-            $this->savedArguments[$name] = $value;
-        }
-
-        $this->arguments[$name] = $value;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function run(ServerRequestInterface $request): ResponseInterface
-    {
-        if (!$this->groupMiddlewareAppended) {
-            $this->appendGroupMiddlewareToRoute();
-        }
-
-        return $this->middlewareDispatcher->handle($request);
-    }
-
-    /**
-     * @return void
-     */
-    protected function appendGroupMiddlewareToRoute(): void
-    {
-        $inner = $this->middlewareDispatcher;
-        $this->middlewareDispatcher = new MiddlewareDispatcher($inner, $this->callableResolver, $this->container);
-
-        /** @var RouteGroupInterface $group */
-        foreach (array_reverse($this->groups) as $group) {
-            $group->appendMiddlewareToDispatcher($this->middlewareDispatcher);
-        }
-
-        $this->groupMiddlewareAppended = true;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function handle(ServerRequestInterface $request): ResponseInterface
-    {
-        if ($this->callableResolver instanceof AdvancedCallableResolverInterface) {
-            $callable = $this->callableResolver->resolveRoute($this->callable);
-        } else {
-            $callable = $this->callableResolver->resolve($this->callable);
-        }
-        $strategy = $this->invocationStrategy;
-
-        /** @var string[] $strategyImplements */
-        $strategyImplements = class_implements($strategy);
-
-        if (
-            is_array($callable)
-            && $callable[0] instanceof RequestHandlerInterface
-            && !in_array(RequestHandlerInvocationStrategyInterface::class, $strategyImplements)
-        ) {
-            $strategy = new RequestHandler();
-        }
-
-        $response = $this->responseFactory->createResponse();
-        return $strategy($callable, $request, $response, $this->arguments);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RouteCollector.php b/vendor/slim/slim/Slim/Routing/RouteCollector.php
deleted file mode 100644
index 4a74285161e3ce0647f6f4def078ff78978b72c3..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RouteCollector.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use Psr\Container\ContainerInterface;
-use Psr\Http\Message\ResponseFactoryInterface;
-use RuntimeException;
-use Slim\Handlers\Strategies\RequestResponse;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\InvocationStrategyInterface;
-use Slim\Interfaces\RouteCollectorInterface;
-use Slim\Interfaces\RouteGroupInterface;
-use Slim\Interfaces\RouteInterface;
-use Slim\Interfaces\RouteParserInterface;
-
-use function array_pop;
-use function dirname;
-use function file_exists;
-use function sprintf;
-use function is_readable;
-use function is_writable;
-
-/**
- * RouteCollector is used to collect routes and route groups
- * as well as generate paths and URLs relative to its environment
- */
-class RouteCollector implements RouteCollectorInterface
-{
-    protected RouteParserInterface $routeParser;
-
-    protected CallableResolverInterface $callableResolver;
-
-    protected ?ContainerInterface $container = null;
-
-    protected InvocationStrategyInterface $defaultInvocationStrategy;
-
-    /**
-     * Base path used in pathFor()
-     */
-    protected string $basePath = '';
-
-    /**
-     * Path to fast route cache file. Set to null to disable route caching
-     */
-    protected ?string $cacheFile = null;
-
-    /**
-     * Routes
-     *
-     * @var RouteInterface[]
-     */
-    protected array $routes = [];
-
-    /**
-     * Routes indexed by name
-     *
-     * @var RouteInterface[]
-     */
-    protected array $routesByName = [];
-
-    /**
-     * Route groups
-     *
-     * @var RouteGroup[]
-     */
-    protected array $routeGroups = [];
-
-    /**
-     * Route counter incrementer
-     */
-    protected int $routeCounter = 0;
-
-    protected ResponseFactoryInterface $responseFactory;
-
-    public function __construct(
-        ResponseFactoryInterface $responseFactory,
-        CallableResolverInterface $callableResolver,
-        ?ContainerInterface $container = null,
-        ?InvocationStrategyInterface $defaultInvocationStrategy = null,
-        ?RouteParserInterface $routeParser = null,
-        ?string $cacheFile = null
-    ) {
-        $this->responseFactory = $responseFactory;
-        $this->callableResolver = $callableResolver;
-        $this->container = $container;
-        $this->defaultInvocationStrategy = $defaultInvocationStrategy ?? new RequestResponse();
-        $this->routeParser = $routeParser ?? new RouteParser($this);
-
-        if ($cacheFile) {
-            $this->setCacheFile($cacheFile);
-        }
-    }
-
-    public function getRouteParser(): RouteParserInterface
-    {
-        return $this->routeParser;
-    }
-
-    /**
-     * Get default route invocation strategy
-     */
-    public function getDefaultInvocationStrategy(): InvocationStrategyInterface
-    {
-        return $this->defaultInvocationStrategy;
-    }
-
-    public function setDefaultInvocationStrategy(InvocationStrategyInterface $strategy): RouteCollectorInterface
-    {
-        $this->defaultInvocationStrategy = $strategy;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getCacheFile(): ?string
-    {
-        return $this->cacheFile;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setCacheFile(string $cacheFile): RouteCollectorInterface
-    {
-        if (file_exists($cacheFile) && !is_readable($cacheFile)) {
-            throw new RuntimeException(
-                sprintf('Route collector cache file `%s` is not readable', $cacheFile)
-            );
-        }
-
-        if (!file_exists($cacheFile) && !is_writable(dirname($cacheFile))) {
-            throw new RuntimeException(
-                sprintf('Route collector cache file directory `%s` is not writable', dirname($cacheFile))
-            );
-        }
-
-        $this->cacheFile = $cacheFile;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getBasePath(): string
-    {
-        return $this->basePath;
-    }
-
-    /**
-     * Set the base path used in urlFor()
-     */
-    public function setBasePath(string $basePath): RouteCollectorInterface
-    {
-        $this->basePath = $basePath;
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getRoutes(): array
-    {
-        return $this->routes;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function removeNamedRoute(string $name): RouteCollectorInterface
-    {
-        $route = $this->getNamedRoute($name);
-
-        unset($this->routesByName[$route->getName()], $this->routes[$route->getIdentifier()]);
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getNamedRoute(string $name): RouteInterface
-    {
-        if (isset($this->routesByName[$name])) {
-            $route = $this->routesByName[$name];
-            if ($route->getName() === $name) {
-                return $route;
-            }
-
-            unset($this->routesByName[$name]);
-        }
-
-        foreach ($this->routes as $route) {
-            if ($name === $route->getName()) {
-                $this->routesByName[$name] = $route;
-                return $route;
-            }
-        }
-
-        throw new RuntimeException('Named route does not exist for name: ' . $name);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function lookupRoute(string $identifier): RouteInterface
-    {
-        if (!isset($this->routes[$identifier])) {
-            throw new RuntimeException('Route not found, looks like your route cache is stale.');
-        }
-        return $this->routes[$identifier];
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function group(string $pattern, $callable): RouteGroupInterface
-    {
-        $routeCollectorProxy = new RouteCollectorProxy(
-            $this->responseFactory,
-            $this->callableResolver,
-            $this->container,
-            $this,
-            $pattern
-        );
-
-        $routeGroup = new RouteGroup($pattern, $callable, $this->callableResolver, $routeCollectorProxy);
-        $this->routeGroups[] = $routeGroup;
-
-        $routeGroup->collectRoutes();
-        array_pop($this->routeGroups);
-
-        return $routeGroup;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function map(array $methods, string $pattern, $handler): RouteInterface
-    {
-        $route = $this->createRoute($methods, $pattern, $handler);
-        $this->routes[$route->getIdentifier()] = $route;
-
-        $routeName = $route->getName();
-        if ($routeName !== null && !isset($this->routesByName[$routeName])) {
-            $this->routesByName[$routeName] = $route;
-        }
-
-        $this->routeCounter++;
-
-        return $route;
-    }
-
-    /**
-     * @param string[]        $methods
-     * @param callable|string $callable
-     */
-    protected function createRoute(array $methods, string $pattern, $callable): RouteInterface
-    {
-        return new Route(
-            $methods,
-            $pattern,
-            $callable,
-            $this->responseFactory,
-            $this->callableResolver,
-            $this->container,
-            $this->defaultInvocationStrategy,
-            $this->routeGroups,
-            $this->routeCounter
-        );
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php b/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php
deleted file mode 100644
index f8bc232bc46e4bd5ee89d06fcffe848959c6d26f..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use Psr\Container\ContainerInterface;
-use Psr\Http\Message\ResponseFactoryInterface;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\RouteCollectorInterface;
-use Slim\Interfaces\RouteCollectorProxyInterface;
-use Slim\Interfaces\RouteGroupInterface;
-use Slim\Interfaces\RouteInterface;
-
-class RouteCollectorProxy implements RouteCollectorProxyInterface
-{
-    protected ResponseFactoryInterface $responseFactory;
-
-    protected CallableResolverInterface $callableResolver;
-
-    protected ?ContainerInterface $container = null;
-
-    protected RouteCollectorInterface $routeCollector;
-
-    protected string $groupPattern;
-
-    public function __construct(
-        ResponseFactoryInterface $responseFactory,
-        CallableResolverInterface $callableResolver,
-        ?ContainerInterface $container = null,
-        ?RouteCollectorInterface $routeCollector = null,
-        string $groupPattern = ''
-    ) {
-        $this->responseFactory = $responseFactory;
-        $this->callableResolver = $callableResolver;
-        $this->container = $container;
-        $this->routeCollector = $routeCollector ?? new RouteCollector($responseFactory, $callableResolver, $container);
-        $this->groupPattern = $groupPattern;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getResponseFactory(): ResponseFactoryInterface
-    {
-        return $this->responseFactory;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getCallableResolver(): CallableResolverInterface
-    {
-        return $this->callableResolver;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getContainer(): ?ContainerInterface
-    {
-        return $this->container;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getRouteCollector(): RouteCollectorInterface
-    {
-        return $this->routeCollector;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getBasePath(): string
-    {
-        return $this->routeCollector->getBasePath();
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function setBasePath(string $basePath): RouteCollectorProxyInterface
-    {
-        $this->routeCollector->setBasePath($basePath);
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function get(string $pattern, $callable): RouteInterface
-    {
-        return $this->map(['GET'], $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function post(string $pattern, $callable): RouteInterface
-    {
-        return $this->map(['POST'], $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function put(string $pattern, $callable): RouteInterface
-    {
-        return $this->map(['PUT'], $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function patch(string $pattern, $callable): RouteInterface
-    {
-        return $this->map(['PATCH'], $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function delete(string $pattern, $callable): RouteInterface
-    {
-        return $this->map(['DELETE'], $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function options(string $pattern, $callable): RouteInterface
-    {
-        return $this->map(['OPTIONS'], $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function any(string $pattern, $callable): RouteInterface
-    {
-        return $this->map(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function map(array $methods, string $pattern, $callable): RouteInterface
-    {
-        $pattern = $this->groupPattern . $pattern;
-
-        return $this->routeCollector->map($methods, $pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function group(string $pattern, $callable): RouteGroupInterface
-    {
-        $pattern = $this->groupPattern . $pattern;
-
-        return $this->routeCollector->group($pattern, $callable);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function redirect(string $from, $to, int $status = 302): RouteInterface
-    {
-        $responseFactory = $this->responseFactory;
-
-        $handler = function () use ($to, $status, $responseFactory) {
-            $response = $responseFactory->createResponse($status);
-            return $response->withHeader('Location', (string) $to);
-        };
-
-        return $this->get($from, $handler);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RouteContext.php b/vendor/slim/slim/Slim/Routing/RouteContext.php
deleted file mode 100644
index 3ba5e23a615f7616b778f2442b71d6d5060f5e66..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RouteContext.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use Psr\Http\Message\ServerRequestInterface;
-use RuntimeException;
-use Slim\Interfaces\RouteInterface;
-use Slim\Interfaces\RouteParserInterface;
-
-final class RouteContext
-{
-    public const ROUTE = '__route__';
-
-    public const ROUTE_PARSER = '__routeParser__';
-
-    public const ROUTING_RESULTS = '__routingResults__';
-
-    public const BASE_PATH = '__basePath__';
-
-    public static function fromRequest(ServerRequestInterface $serverRequest): self
-    {
-        $route = $serverRequest->getAttribute(self::ROUTE);
-        $routeParser = $serverRequest->getAttribute(self::ROUTE_PARSER);
-        $routingResults = $serverRequest->getAttribute(self::ROUTING_RESULTS);
-        $basePath = $serverRequest->getAttribute(self::BASE_PATH);
-
-        if ($routeParser === null || $routingResults === null) {
-            throw new RuntimeException('Cannot create RouteContext before routing has been completed');
-        }
-
-        /** @var RouteInterface|null $route */
-        /** @var RouteParserInterface $routeParser */
-        /** @var RoutingResults $routingResults */
-        /** @var string|null $basePath */
-        return new self($route, $routeParser, $routingResults, $basePath);
-    }
-
-    private ?RouteInterface $route;
-
-    private RouteParserInterface $routeParser;
-
-    private RoutingResults $routingResults;
-
-    private ?string $basePath;
-
-    private function __construct(
-        ?RouteInterface $route,
-        RouteParserInterface $routeParser,
-        RoutingResults $routingResults,
-        ?string $basePath = null
-    ) {
-        $this->route = $route;
-        $this->routeParser = $routeParser;
-        $this->routingResults = $routingResults;
-        $this->basePath = $basePath;
-    }
-
-    public function getRoute(): ?RouteInterface
-    {
-        return $this->route;
-    }
-
-    public function getRouteParser(): RouteParserInterface
-    {
-        return $this->routeParser;
-    }
-
-    public function getRoutingResults(): RoutingResults
-    {
-        return $this->routingResults;
-    }
-
-    public function getBasePath(): string
-    {
-        if ($this->basePath === null) {
-            throw new RuntimeException('No base path defined.');
-        }
-        return $this->basePath;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RouteGroup.php b/vendor/slim/slim/Slim/Routing/RouteGroup.php
deleted file mode 100644
index cd2f4e79a3f595130ed8e08658a67e5dadf70af4..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RouteGroup.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use Psr\Http\Server\MiddlewareInterface;
-use Slim\Interfaces\AdvancedCallableResolverInterface;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\RouteCollectorProxyInterface;
-use Slim\Interfaces\RouteGroupInterface;
-use Slim\MiddlewareDispatcher;
-
-class RouteGroup implements RouteGroupInterface
-{
-    /**
-     * @var callable|string
-     */
-    protected $callable;
-
-    protected CallableResolverInterface $callableResolver;
-
-    protected RouteCollectorProxyInterface $routeCollectorProxy;
-
-    /**
-     * @var MiddlewareInterface[]|string[]|callable[]
-     */
-    protected array $middleware = [];
-
-    protected string $pattern;
-
-    /**
-     * @param callable|string              $callable
-     */
-    public function __construct(
-        string $pattern,
-        $callable,
-        CallableResolverInterface $callableResolver,
-        RouteCollectorProxyInterface $routeCollectorProxy
-    ) {
-        $this->pattern = $pattern;
-        $this->callable = $callable;
-        $this->callableResolver = $callableResolver;
-        $this->routeCollectorProxy = $routeCollectorProxy;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function collectRoutes(): RouteGroupInterface
-    {
-        if ($this->callableResolver instanceof AdvancedCallableResolverInterface) {
-            $callable = $this->callableResolver->resolveRoute($this->callable);
-        } else {
-            $callable = $this->callableResolver->resolve($this->callable);
-        }
-        $callable($this->routeCollectorProxy);
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function add($middleware): RouteGroupInterface
-    {
-        $this->middleware[] = $middleware;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function addMiddleware(MiddlewareInterface $middleware): RouteGroupInterface
-    {
-        $this->middleware[] = $middleware;
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function appendMiddlewareToDispatcher(MiddlewareDispatcher $dispatcher): RouteGroupInterface
-    {
-        foreach ($this->middleware as $middleware) {
-            $dispatcher->add($middleware);
-        }
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getPattern(): string
-    {
-        return $this->pattern;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RouteParser.php b/vendor/slim/slim/Slim/Routing/RouteParser.php
deleted file mode 100644
index afb533cc5ad79d8b8db201fdea8a9850be1c501b..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RouteParser.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use FastRoute\RouteParser\Std;
-use InvalidArgumentException;
-use Psr\Http\Message\UriInterface;
-use Slim\Interfaces\RouteCollectorInterface;
-use Slim\Interfaces\RouteParserInterface;
-
-use function array_key_exists;
-use function array_reverse;
-use function http_build_query;
-use function implode;
-use function is_string;
-
-class RouteParser implements RouteParserInterface
-{
-    private RouteCollectorInterface $routeCollector;
-
-    private Std $routeParser;
-
-    public function __construct(RouteCollectorInterface $routeCollector)
-    {
-        $this->routeCollector = $routeCollector;
-        $this->routeParser = new Std();
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function relativeUrlFor(string $routeName, array $data = [], array $queryParams = []): string
-    {
-        $route = $this->routeCollector->getNamedRoute($routeName);
-        $pattern = $route->getPattern();
-
-        $segments = [];
-        $segmentName = '';
-
-        /*
-         * $routes is an associative array of expressions representing a route as multiple segments
-         * There is an expression for each optional parameter plus one without the optional parameters
-         * The most specific is last, hence why we reverse the array before iterating over it
-         */
-        $expressions = array_reverse($this->routeParser->parse($pattern));
-        foreach ($expressions as $expression) {
-            foreach ($expression as $segment) {
-                /*
-                 * Each $segment is either a string or an array of strings
-                 * containing optional parameters of an expression
-                 */
-                if (is_string($segment)) {
-                    $segments[] = $segment;
-                    continue;
-                }
-
-                /** @var string[] $segment */
-                /*
-                 * If we don't have a data element for this segment in the provided $data
-                 * we cancel testing to move onto the next expression with a less specific item
-                 */
-                if (!array_key_exists($segment[0], $data)) {
-                    $segments = [];
-                    $segmentName = $segment[0];
-                    break;
-                }
-
-                $segments[] = $data[$segment[0]];
-            }
-
-            /*
-             * If we get to this logic block we have found all the parameters
-             * for the provided $data which means we don't need to continue testing
-             * less specific expressions
-             */
-            if (!empty($segments)) {
-                break;
-            }
-        }
-
-        if (empty($segments)) {
-            throw new InvalidArgumentException('Missing data for URL segment: ' . $segmentName);
-        }
-
-        $url = implode('', $segments);
-        if ($queryParams) {
-            $url .= '?' . http_build_query($queryParams);
-        }
-
-        return $url;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function urlFor(string $routeName, array $data = [], array $queryParams = []): string
-    {
-        $basePath = $this->routeCollector->getBasePath();
-        $url = $this->relativeUrlFor($routeName, $data, $queryParams);
-
-        if ($basePath) {
-            $url = $basePath . $url;
-        }
-
-        return $url;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function fullUrlFor(UriInterface $uri, string $routeName, array $data = [], array $queryParams = []): string
-    {
-        $path = $this->urlFor($routeName, $data, $queryParams);
-        $scheme = $uri->getScheme();
-        $authority = $uri->getAuthority();
-        $protocol = ($scheme ? $scheme . ':' : '') . ($authority ? '//' . $authority : '');
-        return $protocol . $path;
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RouteResolver.php b/vendor/slim/slim/Slim/Routing/RouteResolver.php
deleted file mode 100644
index d4f4eafa326b7fce5456149ce379184adbc1d526..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RouteResolver.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use RuntimeException;
-use Slim\Interfaces\DispatcherInterface;
-use Slim\Interfaces\RouteCollectorInterface;
-use Slim\Interfaces\RouteInterface;
-use Slim\Interfaces\RouteResolverInterface;
-
-use function rawurldecode;
-
-/**
- * RouteResolver instantiates the FastRoute dispatcher
- * and computes the routing results of a given URI and request method
- */
-class RouteResolver implements RouteResolverInterface
-{
-    protected RouteCollectorInterface $routeCollector;
-
-    private DispatcherInterface $dispatcher;
-
-    public function __construct(RouteCollectorInterface $routeCollector, ?DispatcherInterface $dispatcher = null)
-    {
-        $this->routeCollector = $routeCollector;
-        $this->dispatcher = $dispatcher ?? new Dispatcher($routeCollector);
-    }
-
-    /**
-     * @param string $uri Should be $request->getUri()->getPath()
-     */
-    public function computeRoutingResults(string $uri, string $method): RoutingResults
-    {
-        $uri = rawurldecode($uri);
-        if ($uri === '' || $uri[0] !== '/') {
-            $uri = '/' . $uri;
-        }
-        return $this->dispatcher->dispatch($method, $uri);
-    }
-
-    /**
-     * @throws RuntimeException
-     */
-    public function resolveRoute(string $identifier): RouteInterface
-    {
-        return $this->routeCollector->lookupRoute($identifier);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RouteRunner.php b/vendor/slim/slim/Slim/Routing/RouteRunner.php
deleted file mode 100644
index 40946af5607002e5ba50a3d32e662286e7ec77b1..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RouteRunner.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use Slim\Exception\HttpMethodNotAllowedException;
-use Slim\Exception\HttpNotFoundException;
-use Slim\Interfaces\RouteCollectorProxyInterface;
-use Slim\Interfaces\RouteParserInterface;
-use Slim\Interfaces\RouteResolverInterface;
-use Slim\Middleware\RoutingMiddleware;
-
-class RouteRunner implements RequestHandlerInterface
-{
-    private RouteResolverInterface $routeResolver;
-
-    private RouteParserInterface $routeParser;
-
-    private ?RouteCollectorProxyInterface $routeCollectorProxy;
-
-    public function __construct(
-        RouteResolverInterface $routeResolver,
-        RouteParserInterface $routeParser,
-        ?RouteCollectorProxyInterface $routeCollectorProxy = null
-    ) {
-        $this->routeResolver = $routeResolver;
-        $this->routeParser = $routeParser;
-        $this->routeCollectorProxy = $routeCollectorProxy;
-    }
-
-    /**
-     * This request handler is instantiated automatically in App::__construct()
-     * It is at the very tip of the middleware queue meaning it will be executed
-     * last and it detects whether or not routing has been performed in the user
-     * defined middleware stack. In the event that the user did not perform routing
-     * it is done here
-     *
-     * @throws HttpNotFoundException
-     * @throws HttpMethodNotAllowedException
-     */
-    public function handle(ServerRequestInterface $request): ResponseInterface
-    {
-        // If routing hasn't been done, then do it now so we can dispatch
-        if ($request->getAttribute(RouteContext::ROUTING_RESULTS) === null) {
-            $routingMiddleware = new RoutingMiddleware($this->routeResolver, $this->routeParser);
-            $request = $routingMiddleware->performRouting($request);
-        }
-
-        if ($this->routeCollectorProxy !== null) {
-            $request = $request->withAttribute(
-                RouteContext::BASE_PATH,
-                $this->routeCollectorProxy->getBasePath()
-            );
-        }
-
-        /** @var Route $route */
-        $route = $request->getAttribute(RouteContext::ROUTE);
-        return $route->run($request);
-    }
-}
diff --git a/vendor/slim/slim/Slim/Routing/RoutingResults.php b/vendor/slim/slim/Slim/Routing/RoutingResults.php
deleted file mode 100644
index ac2fa64f93f5b387bdaf4637c181c561477d8d95..0000000000000000000000000000000000000000
--- a/vendor/slim/slim/Slim/Routing/RoutingResults.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @license https://github.com/slimphp/Slim/blob/4.x/LICENSE.md (MIT License)
- */
-
-declare(strict_types=1);
-
-namespace Slim\Routing;
-
-use Slim\Interfaces\DispatcherInterface;
-
-use function rawurldecode;
-
-class RoutingResults
-{
-    public const NOT_FOUND = 0;
-    public const FOUND = 1;
-    public const METHOD_NOT_ALLOWED = 2;
-
-    protected DispatcherInterface $dispatcher;
-
-    protected string $method;
-
-    protected string $uri;
-
-    /**
-     * The status is one of the constants shown above
-     * NOT_FOUND = 0
-     * FOUND = 1
-     * METHOD_NOT_ALLOWED = 2
-     */
-    protected int $routeStatus;
-
-    protected ?string $routeIdentifier = null;
-
-    /**
-     * @var array<string, string>
-     */
-    protected array $routeArguments;
-
-    /**
-     * @param array<string, string> $routeArguments
-     */
-    public function __construct(
-        DispatcherInterface $dispatcher,
-        string $method,
-        string $uri,
-        int $routeStatus,
-        ?string $routeIdentifier = null,
-        array $routeArguments = []
-    ) {
-        $this->dispatcher = $dispatcher;
-        $this->method = $method;
-        $this->uri = $uri;
-        $this->routeStatus = $routeStatus;
-        $this->routeIdentifier = $routeIdentifier;
-        $this->routeArguments = $routeArguments;
-    }
-
-    public function getDispatcher(): DispatcherInterface
-    {
-        return $this->dispatcher;
-    }
-
-    public function getMethod(): string
-    {
-        return $this->method;
-    }
-
-    public function getUri(): string
-    {
-        return $this->uri;
-    }
-
-    public function getRouteStatus(): int
-    {
-        return $this->routeStatus;
-    }
-
-    public function getRouteIdentifier(): ?string
-    {
-        return $this->routeIdentifier;
-    }
-
-    /**
-     * @return array<string, string>
-     */
-    public function getRouteArguments(bool $urlDecode = true): array
-    {
-        if (!$urlDecode) {
-            return $this->routeArguments;
-        }
-
-        $routeArguments = [];
-        foreach ($this->routeArguments as $key => $value) {
-            $routeArguments[$key] = rawurldecode($value);
-        }
-
-        return $routeArguments;
-    }
-
-    /**
-     * @return string[]
-     */
-    public function getAllowedMethods(): array
-    {
-        return $this->dispatcher->getAllowedMethods($this->uri);
-    }
-}
diff --git a/vendor/tecnickcom/tcpdf/examples/example_066.php b/vendor/tecnickcom/tcpdf/examples/example_066.php
deleted file mode 100644
index c7304c7a29788c39496474aa1a4f568659dc44bb..0000000000000000000000000000000000000000
--- a/vendor/tecnickcom/tcpdf/examples/example_066.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-
-/**
- * Example 066 for TCPDF library
- *
- * @description Creates an example PDF/A-1b document using TCPDF
- * @author Nicola Asuni - Tecnick.com LTD <info@tecnick.com>
- * @license LGPL-3.0
- */
-
-/**
- * Creates an example PDF/A-1b document using TCPDF
- *
- * @abstract TCPDF - Example: PDF/A-1b mode
- * @author Nicola Asuni
- * @since 2021-03-26
- * @group A-1b
- * @group pdf
- */
-
-// Load the autoloader, move one folder back from examples
-require_once __DIR__ . '/../vendor/autoload.php';
-
-// create new PDF document
-$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false, true);
-
-// set document information
-$pdf->setCreator(PDF_CREATOR);
-$pdf->setAuthor('Nicola Asuni');
-$pdf->setTitle('TCPDF Example 066');
-$pdf->setSubject('TCPDF Tutorial');
-$pdf->setKeywords('TCPDF, PDF, example, test, guide');
-
-// set default header data
-$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE . ' 066', PDF_HEADER_STRING);
-
-// set header and footer fonts
-$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
-$pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
-
-// set default monospaced font
-$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED);
-
-// set margins
-$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
-$pdf->setHeaderMargin(PDF_MARGIN_HEADER);
-$pdf->setFooterMargin(PDF_MARGIN_FOOTER);
-
-// set auto page breaks
-$pdf->setAutoPageBreak(true, PDF_MARGIN_BOTTOM);
-
-// set image scale factor
-$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
-
-// set some language-dependent strings (optional)
-if (@file_exists(__DIR__ . '/lang/eng.php')) {
-    require_once __DIR__ . '/lang/eng.php';
-
-    $pdf->setLanguageArray($l);
-}
-
-// ---------------------------------------------------------
-
-// set default font subsetting mode
-$pdf->setFontSubsetting(true);
-
-// Set font
-$pdf->setFont('helvetica', '', 14, '', true);
-
-// Add a page
-// This method has several options, check the source code documentation for more information.
-$pdf->AddPage();
-
-// Set some content to print
-$html = <<<HTML
-<h1>Example of <a href="http://www.tcpdf.org" style="text-decoration:none;background-color:#CC0000;color:black;">&nbsp;<span style="color:black;">TC</span><span style="color:white;">PDF</span>&nbsp;</a> document in <span style="background-color:#99ccff;color:black;"> PDF/A-1b </span> mode.</h1>
-<i>This document conforms to the standard <b>PDF/A-1b (ISO 19005-1:2005)</b>.</i>
-<p>Please check the source code documentation and other examples for further information (<a href="http://www.tcpdf.org">http://www.tcpdf.org</a>).</p>
-HTML;
-
-// Print text using writeHTMLCell()
-$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
-
-// ---------------------------------------------------------
-
-// Close and output PDF document
-// This method has several options, check the source code documentation for more information.
-$pdf->Output('example_066.pdf', 'I');
diff --git a/vendor/tecnickcom/tcpdf/examples/example_067.php b/vendor/tecnickcom/tcpdf/examples/example_067.php
deleted file mode 100644
index e0262bfde06b6d5fdbfbf13ac3e6c828ae7ba039..0000000000000000000000000000000000000000
--- a/vendor/tecnickcom/tcpdf/examples/example_067.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-//============================================================+
-// File name   : example_067.php
-// Begin       : 2022-01-07
-// Last Update : 2022-01-07
-//
-// Description : Example 067 for TCPDF class
-//               HTML tables with !important in style
-//
-// Author: Nicola Asuni
-//
-// (c) Copyright:
-//               Nicola Asuni
-//               Tecnick.com LTD
-//               www.tecnick.com
-//               info@tecnick.com
-//============================================================+
-
-/**
- * Creates an example PDF TEST document using TCPDF
- * @package com.tecnick.tcpdf
- * @abstract TCPDF - Example: HTML tables and table headers
- * @author Nicola Asuni
- * @since 2009-03-20
- * @group html
- * @group table
- * @group pdf
- */
-
-// Include the main TCPDF library (search for installation path).
-require_once('tcpdf_include.php');
-
-// create new PDF document
-$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
-
-// set document information
-$pdf->setCreator(PDF_CREATOR);
-$pdf->setAuthor('Owen Leibman');
-$pdf->setTitle('TCPDF Example 067');
-$pdf->setSubject('TCPDF Tutorial');
-$pdf->setKeywords('TCPDF, PDF, example, test, guide');
-
-// set default header data
-$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 067', PDF_HEADER_STRING);
-
-// set header and footer fonts
-$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
-$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
-
-// set default monospaced font
-$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED);
-
-// set margins
-$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
-$pdf->setHeaderMargin(PDF_MARGIN_HEADER);
-$pdf->setFooterMargin(PDF_MARGIN_FOOTER);
-
-// set auto page breaks
-$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
-
-// set image scale factor
-$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
-
-// set some language-dependent strings (optional)
-if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
-	require_once(dirname(__FILE__).'/lang/eng.php');
-	$pdf->setLanguageArray($l);
-}
-
-// ---------------------------------------------------------
-
-// set font
-$pdf->setFont('helvetica', 'B', 20);
-
-// add a page
-$pdf->AddPage();
-
-$pdf->Write(0, 'Example of HTML tables', '', 0, 'L', true, 0, false, false, 0);
-
-$pdf->setFont('helvetica', '', 8);
-
-// -----------------------------------------------------------------------------
-
-$tbl = <<<EOD
-<table cellspacing="0" cellpadding="1" style="border: 1px dotted red;">
-    <tr>
-        <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3</td>
-        <td>COL 2 - ROW 1</td>
-        <td>COL 3 - ROW 1</td>
-    </tr>
-    <tr>
-    	<td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td>
-    	<td>COL 3 - ROW 2</td>
-    </tr>
-    <tr>
-       <td>COL 3 - ROW 3</td>
-    </tr>
-
-</table>
-EOD;
-
-$pdf->writeHTML($tbl, true, false, false, false, '');
-
-// -----------------------------------------------------------------------------
-
-$tbl = <<<EOD
-<table cellspacing="0" cellpadding="1" style="border: 1px dashed blue !important;">
-    <tr>
-        <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3</td>
-        <td>COL 2 - ROW 1</td>
-        <td>COL 3 - ROW 1</td>
-    </tr>
-    <tr>
-    	<td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td>
-    	<td>COL 3 - ROW 2</td>
-    </tr>
-    <tr>
-       <td>COL 3 - ROW 3</td>
-    </tr>
-
-</table>
-EOD;
-
-$pdf->writeHTML($tbl, true, false, false, false, '');
-
-// -----------------------------------------------------------------------------
-
-$tbl = <<<EOD
-<table cellspacing="0" cellpadding="1" style="border: 1px hair black !important;">
-    <tr>
-        <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3</td>
-        <td>COL 2 - ROW 1</td>
-        <td>COL 3 - ROW 1</td>
-    </tr>
-    <tr>
-    	<td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td>
-    	<td>COL 3 - ROW 2</td>
-    </tr>
-    <tr>
-       <td>COL 3 - ROW 3</td>
-    </tr>
-
-</table>
-EOD;
-
-$pdf->writeHTML($tbl, true, false, false, false, '');
-
-// -----------------------------------------------------------------------------
-
-$tbl = <<<EOD
-<table cellspacing="0" cellpadding="1" style="border: dashed green">
-    <tr>
-			<td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3</td>
-			<td>COL 2 - ROW 1</td>
-			<td>COL 3 - ROW 1</td>
-    </tr>
-    <tr>
-			<td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td>
-			<td>COL 3 - ROW 2</td>
-    </tr>
-    <tr>
-       <td>COL 3 - ROW 3</td>
-    </tr>
-
-</table>
-EOD;
-
-$pdf->writeHTML($tbl, true, false, false, false, '');
-
-// -----------------------------------------------------------------------------
-
-$tbl = <<<EOD
-<table cellspacing="0" cellpadding="1" style="border: solid yellow !important">
-    <tr>
-        <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3</td>
-        <td>COL 2 - ROW 1</td>
-        <td>COL 3 - ROW 1</td>
-    </tr>
-    <tr>
-			<td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td>
-			<td>COL 3 - ROW 2</td>
-    </tr>
-    <tr>
-       <td>COL 3 - ROW 3</td>
-    </tr>
-
-</table>
-EOD;
-
-$pdf->writeHTML($tbl, true, false, false, false, '');
-
-// -----------------------------------------------------------------------------
-
-// At medium thickness, which is what you get with only one
-//  setting for style, everything looks the same.
-// Included just for completeness.
-$tbl = <<<EOD
-<table cellspacing="0" cellpadding="1" style="border: dashed">
-    <tr>
-        <td rowspan="3">COL 1 - ROW 1<br />COLSPAN 3</td>
-        <td>COL 2 - ROW 1</td>
-        <td>COL 3 - ROW 1</td>
-    </tr>
-    <tr>
-			<td rowspan="2">COL 2 - ROW 2 - COLSPAN 2<br />text line<br />text line<br />text line<br />text line</td>
-			<td>COL 3 - ROW 2</td>
-    </tr>
-    <tr>
-       <td>COL 3 - ROW 3</td>
-    </tr>
-
-</table>
-EOD;
-
-$pdf->writeHTML($tbl, true, false, false, false, '');
-// -----------------------------------------------------------------------------
-
-//Close and output PDF document
-$pdf->Output('example_067.pdf', 'I');
-
-//============================================================+
-// END OF FILE
-//============================================================+