Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/lookup-server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2022-09-05 16:04:23 +0300
committerGitHub <noreply@github.com>2022-09-05 16:04:23 +0300
commit95aaf59c941018e27a4fed2fef7689ea9b97c508 (patch)
tree4c97ba91526c36892fc7593b688518ac9b010706
parenta00fee543b939d77325d82047675afcf7090b195 (diff)
parent8a63ca346de6edf53b2409b73ae8dad5f10632f2 (diff)
Merge pull request #95 from nextcloud/clean/slim-4-and-composerHEADmaster
Migration to 7.4
-rw-r--r--.gitignore3
-rw-r--r--Makefile42
-rw-r--r--server/composer.json31
-rw-r--r--server/composer.lock1033
-rwxr-xr-xserver/config/version.php3
-rw-r--r--server/index.php130
-rw-r--r--server/init.php58
-rw-r--r--server/lib/BruteForceMiddleware.php3
-rw-r--r--server/lib/Replication.php145
-rw-r--r--server/lib/Service/DependenciesService.php147
-rw-r--r--server/lib/SignatureHandler.php40
-rw-r--r--server/lib/Status.php15
-rw-r--r--server/lib/Tools/Exceptions/ArrayNotFoundException.php43
-rw-r--r--server/lib/Tools/Exceptions/ItemNotFoundException.php43
-rw-r--r--server/lib/Tools/Exceptions/MalformedArrayException.php43
-rw-r--r--server/lib/Tools/Exceptions/UnknownTypeException.php42
-rw-r--r--server/lib/Tools/Traits/TArrayTools.php432
-rw-r--r--server/lib/Tools/Traits/TDebug.php13
-rw-r--r--server/lib/UserManager.php290
-rw-r--r--server/lib/Validator/Email.php101
-rw-r--r--server/lib/Validator/Twitter.php59
-rw-r--r--server/lib/Validator/Website.php20
-rwxr-xr-xserver/replicationcron.php17
-rw-r--r--server/src/dependencies.php47
-rw-r--r--server/vendor/abraham/twitteroauth/.gitignore4
-rw-r--r--server/vendor/abraham/twitteroauth/.travis.yml11
-rw-r--r--server/vendor/abraham/twitteroauth/LICENSE.md22
-rw-r--r--server/vendor/abraham/twitteroauth/README.md10
-rw-r--r--server/vendor/abraham/twitteroauth/autoload.php36
-rw-r--r--server/vendor/abraham/twitteroauth/composer.json34
-rw-r--r--server/vendor/abraham/twitteroauth/phpmd.xml15
-rw-r--r--server/vendor/abraham/twitteroauth/phpunit.xml11
-rw-r--r--server/vendor/abraham/twitteroauth/src/Config.php77
-rw-r--r--server/vendor/abraham/twitteroauth/src/Consumer.php36
-rw-r--r--server/vendor/abraham/twitteroauth/src/HmacSha1.php39
-rw-r--r--server/vendor/abraham/twitteroauth/src/Request.php254
-rw-r--r--server/vendor/abraham/twitteroauth/src/Response.php107
-rw-r--r--server/vendor/abraham/twitteroauth/src/SignatureMethod.php66
-rw-r--r--server/vendor/abraham/twitteroauth/src/Token.php38
-rw-r--r--server/vendor/abraham/twitteroauth/src/TwitterOAuth.php465
-rw-r--r--server/vendor/abraham/twitteroauth/src/TwitterOAuthException.php10
-rw-r--r--server/vendor/abraham/twitteroauth/src/Util.php115
-rw-r--r--server/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php26
-rw-r--r--server/vendor/abraham/twitteroauth/src/cacert.pem4066
-rw-r--r--server/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php51
-rw-r--r--server/vendor/abraham/twitteroauth/tests/ConsumerTest.php16
-rw-r--r--server/vendor/abraham/twitteroauth/tests/HmacSha1Test.php35
-rw-r--r--server/vendor/abraham/twitteroauth/tests/TokenTest.php26
-rw-r--r--server/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php256
-rw-r--r--server/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php50
-rw-r--r--server/vendor/abraham/twitteroauth/tests/bootstrap.php12
-rw-r--r--server/vendor/abraham/twitteroauth/tests/kitten.jpgbin215694 -> 0 bytes
-rw-r--r--server/vendor/abraham/twitteroauth/tests/sample_env13
-rw-r--r--server/vendor/abraham/twitteroauth/tests/video.mp4bin383631 -> 0 bytes
-rw-r--r--server/vendor/autoload.php7
-rw-r--r--server/vendor/composer/ClassLoader.php441
-rw-r--r--server/vendor/composer/LICENSE21
-rw-r--r--server/vendor/composer/autoload_classmap.php180
-rw-r--r--server/vendor/composer/autoload_files.php13
-rw-r--r--server/vendor/composer/autoload_namespaces.php10
-rw-r--r--server/vendor/composer/autoload_psr4.php19
-rw-r--r--server/vendor/composer/autoload_real.php61
-rw-r--r--server/vendor/composer/autoload_static.php287
-rw-r--r--server/vendor/composer/installed.json544
-rw-r--r--server/vendor/container-interop/container-interop/.gitignore3
-rw-r--r--server/vendor/container-interop/container-interop/LICENSE20
-rw-r--r--server/vendor/container-interop/container-interop/README.md148
-rw-r--r--server/vendor/container-interop/container-interop/composer.json15
-rw-r--r--server/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md114
-rw-r--r--server/vendor/container-interop/container-interop/docs/ContainerInterface.md158
-rw-r--r--server/vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md259
-rw-r--r--server/vendor/container-interop/container-interop/docs/Delegate-lookup.md60
-rw-r--r--server/vendor/container-interop/container-interop/docs/images/interoperating_containers.pngbin25738 -> 0 bytes
-rw-r--r--server/vendor/container-interop/container-interop/docs/images/priority.pngbin16252 -> 0 bytes
-rw-r--r--server/vendor/container-interop/container-interop/docs/images/side_by_side_containers.pngbin16265 -> 0 bytes
-rw-r--r--server/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php15
-rw-r--r--server/vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php15
-rw-r--r--server/vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php15
-rw-r--r--server/vendor/guzzlehttp/guzzle/.travis.yml41
-rw-r--r--server/vendor/guzzlehttp/guzzle/CHANGELOG.md1243
-rw-r--r--server/vendor/guzzlehttp/guzzle/LICENSE19
-rw-r--r--server/vendor/guzzlehttp/guzzle/README.md90
-rw-r--r--server/vendor/guzzlehttp/guzzle/UPGRADING.md1203
-rw-r--r--server/vendor/guzzlehttp/guzzle/composer.json41
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Client.php408
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/ClientInterface.php84
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php265
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php84
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php90
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php71
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php404
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php7
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php7
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php37
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php4
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php210
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php27
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php7
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php4
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php4
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php536
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php27
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php45
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php197
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php92
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php176
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php55
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php490
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/HandlerStack.php273
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/MessageFormatter.php182
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Middleware.php254
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/Pool.php123
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php112
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php231
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/RequestOptions.php244
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php112
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/TransferStats.php126
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/UriTemplate.php241
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/functions.php329
-rw-r--r--server/vendor/guzzlehttp/guzzle/src/functions_include.php6
-rw-r--r--server/vendor/guzzlehttp/promises/CHANGELOG.md65
-rw-r--r--server/vendor/guzzlehttp/promises/LICENSE19
-rw-r--r--server/vendor/guzzlehttp/promises/Makefile13
-rw-r--r--server/vendor/guzzlehttp/promises/README.md504
-rw-r--r--server/vendor/guzzlehttp/promises/composer.json34
-rw-r--r--server/vendor/guzzlehttp/promises/src/AggregateException.php16
-rw-r--r--server/vendor/guzzlehttp/promises/src/CancellationException.php9
-rw-r--r--server/vendor/guzzlehttp/promises/src/Coroutine.php151
-rw-r--r--server/vendor/guzzlehttp/promises/src/EachPromise.php229
-rw-r--r--server/vendor/guzzlehttp/promises/src/FulfilledPromise.php82
-rw-r--r--server/vendor/guzzlehttp/promises/src/Promise.php280
-rw-r--r--server/vendor/guzzlehttp/promises/src/PromiseInterface.php93
-rw-r--r--server/vendor/guzzlehttp/promises/src/PromisorInterface.php15
-rw-r--r--server/vendor/guzzlehttp/promises/src/RejectedPromise.php87
-rw-r--r--server/vendor/guzzlehttp/promises/src/RejectionException.php47
-rw-r--r--server/vendor/guzzlehttp/promises/src/TaskQueue.php66
-rw-r--r--server/vendor/guzzlehttp/promises/src/TaskQueueInterface.php25
-rw-r--r--server/vendor/guzzlehttp/promises/src/functions.php457
-rw-r--r--server/vendor/guzzlehttp/promises/src/functions_include.php6
-rw-r--r--server/vendor/guzzlehttp/psr7/CHANGELOG.md110
-rw-r--r--server/vendor/guzzlehttp/psr7/LICENSE19
-rw-r--r--server/vendor/guzzlehttp/psr7/README.md739
-rw-r--r--server/vendor/guzzlehttp/psr7/composer.json39
-rw-r--r--server/vendor/guzzlehttp/psr7/src/AppendStream.php233
-rw-r--r--server/vendor/guzzlehttp/psr7/src/BufferStream.php137
-rw-r--r--server/vendor/guzzlehttp/psr7/src/CachingStream.php138
-rw-r--r--server/vendor/guzzlehttp/psr7/src/DroppingStream.php42
-rw-r--r--server/vendor/guzzlehttp/psr7/src/FnStream.php149
-rw-r--r--server/vendor/guzzlehttp/psr7/src/InflateStream.php52
-rw-r--r--server/vendor/guzzlehttp/psr7/src/LazyOpenStream.php39
-rw-r--r--server/vendor/guzzlehttp/psr7/src/LimitStream.php155
-rw-r--r--server/vendor/guzzlehttp/psr7/src/MessageTrait.php183
-rw-r--r--server/vendor/guzzlehttp/psr7/src/MultipartStream.php153
-rw-r--r--server/vendor/guzzlehttp/psr7/src/NoSeekStream.php22
-rw-r--r--server/vendor/guzzlehttp/psr7/src/PumpStream.php165
-rw-r--r--server/vendor/guzzlehttp/psr7/src/Request.php142
-rw-r--r--server/vendor/guzzlehttp/psr7/src/Response.php132
-rw-r--r--server/vendor/guzzlehttp/psr7/src/ServerRequest.php358
-rw-r--r--server/vendor/guzzlehttp/psr7/src/Stream.php257
-rw-r--r--server/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php149
-rw-r--r--server/vendor/guzzlehttp/psr7/src/StreamWrapper.php121
-rw-r--r--server/vendor/guzzlehttp/psr7/src/UploadedFile.php316
-rw-r--r--server/vendor/guzzlehttp/psr7/src/Uri.php702
-rw-r--r--server/vendor/guzzlehttp/psr7/src/UriNormalizer.php216
-rw-r--r--server/vendor/guzzlehttp/psr7/src/UriResolver.php219
-rw-r--r--server/vendor/guzzlehttp/psr7/src/functions.php828
-rw-r--r--server/vendor/guzzlehttp/psr7/src/functions_include.php6
-rw-r--r--server/vendor/nikic/fast-route/.gitignore5
-rw-r--r--server/vendor/nikic/fast-route/.hhconfig1
-rw-r--r--server/vendor/nikic/fast-route/.travis.yml12
-rw-r--r--server/vendor/nikic/fast-route/FastRoute.hhi126
-rw-r--r--server/vendor/nikic/fast-route/LICENSE31
-rw-r--r--server/vendor/nikic/fast-route/README.md313
-rw-r--r--server/vendor/nikic/fast-route/composer.json21
-rw-r--r--server/vendor/nikic/fast-route/phpunit.xml24
-rw-r--r--server/vendor/nikic/fast-route/src/BadRouteException.php6
-rw-r--r--server/vendor/nikic/fast-route/src/DataGenerator.php25
-rw-r--r--server/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php28
-rw-r--r--server/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php28
-rw-r--r--server/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php25
-rw-r--r--server/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php25
-rw-r--r--server/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php144
-rw-r--r--server/vendor/nikic/fast-route/src/Dispatcher.php25
-rw-r--r--server/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php28
-rw-r--r--server/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php28
-rw-r--r--server/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php30
-rw-r--r--server/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php28
-rw-r--r--server/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php80
-rw-r--r--server/vendor/nikic/fast-route/src/Route.php38
-rw-r--r--server/vendor/nikic/fast-route/src/RouteCollector.php136
-rw-r--r--server/vendor/nikic/fast-route/src/RouteParser.php36
-rw-r--r--server/vendor/nikic/fast-route/src/RouteParser/Std.php81
-rw-r--r--server/vendor/nikic/fast-route/src/bootstrap.php12
-rw-r--r--server/vendor/nikic/fast-route/src/functions.php72
-rw-r--r--server/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php13
-rw-r--r--server/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php561
-rw-r--r--server/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php13
-rw-r--r--server/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php13
-rw-r--r--server/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php20
-rw-r--r--server/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php39
-rw-r--r--server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php29
-rw-r--r--server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php11
-rw-r--r--server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php11
-rw-r--r--server/vendor/nikic/fast-route/test/RouteCollectorTest.php97
-rw-r--r--server/vendor/nikic/fast-route/test/RouteParser/StdTest.php147
-rw-r--r--server/vendor/nikic/fast-route/test/bootstrap.php11
-rw-r--r--server/vendor/pimple/pimple/.gitignore3
-rw-r--r--server/vendor/pimple/pimple/.travis.yml32
-rw-r--r--server/vendor/pimple/pimple/CHANGELOG35
-rw-r--r--server/vendor/pimple/pimple/LICENSE19
-rw-r--r--server/vendor/pimple/pimple/README.rst201
-rw-r--r--server/vendor/pimple/pimple/composer.json25
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/.gitignore30
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/README.md12
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/config.m463
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/config.w3213
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/php_pimple.h121
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/pimple.c922
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/pimple_compat.h81
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/001.phpt45
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/002.phpt15
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/003.phpt16
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/004.phpt30
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/005.phpt27
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/006.phpt51
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/007.phpt22
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/008.phpt29
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/009.phpt13
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/010.phpt45
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/011.phpt19
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/012.phpt28
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/013.phpt33
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/014.phpt30
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/015.phpt17
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/016.phpt24
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/017.phpt17
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt17
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/018.phpt23
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/019.phpt18
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/bench.phpb51
-rw-r--r--server/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb25
-rw-r--r--server/vendor/pimple/pimple/phpunit.xml.dist14
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/Container.php282
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php46
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php38
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php34
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php54
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php35
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php76
-rw-r--r--server/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php440
-rw-r--r--server/vendor/psr/container/.gitignore3
-rw-r--r--server/vendor/psr/container/LICENSE21
-rw-r--r--server/vendor/psr/container/README.md5
-rw-r--r--server/vendor/psr/container/composer.json27
-rw-r--r--server/vendor/psr/container/src/ContainerExceptionInterface.php13
-rw-r--r--server/vendor/psr/container/src/ContainerInterface.php37
-rw-r--r--server/vendor/psr/container/src/NotFoundExceptionInterface.php13
-rw-r--r--server/vendor/psr/http-message/CHANGELOG.md36
-rw-r--r--server/vendor/psr/http-message/LICENSE19
-rw-r--r--server/vendor/psr/http-message/README.md13
-rw-r--r--server/vendor/psr/http-message/composer.json26
-rw-r--r--server/vendor/psr/http-message/src/MessageInterface.php187
-rw-r--r--server/vendor/psr/http-message/src/RequestInterface.php129
-rw-r--r--server/vendor/psr/http-message/src/ResponseInterface.php68
-rw-r--r--server/vendor/psr/http-message/src/ServerRequestInterface.php261
-rw-r--r--server/vendor/psr/http-message/src/StreamInterface.php158
-rw-r--r--server/vendor/psr/http-message/src/UploadedFileInterface.php123
-rw-r--r--server/vendor/psr/http-message/src/UriInterface.php323
-rw-r--r--server/vendor/slim/slim/LICENSE.md19
-rw-r--r--server/vendor/slim/slim/Slim/App.php677
-rw-r--r--server/vendor/slim/slim/Slim/CallableResolver.php110
-rw-r--r--server/vendor/slim/slim/Slim/CallableResolverAwareTrait.php47
-rw-r--r--server/vendor/slim/slim/Slim/Collection.php202
-rw-r--r--server/vendor/slim/slim/Slim/Container.php179
-rw-r--r--server/vendor/slim/slim/Slim/DefaultServicesProvider.php209
-rw-r--r--server/vendor/slim/slim/Slim/DeferredCallable.php45
-rw-r--r--server/vendor/slim/slim/Slim/Exception/ContainerException.php20
-rw-r--r--server/vendor/slim/slim/Slim/Exception/ContainerValueNotFoundException.php20
-rw-r--r--server/vendor/slim/slim/Slim/Exception/InvalidMethodException.php21
-rw-r--r--server/vendor/slim/slim/Slim/Exception/MethodNotAllowedException.php45
-rw-r--r--server/vendor/slim/slim/Slim/Exception/NotFoundException.php14
-rw-r--r--server/vendor/slim/slim/Slim/Exception/SlimException.php69
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/AbstractError.php99
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/AbstractHandler.php59
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/Error.php224
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/NotAllowed.php147
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/NotFound.php126
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/PhpError.php205
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php43
-rw-r--r--server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php42
-rw-r--r--server/vendor/slim/slim/Slim/Http/Body.php22
-rw-r--r--server/vendor/slim/slim/Slim/Http/Cookies.php195
-rw-r--r--server/vendor/slim/slim/Slim/Http/Environment.php52
-rw-r--r--server/vendor/slim/slim/Slim/Http/Headers.php222
-rw-r--r--server/vendor/slim/slim/Slim/Http/Message.php304
-rw-r--r--server/vendor/slim/slim/Slim/Http/Request.php1216
-rw-r--r--server/vendor/slim/slim/Slim/Http/RequestBody.php27
-rw-r--r--server/vendor/slim/slim/Slim/Http/Response.php480
-rw-r--r--server/vendor/slim/slim/Slim/Http/Stream.php450
-rw-r--r--server/vendor/slim/slim/Slim/Http/UploadedFile.php327
-rw-r--r--server/vendor/slim/slim/Slim/Http/Uri.php824
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php27
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/CollectionInterface.php32
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/Http/CookiesInterface.php23
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php20
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/Http/HeadersInterface.php24
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php35
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php46
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/RouteInterface.php129
-rw-r--r--server/vendor/slim/slim/Slim/Interfaces/RouterInterface.php111
-rw-r--r--server/vendor/slim/slim/Slim/MiddlewareAwareTrait.php126
-rw-r--r--server/vendor/slim/slim/Slim/Routable.php106
-rw-r--r--server/vendor/slim/slim/Slim/Route.php381
-rw-r--r--server/vendor/slim/slim/Slim/RouteGroup.php47
-rw-r--r--server/vendor/slim/slim/Slim/Router.php455
-rw-r--r--server/vendor/slim/slim/composer.json58
-rw-r--r--server/verifycron.php19
-rwxr-xr-xtodo.md14
318 files changed, 2346 insertions, 40380 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1f05715
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+
+.idea/
+server/vendor/
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..379c40c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,42 @@
+app_name=lookup-server
+
+build_dir=$(CURDIR)/build/artifacts
+appstore_dir=$(build_dir)/appstore
+source_dir=$(build_dir)/source
+sign_dir=$(build_dir)/sign
+package_name=$(shell echo $(app_name) | tr '[:upper:]' '[:lower:]')
+cert_dir=$(HOME)/.nextcloud/certificates
+branch=master
+version=1.0.0
+
+all: release
+
+clean:
+ rm -rf $(build_dir)
+
+release: clean
+ mkdir -p $(sign_dir)
+ rsync -a \
+ --exclude=/build \
+ --exclude=/docs \
+ --exclude=/translationfiles \
+ --exclude=/.tx \
+ --exclude=/tests \
+ --exclude=.git \
+ --exclude=/.github \
+ --exclude=/l10n/l10n.pl \
+ --exclude=/CONTRIBUTING.md \
+ --exclude=/issue_template.md \
+ --exclude=/README.md \
+ --exclude=/composer.json \
+ --exclude=/testConfiguration.json \
+ --exclude=node_modules \
+ --exclude=/composer.lock \
+ --exclude=/.gitattributes \
+ --exclude=/.gitignore \
+ --exclude=/.scrutinizer.yml \
+ --exclude=/.travis.yml \
+ --exclude=/Makefile \
+ ./ $(sign_dir)/$(package_name)
+ tar -czf $(build_dir)/$(package_name)-$(version).tar.gz \
+ -C $(sign_dir) $(package_name)
diff --git a/server/composer.json b/server/composer.json
index 6af51d2..41f5d41 100644
--- a/server/composer.json
+++ b/server/composer.json
@@ -1,17 +1,18 @@
{
- "config": {
- "vendor-dir": "vendor",
- "optimize-autoloader": true,
- "classmap-authoritative": true
- },
- "autoload" : {
- "psr-4": {
- "LookupServer\\": "lib/"
- }
- },
- "require": {
- "slim/slim": "^3.5",
- "guzzlehttp/guzzle": "^6.2",
- "abraham/twitteroauth": "^0.7.2"
- }
+ "config": {
+ "vendor-dir": "vendor",
+ "optimize-autoloader": true,
+ "classmap-authoritative": true
+ },
+ "autoload": {
+ "psr-4": {
+ "LookupServer\\": "lib/"
+ }
+ },
+ "require": {
+ "php-di/php-di": "^6.4.0",
+ "slim/slim": "^4.10.0",
+ "guzzlehttp/guzzle": "^7.4.5",
+ "abraham/twitteroauth": "^3.3.0"
+ }
}
diff --git a/server/composer.lock b/server/composer.lock
index 002eb7b..c4d8992 100644
--- a/server/composer.lock
+++ b/server/composer.lock
@@ -4,30 +4,33 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "33c01d94e1598618dda59daf7269ece1",
+ "content-hash": "74a29964bcc90b9559fddac2bbf30740",
"packages": [
{
"name": "abraham/twitteroauth",
- "version": "0.7.2",
+ "version": "3.3.0",
"source": {
"type": "git",
"url": "https://github.com/abraham/twitteroauth.git",
- "reference": "119d5a83478a2d21c09cd27980ab67eba11c8fe1"
+ "reference": "2e640c1e8bb9b5dbcb2230703f97c89a852e30b5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/119d5a83478a2d21c09cd27980ab67eba11c8fe1",
- "reference": "119d5a83478a2d21c09cd27980ab67eba11c8fe1",
+ "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/2e640c1e8bb9b5dbcb2230703f97c89a852e30b5",
+ "reference": "2e640c1e8bb9b5dbcb2230703f97c89a852e30b5",
"shasum": ""
},
"require": {
+ "composer/ca-bundle": "^1.2",
"ext-curl": "*",
- "php": "^5.6 || ^7.0"
+ "php": "^7.4 || ^8.0 || ^8.1"
},
"require-dev": {
- "phpmd/phpmd": "~2.4",
- "phpunit/phpunit": "~5.6",
- "squizlabs/php_codesniffer": "~2.7"
+ "php-vcr/php-vcr": "^1",
+ "php-vcr/phpunit-testlistener-vcr": "dev-php-8",
+ "phpmd/phpmd": "^2",
+ "phpunit/phpunit": "^8 || ^9",
+ "squizlabs/php_codesniffer": "^3"
},
"type": "library",
"autoload": {
@@ -58,82 +61,138 @@
"social",
"twitter"
],
- "time": "2016-12-12T17:42:13+00:00"
+ "support": {
+ "issues": "https://github.com/abraham/twitteroauth/issues",
+ "source": "https://github.com/abraham/twitteroauth"
+ },
+ "time": "2022-01-19T01:10:09+00:00"
},
{
- "name": "container-interop/container-interop",
- "version": "1.2.0",
+ "name": "composer/ca-bundle",
+ "version": "1.3.3",
"source": {
"type": "git",
- "url": "https://github.com/container-interop/container-interop.git",
- "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
- "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/30897edbfb15e784fe55587b4f73ceefd3c4d98c",
+ "reference": "30897edbfb15e784fe55587b4f73ceefd3c4d98c",
"shasum": ""
},
"require": {
- "psr/container": "^1.0"
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^0.12.55",
+ "psr/log": "^1.0",
+ "symfony/phpunit-bridge": "^4.2 || ^5",
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Interop\\Container\\": "src/Interop/Container/"
+ "Composer\\CaBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
- "homepage": "https://github.com/container-interop/container-interop",
- "abandoned": "psr/container",
- "time": "2017-02-14T19:40:03+00:00"
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+ "keywords": [
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/ca-bundle/issues",
+ "source": "https://github.com/composer/ca-bundle/tree/1.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-07-20T07:14:26+00:00"
},
{
"name": "guzzlehttp/guzzle",
- "version": "6.5.1",
+ "version": "7.4.5",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "0274c05370a7bc9bb3a33838858253418bd7d14b"
+ "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0274c05370a7bc9bb3a33838858253418bd7d14b",
- "reference": "0274c05370a7bc9bb3a33838858253418bd7d14b",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
+ "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.0",
- "guzzlehttp/psr7": "^1.6.1",
- "php": ">=5.5"
+ "guzzlehttp/promises": "^1.5",
+ "guzzlehttp/psr7": "^1.9 || ^2.4",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
},
"require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
"ext-curl": "*",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
- "psr/log": "^1.1"
+ "php-http/client-integration-tests": "^3.0",
+ "phpunit/phpunit": "^8.5.5 || ^9.3.5",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
},
"suggest": {
+ "ext-curl": "Required for CURL handler support",
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "6.5-dev"
+ "dev-master": "7.4-dev"
}
},
"autoload": {
- "psr-4": {
- "GuzzleHttp\\": "src/"
- },
"files": [
"src/functions_include.php"
- ]
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -141,57 +200,106 @@
],
"authors": [
{
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle is a PHP HTTP client library",
- "homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
+ "psr-18",
+ "psr-7",
"rest",
"web service"
],
- "time": "2019-12-21T08:51:15+00:00"
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.4.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-20T22:16:13+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "v1.3.1",
+ "version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
+ "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
"shasum": ""
},
"require": {
- "php": ">=5.5.0"
+ "php": ">=5.5"
},
"require-dev": {
- "phpunit/phpunit": "^4.0"
+ "symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4-dev"
+ "dev-master": "1.5-dev"
}
},
"autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- },
"files": [
"src/functions_include.php"
- ]
+ ],
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -199,59 +307,92 @@
],
"authors": [
{
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
- "time": "2016-12-20T10:07:11+00:00"
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/1.5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-10-22T20:56:57+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "1.6.1",
+ "version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
+ "reference": "13388f00956b1503577598873fffb5ae994b5737"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
- "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737",
+ "reference": "13388f00956b1503577598873fffb5ae994b5737",
"shasum": ""
},
"require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0",
- "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "ralouphie/getallheaders": "^3.0"
},
"provide": {
+ "psr/http-factory-implementation": "1.0",
"psr/http-message-implementation": "1.0"
},
"require-dev": {
- "ext-zlib": "*",
- "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.8 || ^9.3.10"
},
"suggest": {
- "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.6-dev"
+ "dev-master": "2.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -259,13 +400,39 @@
],
"authors": [
{
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
"name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
@@ -279,33 +446,113 @@
"uri",
"url"
],
- "time": "2019-07-01T23:21:34+00:00"
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-06-20T21:43:11+00:00"
},
{
- "name": "nikic/fast-route",
+ "name": "laravel/serializable-closure",
"version": "v1.2.0",
"source": {
"type": "git",
- "url": "https://github.com/nikic/FastRoute.git",
- "reference": "b5f95749071c82a8e0f58586987627054400cdf6"
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "09f0e9fb61829f628205b7c94906c28740ff9540"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6",
- "reference": "b5f95749071c82a8e0f58586987627054400cdf6",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540",
+ "reference": "09f0e9fb61829f628205b7c94906c28740ff9540",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "pestphp/pest": "^1.18",
+ "phpstan/phpstan": "^0.12.98",
+ "symfony/var-dumper": "^5.3"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "FastRoute\\": "src/"
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
},
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "time": "2022-05-16T17:09:47+00:00"
+ },
+ {
+ "name": "nikic/fast-route",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/FastRoute.git",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812",
+ "reference": "181d480e08d9476e61381e04a71b34dc0432e812",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35|~5.7"
+ },
+ "type": "library",
+ "autoload": {
"files": [
"src/functions.php"
- ]
+ ],
+ "psr-4": {
+ "FastRoute\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -322,77 +569,203 @@
"router",
"routing"
],
- "time": "2017-01-19T11:35:12+00:00"
+ "support": {
+ "issues": "https://github.com/nikic/FastRoute/issues",
+ "source": "https://github.com/nikic/FastRoute/tree/master"
+ },
+ "time": "2018-02-13T20:26:39+00:00"
},
{
- "name": "pimple/pimple",
- "version": "v3.0.2",
+ "name": "php-di/invoker",
+ "version": "2.3.3",
"source": {
"type": "git",
- "url": "https://github.com/silexphp/Pimple.git",
- "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a"
+ "url": "https://github.com/PHP-DI/Invoker.git",
+ "reference": "cd6d9f267d1a3474bdddf1be1da079f01b942786"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a",
- "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a",
+ "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/cd6d9f267d1a3474bdddf1be1da079f01b942786",
+ "reference": "cd6d9f267d1a3474bdddf1be1da079f01b942786",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=7.3",
+ "psr/container": "^1.0|^2.0"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "mnapoli/hard-mode": "~0.3.0",
+ "phpunit/phpunit": "^9.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
+ "autoload": {
+ "psr-4": {
+ "Invoker\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Generic and extensible callable invoker",
+ "homepage": "https://github.com/PHP-DI/Invoker",
+ "keywords": [
+ "callable",
+ "dependency",
+ "dependency-injection",
+ "injection",
+ "invoke",
+ "invoker"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-DI/Invoker/issues",
+ "source": "https://github.com/PHP-DI/Invoker/tree/2.3.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/mnapoli",
+ "type": "github"
}
+ ],
+ "time": "2021-12-13T09:22:56+00:00"
+ },
+ {
+ "name": "php-di/php-di",
+ "version": "6.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-DI/PHP-DI.git",
+ "reference": "ae0f1b3b03d8b29dff81747063cbfd6276246cc4"
},
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/ae0f1b3b03d8b29dff81747063cbfd6276246cc4",
+ "reference": "ae0f1b3b03d8b29dff81747063cbfd6276246cc4",
+ "shasum": ""
+ },
+ "require": {
+ "laravel/serializable-closure": "^1.0",
+ "php": ">=7.4.0",
+ "php-di/invoker": "^2.0",
+ "php-di/phpdoc-reader": "^2.0.1",
+ "psr/container": "^1.0"
+ },
+ "provide": {
+ "psr/container-implementation": "^1.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "~1.10",
+ "friendsofphp/php-cs-fixer": "^2.4",
+ "mnapoli/phpunit-easymock": "^1.2",
+ "ocramius/proxy-manager": "^2.11.2",
+ "phpstan/phpstan": "^0.12",
+ "phpunit/phpunit": "^9.5"
+ },
+ "suggest": {
+ "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)",
+ "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~2.0)"
+ },
+ "type": "library",
"autoload": {
- "psr-0": {
- "Pimple": "src/"
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "DI\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
+ "description": "The dependency injection container for humans",
+ "homepage": "https://php-di.org/",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interop",
+ "dependency injection",
+ "di",
+ "ioc",
+ "psr11"
+ ],
+ "support": {
+ "issues": "https://github.com/PHP-DI/PHP-DI/issues",
+ "source": "https://github.com/PHP-DI/PHP-DI/tree/6.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/mnapoli",
+ "type": "github"
+ },
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "url": "https://tidelift.com/funding/github/packagist/php-di/php-di",
+ "type": "tidelift"
}
],
- "description": "Pimple, a simple Dependency Injection Container",
- "homepage": "http://pimple.sensiolabs.org",
+ "time": "2022-04-09T16:46:38+00:00"
+ },
+ {
+ "name": "php-di/phpdoc-reader",
+ "version": "2.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHP-DI/PhpDocReader.git",
+ "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/66daff34cbd2627740ffec9469ffbac9f8c8185c",
+ "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "require-dev": {
+ "mnapoli/hard-mode": "~0.3.0",
+ "phpunit/phpunit": "^8.5|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpDocReader\\": "src/PhpDocReader"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)",
"keywords": [
- "container",
- "dependency injection"
+ "phpdoc",
+ "reflection"
],
- "time": "2015-09-11T15:10:35+00:00"
+ "support": {
+ "issues": "https://github.com/PHP-DI/PhpDocReader/issues",
+ "source": "https://github.com/PHP-DI/PhpDocReader/tree/2.2.1"
+ },
+ "time": "2020-10-12T12:39:22+00:00"
},
{
"name": "psr/container",
- "version": "1.0.0",
+ "version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=7.4.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
@@ -405,7 +778,7 @@
"authors": [
{
"name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "homepage": "https://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
@@ -417,7 +790,118 @@
"container-interop",
"psr"
],
- "time": "2017-02-14T16:28:37+00:00"
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.2"
+ },
+ "time": "2021-11-05T16:50:12+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client/tree/master"
+ },
+ "time": "2020-06-29T06:28:15+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
+ "time": "2019-04-30T12:38:16+00:00"
},
{
"name": "psr/http-message",
@@ -467,9 +951,176 @@
"request",
"response"
],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
"time": "2016-08-06T14:39:51+00:00"
},
{
+ "name": "psr/http-server-handler",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-handler.git",
+ "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
+ "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side request handler",
+ "keywords": [
+ "handler",
+ "http",
+ "http-interop",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response",
+ "server"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/http-server-handler/issues",
+ "source": "https://github.com/php-fig/http-server-handler/tree/master"
+ },
+ "time": "2018-10-30T16:46:14+00:00"
+ },
+ {
+ "name": "psr/http-server-middleware",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-server-middleware.git",
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5",
+ "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0",
+ "psr/http-message": "^1.0",
+ "psr/http-server-handler": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Server\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP server-side middleware",
+ "keywords": [
+ "http",
+ "http-interop",
+ "middleware",
+ "psr",
+ "psr-15",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/http-server-middleware/issues",
+ "source": "https://github.com/php-fig/http-server-middleware/tree/master"
+ },
+ "time": "2018-10-30T17:12:04+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.0"
+ },
+ "time": "2021-07-14T16:46:02+00:00"
+ },
+ {
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
@@ -507,36 +1158,59 @@
}
],
"description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "slim/slim",
- "version": "3.8.1",
+ "version": "4.10.0",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim.git",
- "reference": "5385302707530b2bccee1769613ad769859b826d"
+ "reference": "0dfc7d2fdf2553b361d864d51af3fe8a6ad168b0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slimphp/Slim/zipball/5385302707530b2bccee1769613ad769859b826d",
- "reference": "5385302707530b2bccee1769613ad769859b826d",
+ "url": "https://api.github.com/repos/slimphp/Slim/zipball/0dfc7d2fdf2553b361d864d51af3fe8a6ad168b0",
+ "reference": "0dfc7d2fdf2553b361d864d51af3fe8a6ad168b0",
"shasum": ""
},
"require": {
- "container-interop/container-interop": "^1.2",
- "nikic/fast-route": "^1.0",
- "php": ">=5.5.0",
- "pimple/pimple": "^3.0",
- "psr/container": "^1.0",
- "psr/http-message": "^1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
+ "ext-json": "*",
+ "nikic/fast-route": "^1.3",
+ "php": "^7.4 || ^8.0",
+ "psr/container": "^1.0 || ^2.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0",
+ "psr/http-server-handler": "^1.0",
+ "psr/http-server-middleware": "^1.0",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.0",
- "squizlabs/php_codesniffer": "^2.5"
+ "adriansuter/php-autoload-override": "^1.2",
+ "ext-simplexml": "*",
+ "guzzlehttp/psr7": "^2.1",
+ "httpsoft/http-message": "^1.0",
+ "httpsoft/http-server-request": "^1.0",
+ "laminas/laminas-diactoros": "^2.8",
+ "nyholm/psr7": "^1.5",
+ "nyholm/psr7-server": "^1.0",
+ "phpspec/prophecy": "^1.15",
+ "phpspec/prophecy-phpunit": "^2.0",
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^9.5",
+ "slim/http": "^1.2",
+ "slim/psr7": "^1.5",
+ "squizlabs/php_codesniffer": "^3.6"
+ },
+ "suggest": {
+ "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware",
+ "ext-xml": "Needed to support XML format in BodyParsingMiddleware",
+ "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim",
+ "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information."
},
"type": "library",
"autoload": {
@@ -550,35 +1224,127 @@
],
"authors": [
{
+ "name": "Josh Lockhart",
+ "email": "hello@joshlockhart.com",
+ "homepage": "https://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": "Josh Lockhart",
- "email": "hello@joshlockhart.com",
- "homepage": "https://joshlockhart.com"
+ "name": "Pierre Berube",
+ "email": "pierre@lgse.com",
+ "homepage": "http://www.lgse.com"
},
{
"name": "Gabriel Manricks",
"email": "gmanricks@me.com",
"homepage": "http://gabrielmanricks.com"
- },
- {
- "name": "Andrew Smith",
- "email": "a.smith@silentworks.co.uk",
- "homepage": "http://silentworks.co.uk"
}
],
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
- "homepage": "https://slimframework.com",
+ "homepage": "https://www.slimframework.com",
"keywords": [
"api",
"framework",
"micro",
"router"
],
- "time": "2017-03-19T17:55:20+00:00"
+ "support": {
+ "docs": "https://www.slimframework.com/docs/v4/",
+ "forum": "https://discourse.slimframework.com/",
+ "irc": "irc://irc.freenode.net:6667/slimphp",
+ "issues": "https://github.com/slimphp/Slim/issues",
+ "rss": "https://www.slimframework.com/blog/feed.rss",
+ "slack": "https://slimphp.slack.com/",
+ "source": "https://github.com/slimphp/Slim",
+ "wiki": "https://github.com/slimphp/Slim/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/slimphp",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slim/slim",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-03-14T14:18:23+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
+ "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-01-02T09:55:41+00:00"
}
],
"packages-dev": [],
@@ -588,5 +1354,6 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
- "platform-dev": []
+ "platform-dev": [],
+ "plugin-api-version": "2.0.0"
}
diff --git a/server/config/version.php b/server/config/version.php
deleted file mode 100755
index 97aba47..0000000
--- a/server/config/version.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-$VERSION = '0.3.1';
diff --git a/server/index.php b/server/index.php
index 00470fd..52c3284 100644
--- a/server/index.php
+++ b/server/index.php
@@ -1,29 +1,127 @@
<?php
-require __DIR__ . '/vendor/autoload.php';
+declare(strict_types=1);
-$settings = require __DIR__ . '/src/config.php';
-$container = new \Slim\Container($settings);
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
-require __DIR__ . '/src/dependencies.php';
-$container['BruteForceMiddleware'] = function ($c) {
- return new \LookupServer\BruteForceMiddleware($c->db);
+namespace LookupServer;
+
+
+use LookupServer\Validator\Email;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+
+require __DIR__ . '/init.php';
+
+if (!isset($app) || !isset($container)) {
+ return;
+}
+
+$r_search = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ /** @var UserManager $userManager */
+ $userManager = $this->get('UserManager');
+
+ return $userManager->search($request, $response, $args);
+};
+$app->get('/users', $r_search);
+$app->get('/index.php/users', $r_search);
+
+$r_register = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ /** @var UserManager $userManager */
+ $userManager = $this->get('UserManager');
+
+ return $userManager->register($request, $response, $args);
+};
+$app->post('/users', $r_register);
+$app->post('/index.php/users', $r_register);
+
+
+$r_delete = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ /** @var UserManager $userManager */
+ $userManager = $this->get('UserManager');
+
+ return $userManager->delete($request, $response, $args);
+};
+$app->delete('/users', $r_delete);
+$app->delete('/index.php/users', $r_delete);
+
+
+$r_batchRegister = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ /** @var UserManager $userManager */
+ $userManager = $this->get('UserManager');
+
+ return $userManager->batchRegister($request, $response, $args);
+};
+$app->post('/gs/users', $r_batchRegister);
+$app->post('/index.php/gs/users', $r_batchRegister);
+
+
+$r_batchDelete = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ /** @var UserManager $userManager */
+ $userManager = $this->get('UserManager');
+
+ return $userManager->batchDelete($request, $response, $args);
};
+$app->delete('/gs/users', $r_batchDelete);
+$app->delete('/index.php/gs/users', $r_batchDelete);
-$app = new \Slim\App($container);
-$app->add($container->get('BruteForceMiddleware'));
+$r_validateEmail = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ /** @var Email $emailValidator */
+ $emailValidator = $this->get('EmailValidator');
+
+ return $emailValidator->validate($request, $response, $args);
+};
+$app->get('/validate/email/{token}', $r_validateEmail);
+$app->get('/index.php/validate/email/{token}', $r_validateEmail);
-$app->get('/users', 'UserManager:search');
-$app->post('/users', 'UserManager:register');
-$app->post('/gs/users', 'UserManager:batchRegister');
-$app->delete('/gs/users', 'UserManager:batchDelete');
-$app->delete('/users', 'UserManager:delete');
-$app->get('/validate/email/{token}', 'EmailValidator:validate')->setName('validateEmail');
-$app->get('/status', 'Status:status');
-$app->get('/replication', 'Replication:export');
+$r_status = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ $response->getBody()->write(
+ json_encode(
+ ['version' => VERSION]
+ )
+ );
+
+ return $response;
+};
+$app->get('/status', $r_status);
+$app->get('/index.php/status', $r_status);
+
+
+$r_export = function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
+ /** @var Replication $replication */
+ $replication = $this->get('Replication');
+
+ return $replication->export($request, $response, $args);
+};
+$app->get('/replication', $r_export);
+$app->get('/index.php/replication', $r_export);
+
$app->run();
diff --git a/server/init.php b/server/init.php
new file mode 100644
index 0000000..454513a
--- /dev/null
+++ b/server/init.php
@@ -0,0 +1,58 @@
+<?php
+
+declare(strict_types=1);
+
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace LookupServer;
+
+
+use DI\Container;
+use LookupServer\Service\DependenciesService;
+use Slim\Factory\AppFactory;
+
+
+define('VERSION', '1.0.0');
+
+
+require __DIR__ . '/vendor/autoload.php';
+
+$container = new Container();
+AppFactory::setContainer($container);
+$app = AppFactory::create();
+$app->setBasePath('');
+
+$settings = require __DIR__ . '/src/config.php';
+$container->set('Settings', function (Container $c) use ($settings) {
+ return $settings;
+});
+
+$container->set('DependenciesService', function (Container $c) {
+ return new DependenciesService($c->get('Settings'));
+});
+$container->get('DependenciesService')->initContainer($container, $app);
+
diff --git a/server/lib/BruteForceMiddleware.php b/server/lib/BruteForceMiddleware.php
index af1080b..4a9c4d7 100644
--- a/server/lib/BruteForceMiddleware.php
+++ b/server/lib/BruteForceMiddleware.php
@@ -2,6 +2,9 @@
namespace LookupServer;
+/**
+ * @deprecated
+ */
class BruteForceMiddleware {
/**
* Brute force middleware
diff --git a/server/lib/Replication.php b/server/lib/Replication.php
index 931ee87..04a8e45 100644
--- a/server/lib/Replication.php
+++ b/server/lib/Replication.php
@@ -1,73 +1,112 @@
<?php
+declare(strict_types=1);
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ *
+ * @copyright 2017
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
namespace LookupServer;
use GuzzleHttp\Client;
-use Slim\Http\Request;
-use Slim\Http\Response;
+use PDO;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ResponseInterface as Response;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Message\ServerRequestInterface as Request;
class Replication {
- /** @var \PDO */
- private $db;
-
- /** @var string */
- private $auth;
-
- /** @var string[] */
- private $replicationHosts;
+ private PDO $db;
+ private string $auth;
+ private array $replicationHosts;
- public function __construct(\PDO $db, $auth, $replicationHosts) {
+ public function __construct(PDO $db, string $auth, array $replicationHosts) {
$this->db = $db;
$this->auth = $auth;
$this->replicationHosts = $replicationHosts;
}
- public function export(Request $request, Response $response) {
+
+ /**
+ * @param ServerRequestInterface $request
+ * @param ResponseInterface $response
+ * @param array $args
+ *
+ * @return ResponseInterface
+ */
+ public function export(Request $request, Response $response, array $args = []): Response {
$userInfo = $request->getUri()->getUserInfo();
$userInfo = explode(':', $userInfo, 2);
- if (count($userInfo) !== 2 || $userInfo[0] !== 'lookup' || $userInfo[1] !== $this->auth) {
+ if (count($userInfo) !== 2 || $userInfo[0] !== 'lookup' || $userInfo[1] !== $this->auth) {
return $response->withStatus(401);
}
$params = $request->getQueryParams();
- if (!isset($params['timestamp'], $params['page']) || !ctype_digit($params['timestamp']) ||
- !ctype_digit($params['page'])) {
+ if (!isset($params['timestamp'], $params['page']) || !ctype_digit($params['timestamp'])
+ || !ctype_digit($params['page'])) {
return $response->withStatus(400);
}
$timestamp = (int)$params['timestamp'];
$page = (int)$params['page'];
- $stmt = $this->db->prepare('SELECT id, federationId, UNIX_TIMESTAMP(timestamp) AS timestamp
+ $stmt = $this->db->prepare(
+ 'SELECT id, federationId, UNIX_TIMESTAMP(timestamp) AS timestamp
FROM users
WHERE UNIX_TIMESTAMP(timestamp) >= :timestamp
ORDER BY timestamp, id
LIMIT :limit
- OFFSET :offset');
+ OFFSET :offset'
+ );
$stmt->bindParam('timestamp', $timestamp);
- $stmt->bindValue('limit', 100, \PDO::PARAM_INT);
- $stmt->bindValue('offset', 100 * $page, \PDO::PARAM_INT);
+ $stmt->bindValue('limit', 100, PDO::PARAM_INT);
+ $stmt->bindValue('offset', 100 * $page, PDO::PARAM_INT);
$stmt->execute();
$result = [];
- while($data = $stmt->fetch()) {
+ while ($data = $stmt->fetch()) {
$user = [
'cloudId' => $data['federationId'],
'timestamp' => (int)$data['timestamp'],
'data' => [],
];
- $stmt2 = $this->db->prepare('SELECT *
+ $stmt2 = $this->db->prepare(
+ 'SELECT *
FROM store
- WHERE userId = :uid');
+ WHERE userId = :uid'
+ );
$stmt2->bindValue('uid', $data['id']);
$stmt2->execute();
- while($userData = $stmt2->fetch()) {
+ while ($userData = $stmt2->fetch()) {
$user['data'][] = [
'key' => $userData['k'],
'value' => $userData['v'],
@@ -80,14 +119,17 @@ class Replication {
}
$response->getBody()->write(json_encode($result));
+
return $response;
}
- public function import(Request $request, Response $response) {
+
+ public function import(): void {
$replicationStatus = [];
if (file_exists(__DIR__ . '/../config/replication.json')) {
- $replicationStatus = json_decode(file_get_contents(__DIR__ . '/../config/replication.json'), true);
+ $replicationStatus =
+ json_decode(file_get_contents(__DIR__ . '/../config/replication.json'), true);
}
foreach ($this->replicationHosts as $replicationHost) {
@@ -98,16 +140,18 @@ class Replication {
}
$page = 0;
- while(true) {
+ while (true) {
// Retrieve public key && store
- $req = new \GuzzleHttp\Psr7\Request('GET', $replicationHost . '?timestamp=' . $timestamp . '&page=' . $page);
+ $req = new \GuzzleHttp\Psr7\Request(
+ 'GET', $replicationHost . '?timestamp=' . $timestamp . '&page=' . $page
+ );
$client = new Client();
$resp = $client->send($req, [
'timeout' => 5,
]);
- $data = json_decode($resp->getBody(), true);
+ $data = json_decode($resp->getBody()->getContents(), true);
if (count($data) === 0) {
break;
}
@@ -120,16 +164,22 @@ class Replication {
$page++;
}
- file_put_contents(__DIR__. '/../config/replication.json', json_encode($replicationStatus, JSON_PRETTY_PRINT));
+ file_put_contents(
+ __DIR__ . '/../config/replication.json', json_encode($replicationStatus, JSON_PRETTY_PRINT)
+ );
}
-
- return $response;
}
- private function parseUser($user) {
- $stmt = $this->db->prepare('SELECT id, UNIX_TIMESTAMP(timestamp) AS timestamp
+
+ /**
+ * @param array $user
+ */
+ private function parseUser(array $user): void {
+ $stmt = $this->db->prepare(
+ 'SELECT id, UNIX_TIMESTAMP(timestamp) AS timestamp
FROM users
- WHERE federationId = :id');
+ WHERE federationId = :id'
+ );
$stmt->bindParam('id', $user['cloudId']);
$stmt->execute();
@@ -139,11 +189,14 @@ class Replication {
$data = $stmt->fetch();
if ($data['timestamp'] > $user['timestamp']) {
$stmt->closeCursor();
+
return;
}
- $stmt2 = $this->db->prepare('DELETE FROM users
- WHERE federationId = :id');
+ $stmt2 = $this->db->prepare(
+ 'DELETE FROM users
+ WHERE federationId = :id'
+ );
$stmt2->bindParam('id', $user['cloudId']);
$stmt2->execute();
$stmt2->closeCursor();
@@ -151,19 +204,23 @@ class Replication {
$stmt->closeCursor();
- $stmt = $this->db->prepare('INSERT INTO users (federationId, timestamp) VALUES (:federationId, FROM_UNIXTIME(:timestamp))');
- $stmt->bindParam(':federationId', $user['cloudId'], \PDO::PARAM_STR);
- $stmt->bindParam(':timestamp', $user['timestamp'], \PDO::PARAM_INT);
+ $stmt = $this->db->prepare(
+ 'INSERT INTO users (federationId, timestamp) VALUES (:federationId, FROM_UNIXTIME(:timestamp))'
+ );
+ $stmt->bindParam(':federationId', $user['cloudId'], PDO::PARAM_STR);
+ $stmt->bindParam(':timestamp', $user['timestamp'], PDO::PARAM_INT);
$stmt->execute();
$id = $this->db->lastInsertId();
$stmt->closeCursor();
foreach ($user['data'] as $data) {
- $stmt = $this->db->prepare('INSERT INTO store (userId, k, v, valid) VALUES (:userId, :k, :v, :valid)');
- $stmt->bindParam(':userId', $id, \PDO::PARAM_INT);
- $stmt->bindParam(':k', $data['key'], \PDO::PARAM_STR);
- $stmt->bindParam(':v', $data['value'], \PDO::PARAM_STR);
- $stmt->bindParam(':valid', $data['validated'], \PDO::PARAM_INT);
+ $stmt = $this->db->prepare(
+ 'INSERT INTO store (userId, k, v, valid) VALUES (:userId, :k, :v, :valid)'
+ );
+ $stmt->bindParam(':userId', $id, PDO::PARAM_INT);
+ $stmt->bindParam(':k', $data['key'], PDO::PARAM_STR);
+ $stmt->bindParam(':v', $data['value'], PDO::PARAM_STR);
+ $stmt->bindParam(':valid', $data['validated'], PDO::PARAM_INT);
$stmt->execute();
$stmt->closeCursor();
diff --git a/server/lib/Service/DependenciesService.php b/server/lib/Service/DependenciesService.php
new file mode 100644
index 0000000..a6e9990
--- /dev/null
+++ b/server/lib/Service/DependenciesService.php
@@ -0,0 +1,147 @@
+<?php
+
+declare(strict_types=1);
+
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace LookupServer\Service;
+
+use Abraham\TwitterOAuth\TwitterOAuth;
+use DI\Container;
+use Exception;
+use LookupServer\Replication;
+use LookupServer\SignatureHandler;
+use LookupServer\Tools\Traits\TArrayTools;
+use LookupServer\UserManager;
+use LookupServer\Validator\Email;
+use LookupServer\Validator\Twitter;
+use LookupServer\Validator\Website;
+use PDO;
+use Slim\App;
+
+class DependenciesService {
+ use TArrayTools;
+
+ private array $settings;
+
+ public function __construct(array $settings = []) {
+ $this->settings = $settings;
+ }
+
+
+ /**
+ * @param Container $container
+ * @param App $app
+ */
+ public function initContainer(Container $container, App $app): void {
+
+ $container->set('db', function (Container $c) {
+ $db = $this->getArray('settings.db', $c->get('Settings'));
+ if (empty($db)) {
+ throw new Exception('faulty configuration');
+ }
+
+ $pdo = new PDO(
+ "mysql:host=" . $db['host'] . ";dbname=" . $db['dbname'],
+ $db['user'], $db['pass']
+ );
+ $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+ $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
+
+ return $pdo;
+ });
+
+
+ $container->set('UserManager', function (Container $c) {
+ return new UserManager(
+ $c->get('db'),
+ $c->get('EmailValidator'),
+ $c->get('WebsiteValidator'),
+ $c->get('TwitterValidator'),
+ $c->get('SignatureHandler'),
+ $this->getBool('settings.global_scale', $c->get('Settings')),
+ $this->get('settings.auth_key', $c->get('Settings'))
+ );
+ });
+
+
+ $container->set('SignatureHandler', function () {
+ return new SignatureHandler();
+ });
+
+ $container->set('TwitterOAuth', function (Container $c) {
+ /** @var array $settings */
+ $settings = $c->get('Settings');
+
+ return new TwitterOAuth(
+ $this->get('settings.twitter.consumer_key', $settings),
+ $this->get('settings.twitter.consumer_secret', $settings),
+ $this->get('settings.twitter.access_token', $settings),
+ $this->get('settings.twitter.access_token_secret', $settings)
+ );
+ });
+
+
+ $container->set('EmailValidator', function (Container $c) use ($app) {
+ $settings = $c->get('Settings');
+
+ return new Email(
+ $c->get('db'),
+ $app->getRouteCollector()->getRouteParser(),
+ $this->get('settings.host', $settings),
+ $this->get('settings.emailfrom', $settings),
+ $this->getBool('settings.global_scale', $settings)
+ );
+ });
+
+ $container->set('WebsiteValidator', function (Container $c) {
+ return new Website($c->get('SignatureHandler'));
+ });
+
+
+ $container->set('TwitterValidator', function (Container $c) {
+ return new Twitter(
+ $c->get('TwitterOAuth'),
+ $c->get('SignatureHandler'),
+ $c->get('db')
+ );
+ });
+
+
+ $container->set('Replication', function (Container $c) {
+ $settings = $c->get('Settings');
+
+ return new Replication(
+ $c->get('db'),
+ $this->get('settings.replication_auth', $settings),
+ $this->getArray('settings.replication_hosts', $settings)
+ );
+ });
+ }
+
+}
diff --git a/server/lib/SignatureHandler.php b/server/lib/SignatureHandler.php
index bf308d4..7d42bb3 100644
--- a/server/lib/SignatureHandler.php
+++ b/server/lib/SignatureHandler.php
@@ -1,7 +1,13 @@
<?php
+
+declare(strict_types=1);
+
+
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
@@ -22,7 +28,10 @@
namespace LookupServer;
+use BadMethodCallException;
+use Exception;
use GuzzleHttp\Client;
+use GuzzleHttp\Exception\GuzzleException;
class SignatureHandler {
@@ -32,57 +41,60 @@ class SignatureHandler {
* @param string $cloudId
* @param string $message
* @param string $signature
+ *
* @return bool
- * @throws \Exception
+ * @throws GuzzleException
*/
- public function verify($cloudId, $message, $signature) {
+ public function verify(string $cloudId, string $message, string $signature): bool {
// Get fed id
list($user, $host) = $this->splitCloudId($cloudId);
// Retrieve public key && store
$ocsreq = new \GuzzleHttp\Psr7\Request(
'GET',
- 'http://'.$host . '/ocs/v2.php/identityproof/key/' . $user,
+ 'http://' . $host . '/ocs/v2.php/identityproof/key/' . $user,
[
'OCS-APIREQUEST' => 'true',
'Accept' => 'application/json',
- ]);
+ ]
+ );
$client = new Client();
$ocsresponse = $client->send($ocsreq, ['timeout' => 10]);
- $ocsresponse = json_decode($ocsresponse->getBody(), true);
+ $ocsresponse = json_decode($ocsresponse->getBody()->getContents(), true);
- if ($ocsresponse === null || !isset($ocsresponse['ocs']) ||
- !isset($ocsresponse['ocs']['data']) || !isset($ocsresponse['ocs']['data']['public'])) {
- throw new \BadMethodCallException();
+ if ($ocsresponse === null || !isset($ocsresponse['ocs'])
+ || !isset($ocsresponse['ocs']['data'])
+ || !isset($ocsresponse['ocs']['data']['public'])) {
+ throw new BadMethodCallException();
}
$key = $ocsresponse['ocs']['data']['public'];
// verify message
$message = json_encode($message);
- $signature= base64_decode($signature);
+ $signature = base64_decode($signature);
$res = openssl_verify($message, $signature, $key, OPENSSL_ALGO_SHA512);
return $res === 1;
-
}
/**
* Split a cloud id in a user and host post
*
- * @param $cloudId
+ * @param string $cloudId
+ *
* @return string[]
*/
- private function splitCloudId($cloudId) {
+ private function splitCloudId(string $cloudId): array {
$loc = strrpos($cloudId, '@');
$user = substr($cloudId, 0, $loc);
- $host = substr($cloudId, $loc+1);
+ $host = substr($cloudId, $loc + 1);
+
return [$user, $host];
}
-
}
diff --git a/server/lib/Status.php b/server/lib/Status.php
deleted file mode 100644
index 69c87de..0000000
--- a/server/lib/Status.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace LookupServer;
-
-use \Psr\Http\Message\ServerRequestInterface as Request;
-use \Psr\Http\Message\ResponseInterface as Response;
-
-class Status {
-
- public function status(Request $request, Response $response) {
- require __DIR__ . '/../config/version.php';
-
- $response->getBody()->write(json_encode(array('version'=>$VERSION)));
- }
-}
diff --git a/server/lib/Tools/Exceptions/ArrayNotFoundException.php b/server/lib/Tools/Exceptions/ArrayNotFoundException.php
new file mode 100644
index 0000000..196a869
--- /dev/null
+++ b/server/lib/Tools/Exceptions/ArrayNotFoundException.php
@@ -0,0 +1,43 @@
+<?php
+
+declare(strict_types=1);
+
+
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace LookupServer\Tools\Exceptions;
+
+use Exception;
+
+/**
+ * Class ArrayNotFoundException
+ *
+ * @package LookupServer\Tools\Exceptions
+ */
+class ArrayNotFoundException extends Exception {
+}
diff --git a/server/lib/Tools/Exceptions/ItemNotFoundException.php b/server/lib/Tools/Exceptions/ItemNotFoundException.php
new file mode 100644
index 0000000..833507e
--- /dev/null
+++ b/server/lib/Tools/Exceptions/ItemNotFoundException.php
@@ -0,0 +1,43 @@
+<?php
+
+declare(strict_types=1);
+
+
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace LookupServer\Tools\Exceptions;
+
+use Exception;
+
+/**
+ * Class ItemNotFoundException
+ *
+ * @package LookupServer\Tools\Exceptions
+ */
+class ItemNotFoundException extends Exception {
+}
diff --git a/server/lib/Tools/Exceptions/MalformedArrayException.php b/server/lib/Tools/Exceptions/MalformedArrayException.php
new file mode 100644
index 0000000..713b2d7
--- /dev/null
+++ b/server/lib/Tools/Exceptions/MalformedArrayException.php
@@ -0,0 +1,43 @@
+<?php
+
+declare(strict_types=1);
+
+
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace LookupServer\Tools\Exceptions;
+
+use Exception;
+
+/**
+ * Class MalformedArrayException
+ *
+ * @package LookupServer\Tools\Exceptions
+ */
+class MalformedArrayException extends Exception {
+}
diff --git a/server/lib/Tools/Exceptions/UnknownTypeException.php b/server/lib/Tools/Exceptions/UnknownTypeException.php
new file mode 100644
index 0000000..2e8aa62
--- /dev/null
+++ b/server/lib/Tools/Exceptions/UnknownTypeException.php
@@ -0,0 +1,42 @@
+<?php
+
+declare(strict_types=1);
+
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace LookupServer\Tools\Exceptions;
+
+use Exception;
+
+/**
+ * Class UnknownTypeException
+ *
+ * @package LookupServer\Tools\Exceptions
+ */
+class UnknownTypeException extends Exception {
+}
diff --git a/server/lib/Tools/Traits/TArrayTools.php b/server/lib/Tools/Traits/TArrayTools.php
new file mode 100644
index 0000000..f41a925
--- /dev/null
+++ b/server/lib/Tools/Traits/TArrayTools.php
@@ -0,0 +1,432 @@
+<?php
+
+declare(strict_types=1);
+
+
+/**
+ * Circles - Bring cloud-users closer together.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ * @copyright 2022
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+namespace LookupServer\Tools\Traits;
+
+use Exception;
+use JsonSerializable;
+use LookupServer\Tools\Exceptions\ArrayNotFoundException;
+use LookupServer\Tools\Exceptions\ItemNotFoundException;
+use LookupServer\Tools\Exceptions\MalformedArrayException;
+use LookupServer\Tools\Exceptions\UnknownTypeException;
+
+trait TArrayTools {
+ public static string $TYPE_NULL = 'Null';
+ public static string $TYPE_STRING = 'String';
+ public static string $TYPE_ARRAY = 'Array';
+ public static string $TYPE_BOOLEAN = 'Boolean';
+ public static string $TYPE_INTEGER = 'Integer';
+ public static string $TYPE_SERIALIZABLE = 'Serializable';
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ * @param string $default
+ *
+ * @return string
+ */
+ protected function get(string $k, array $arr, string $default = ''): string {
+ if (!array_key_exists($k, $arr)) {
+ $subs = explode('.', $k, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ return $default;
+ }
+
+ $r = $arr[$subs[0]];
+ if (!is_array($r)) {
+ return $default;
+ }
+
+ return $this->get($subs[1], $r, $default);
+ } else {
+ return $default;
+ }
+ }
+
+ if ($arr[$k] === null || !is_string($arr[$k]) && (!is_int($arr[$k]))) {
+ return $default;
+ }
+
+ return (string)$arr[$k];
+ }
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ * @param int $default
+ *
+ * @return int
+ */
+ protected function getInt(string $k, array $arr, int $default = 0): int {
+ if (!array_key_exists($k, $arr)) {
+ $subs = explode('.', $k, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ return $default;
+ }
+
+ $r = $arr[$subs[0]];
+ if (!is_array($r)) {
+ return $default;
+ }
+
+ return $this->getInt($subs[1], $r, $default);
+ } else {
+ return $default;
+ }
+ }
+
+ if ($arr[$k] === null) {
+ return $default;
+ }
+
+ return intval($arr[$k]);
+ }
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ * @param float $default
+ *
+ * @return float
+ */
+ protected function getFloat(string $k, array $arr, float $default = 0): float {
+ if (!array_key_exists($k, $arr)) {
+ $subs = explode('.', $k, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ return $default;
+ }
+
+ $r = $arr[$subs[0]];
+ if (!is_array($r)) {
+ return $default;
+ }
+
+ return $this->getFloat($subs[1], $r, $default);
+ } else {
+ return $default;
+ }
+ }
+
+ if ($arr[$k] === null) {
+ return $default;
+ }
+
+ return intval($arr[$k]);
+ }
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ * @param bool $default
+ *
+ * @return bool
+ */
+ protected function getBool(string $k, array $arr, bool $default = false): bool {
+ if (!array_key_exists($k, $arr)) {
+ $subs = explode('.', $k, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ return $default;
+ }
+
+ return $this->getBool($subs[1], $arr[$subs[0]], $default);
+ } else {
+ return $default;
+ }
+ }
+
+ if ($arr[$k] === null) {
+ return $default;
+ }
+
+ if (is_bool($arr[$k])) {
+ return $arr[$k];
+ }
+
+ $sk = (string)$arr[$k];
+ if ($sk === '1' || strtolower($sk) === 'true') {
+ return true;
+ }
+
+ if ($sk === '0' || strtolower($sk) === 'false') {
+ return false;
+ }
+
+ return $default;
+ }
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ * @param JsonSerializable|null $default
+ *
+ * @return mixed
+ */
+ protected function getObj(string $k, array $arr, ?JsonSerializable $default = null): ?JsonSerializable {
+ if (!array_key_exists($k, $arr)) {
+ $subs = explode('.', $k, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ return $default;
+ }
+
+ return $this->getObj($subs[1], $arr[$subs[0]], $default);
+ } else {
+ return $default;
+ }
+ }
+
+ return $arr[$k];
+ }
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ * @param array $default
+ *
+ * @return array
+ */
+ protected function getArray(string $k, array $arr, array $default = []): array {
+ if (!array_key_exists($k, $arr)) {
+ $subs = explode('.', $k, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ return $default;
+ }
+
+ $r = $arr[$subs[0]];
+ if (!is_array($r)) {
+ return $default;
+ }
+
+ return $this->getArray($subs[1], $r, $default);
+ } else {
+ return $default;
+ }
+ }
+
+ $r = $arr[$k];
+ if (!is_array($r) && !is_string($r)) {
+ return $default;
+ }
+
+ if (is_string($r)) {
+ $r = json_decode($r, true);
+ }
+
+ if (!is_array($r)) {
+ return $default;
+ }
+
+ return $r;
+ }
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ *
+ * @return bool
+ */
+ public function validKey(string $k, array $arr): bool {
+ if (array_key_exists($k, $arr)) {
+ return true;
+ }
+
+ $subs = explode('.', $k, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ return false;
+ }
+
+ $r = $arr[$subs[0]];
+ if (!is_array($r)) {
+ return false;
+ }
+
+ return $this->validKey($subs[1], $r);
+ }
+
+ return false;
+ }
+
+
+ /**
+ * @param string $k
+ * @param array $arr
+ * @param array $import
+ * @param array $default
+ *
+ * @return array
+ */
+ protected function getList(string $k, array $arr, array $import, array $default = []): array {
+ $list = $this->getArray($k, $arr, $default);
+
+ $r = [];
+ [$obj, $method] = $import;
+ foreach ($list as $item) {
+ try {
+ $o = new $obj();
+ $o->$method($item);
+
+ $r[] = $o;
+ } catch (Exception $e) {
+ }
+ }
+
+ return $r;
+ }
+
+
+ /**
+ * @param string $k
+ * @param string $value
+ * @param array $list
+ *
+ * @return mixed
+ * @throws ArrayNotFoundException
+ */
+ protected function extractArray(string $k, string $value, array $list) {
+ foreach ($list as $arr) {
+ if (!array_key_exists($k, $arr)) {
+ continue;
+ }
+
+ if ($arr[$k] === $value) {
+ return $arr;
+ }
+ }
+
+ throw new ArrayNotFoundException();
+ }
+
+
+ /**
+ * @param string $key
+ * @param array $arr
+ * @param bool $root
+ *
+ * @return string
+ * @throws ItemNotFoundException
+ * @throws UnknownTypeException
+ */
+ public function typeOf(string $key, array $arr, bool $root = true): string {
+ if (array_key_exists($key, $arr)) {
+ $item = $arr[$key];
+
+ if (is_null($item)) {
+ return self::$TYPE_NULL;
+ }
+
+ if (is_string($item)) {
+ return self::$TYPE_STRING;
+ }
+
+ if (is_array($item)) {
+ return self::$TYPE_ARRAY;
+ }
+
+ if (is_bool($item)) {
+ return self::$TYPE_BOOLEAN;
+ }
+
+ if (is_int($item)) {
+ return self::$TYPE_INTEGER;
+ }
+
+ if ($item instanceof JsonSerializable) {
+ return self::$TYPE_SERIALIZABLE;
+ }
+
+ throw new UnknownTypeException();
+ }
+
+ $subs = explode('.', $key, 2);
+ if (sizeof($subs) > 1) {
+ if (!array_key_exists($subs[0], $arr)) {
+ throw new ItemNotFoundException();
+ }
+
+ $r = $arr[$subs[0]];
+ if (is_array($r)) {
+ return $this->typeOf($subs[1], $r);
+ }
+ }
+
+ throw new ItemNotFoundException();
+ }
+
+
+ /**
+ * @param array $keys
+ * @param array $arr
+ *
+ * @throws MalformedArrayException
+ */
+ protected function mustContains(array $keys, array $arr) {
+ foreach ($keys as $key) {
+ if (!array_key_exists($key, $arr)) {
+ throw new MalformedArrayException(
+ 'source: ' . json_encode($arr) . ' - missing key: ' . $key
+ );
+ }
+ }
+ }
+
+
+ /**
+ * @param array $arr
+ */
+ protected function cleanArray(array &$arr) {
+ $arr = array_filter(
+ $arr,
+ function ($v) {
+ if (is_string($v)) {
+ return ($v !== '');
+ }
+ if (is_array($v)) {
+ return !empty($v);
+ }
+
+ return true;
+ }
+ );
+ }
+}
diff --git a/server/lib/Tools/Traits/TDebug.php b/server/lib/Tools/Traits/TDebug.php
new file mode 100644
index 0000000..73c9d12
--- /dev/null
+++ b/server/lib/Tools/Traits/TDebug.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace LookupServer\Tools\Traits;
+
+
+trait TDebug {
+
+ public function debug(string $line) {
+ // this is ugly, but at least we have some debug somewhere
+ @file_put_contents(__DIR__ . '/../../debug.log', $line . "\n", FILE_APPEND);
+ }
+
+}
diff --git a/server/lib/UserManager.php b/server/lib/UserManager.php
index 6b127b8..d08212f 100644
--- a/server/lib/UserManager.php
+++ b/server/lib/UserManager.php
@@ -2,42 +2,34 @@
namespace LookupServer;
+use Exception;
+use GuzzleHttp\Exception\GuzzleException;
+use LookupServer\Tools\Traits\TArrayTools;
+use LookupServer\Tools\Traits\TDebug;
use LookupServer\Validator\Email;
use LookupServer\Validator\Twitter;
use LookupServer\Validator\Website;
+use PDO;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class UserManager {
-
- /** @var \PDO */
- private $db;
-
- /** @var Email */
- private $emailValidator;
-
- /** @var Website */
- private $websiteValidator;
-
- /** @var Twitter */
- private $twitterValidator;
-
- /** @var SignatureHandler */
- private $signatureHandler;
-
- /** @var int try max. 10 times to verify a account */
- private $maxVerifyTries = 10;
-
- /** @var bool */
- private $globalScaleMode;
-
- /** @var string */
- private $authKey;
+ use TDebug;
+ use TArrayTools;
+
+ private PDO $db;
+ private Email $emailValidator;
+ private Website $websiteValidator;
+ private Twitter $twitterValidator;
+ private SignatureHandler $signatureHandler;
+ private int $maxVerifyTries = 10;
+ private bool $globalScaleMode;
+ private string $authKey;
/**
* UserManager constructor.
*
- * @param \PDO $db
+ * @param PDO $db
* @param Email $emailValidator
* @param Website $websiteValidator
* @param Twitter $twitterValidator
@@ -45,13 +37,15 @@ class UserManager {
* @param bool $globalScaleMode
* @param string $authKey
*/
- public function __construct(\PDO $db,
- Email $emailValidator,
- Website $websiteValidator,
- Twitter $twitterValidator,
- SignatureHandler $signatureHandler,
- $globalScaleMode,
- $authKey) {
+ public function __construct(
+ PDO $db,
+ Email $emailValidator,
+ Website $websiteValidator,
+ Twitter $twitterValidator,
+ SignatureHandler $signatureHandler,
+ bool $globalScaleMode,
+ string $authKey
+ ) {
$this->db = $db;
$this->emailValidator = $emailValidator;
$this->websiteValidator = $websiteValidator;
@@ -61,31 +55,45 @@ class UserManager {
$this->authKey = $authKey;
}
+
+ /**
+ * @param string $input
+ *
+ * @return string
+ */
private function escapeWildcard(string $input): string {
//Escape %
$output = str_replace('%', '\%', $input);
- $output = str_replace('_', '\_', $output);
- return $output;
+
+ return str_replace('_', '\_', $output);
}
- public function search(Request $request, Response $response) {
+
+ /**
+ * @param Request $request
+ * @param Response $response
+ * @param array $args
+ *
+ * @return Response
+ */
+ public function search(Request $request, Response $response, array $args = []): Response {
$params = $request->getQueryParams();
- if (!isset($params['search']) || $params['search'] === '') {
+ if ($this->get('search', $params) === '') {
return $response->withStatus(404);
}
- $search = $params['search'];
+ $search = (string)$params['search'];
// search for a specific federated cloud ID
- $searchCloudId = isset($params['exactCloudId']) ? $params['exactCloudId'] === '1' : '0';
+ $searchCloudId = $this->getBool('exactCloudId', $params);
// return unique exact match, e.g. the user with a specific email address
- $exactMatch = isset($params['exact']) ? $params['exact'] === '1' : false;
+ $exactMatch = $this->getBool('exact', $params);
// parameters allow you to specify which keys should be checked for a search query
// by default we check all keys, this way you can for example search for email addresses only
$parameters = [];
if ($exactMatch === true) {
- $keys = isset($params['keys']) ? $params['keys'] : '{}';
+ $keys = $this->get('keys', $params, '{}');
$keysDecoded = json_decode($keys, false, 2);
if (is_array($keysDecoded)) {
$parameters = $keysDecoded;
@@ -105,16 +113,16 @@ class UserManager {
}
// if we look for a exact match we return only this one result, not a list of one element
- if($exactMatch && !empty($users)) {
+ if ($exactMatch && !empty($users)) {
$users = $users[0];
}
$response->getBody()->write(json_encode($users));
+
return $response;
}
-
/**
* search user, for example to share with them
* return all results with karma >= 1
@@ -123,9 +131,15 @@ class UserManager {
* @param bool $exactMatch
* @param array $parameters
* @param int $minKarma
+ *
* @return array
*/
- private function performSearch($search, $exactMatch, $parameters, $minKarma) {
+ private function performSearch(
+ string $search,
+ bool $exactMatch,
+ array $parameters,
+ int $minKarma
+ ): array {
$operator = $exactMatch ? ' = ' : ' LIKE ';
$limit = $exactMatch ? 1 : 50;
@@ -142,31 +156,34 @@ class UserManager {
$constraint .= ')';
}
- $stmt = $this->db->prepare('SELECT *
+ $stmt = $this->db->prepare(
+ 'SELECT *
FROM (
SELECT userId AS userId, SUM(valid) AS karma
FROM `store`
WHERE userId IN (
SELECT DISTINCT userId
FROM `store`
- WHERE v ' . $operator . ' :search ' . $constraint .'
+ WHERE v ' . $operator . ' :search ' . $constraint . '
)
GROUP BY userId
) AS tmp
WHERE karma >= :karma
ORDER BY karma
-LIMIT :limit');
+LIMIT :limit'
+ );
- $stmt->bindParam(':karma', $minKarma, \PDO::PARAM_INT);
- $stmt->bindParam(':limit', $limit, \PDO::PARAM_INT);
+ $stmt->bindParam(':karma', $minKarma, PDO::PARAM_INT);
+ $stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$search = $exactMatch ? $search : '%' . $this->escapeWildcard($search) . '%';
- $stmt->bindParam('search', $search, \PDO::PARAM_STR);
+ $stmt->bindParam('search', $search, PDO::PARAM_STR);
// bind parameters
foreach ($parameters as $parameter) {
$i = 0;
- $stmt->bindParam(':key'.$i, $this->db->quote($parameter));
+ $q = $this->db->quote($parameter);
+ $stmt->bindParam(':key' . $i, $q);
}
$stmt->execute();
@@ -176,7 +193,7 @@ LIMIT :limit');
*/
$users = [];
- while($data = $stmt->fetch()) {
+ while ($data = $stmt->fetch()) {
$users[] = $this->getForUserId((int)$data['userId']);
}
$stmt->closeCursor();
@@ -185,7 +202,7 @@ LIMIT :limit');
}
- private function getExactCloudId($cloudId) {
+ private function getExactCloudId(string $cloudId): array {
$stmt = $this->db->prepare('SELECT id FROM users WHERE federationId = :id');
$stmt->bindParam(':id', $cloudId);
$stmt->execute();
@@ -196,12 +213,17 @@ LIMIT :limit');
}
return $this->getForUserId((int)$data['id']);
-
}
- private function getForUserId($userId) {
+
+ /**
+ * @param int $userId
+ *
+ * @return array
+ */
+ private function getForUserId(int $userId): array {
$stmt = $this->db->prepare('SELECT * FROM users WHERE id = :id');
- $stmt->bindParam(':id', $userId, \PDO::PARAM_INT);
+ $stmt->bindParam(':id', $userId, PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetch();
$stmt->closeCursor();
@@ -215,10 +237,10 @@ LIMIT :limit');
];
$stmt = $this->db->prepare('SELECT * FROM store WHERE userId = :id');
- $stmt->bindParam(':id', $userId, \PDO::PARAM_INT);
+ $stmt->bindParam(':id', $userId, PDO::PARAM_INT);
$stmt->execute();
- while($data = $stmt->fetch()) {
+ while ($data = $stmt->fetch()) {
$result[$data['k']] = [
'value' => $data['v'],
'verified' => $data['valid']
@@ -226,6 +248,7 @@ LIMIT :limit');
}
$stmt->closeCursor();
+
return $result;
}
@@ -234,15 +257,20 @@ LIMIT :limit');
* @param string[] $data
* @param int $timestamp
*/
- private function insert($cloudId, $data, $timestamp) {
- $stmt = $this->db->prepare('INSERT INTO users (federationId, timestamp) VALUES (:federationId, FROM_UNIXTIME(:timestamp))');
- $stmt->bindParam(':federationId', $cloudId, \PDO::PARAM_STR);
- $stmt->bindParam(':timestamp', $timestamp, \PDO::PARAM_INT);
+ private function insert(string $cloudId, array $data, int $timestamp): void {
+ $stmt = $this->db->prepare(
+ 'INSERT INTO users (federationId, timestamp) VALUES (:federationId, FROM_UNIXTIME(:timestamp))'
+ );
+ $stmt->bindParam(':federationId', $cloudId, PDO::PARAM_STR);
+ $stmt->bindParam(':timestamp', $timestamp, PDO::PARAM_INT);
$stmt->execute();
$id = $this->db->lastInsertId();
$stmt->closeCursor();
- $fields = ['name', 'email', 'address', 'website', 'twitter', 'phone', 'twitter_signature', 'website_signature', 'userid'];
+ $fields = [
+ 'name', 'email', 'address', 'website', 'twitter', 'phone', 'twitter_signature',
+ 'website_signature', 'userid'
+ ];
foreach ($fields as $field) {
if (!isset($data[$field]) || $data[$field] === '') {
@@ -250,9 +278,9 @@ LIMIT :limit');
}
$stmt = $this->db->prepare('INSERT INTO store (userId, k, v) VALUES (:userId, :k, :v)');
- $stmt->bindParam(':userId', $id, \PDO::PARAM_INT);
- $stmt->bindParam(':k', $field, \PDO::PARAM_STR);
- $stmt->bindParam(':v', $data[$field], \PDO::PARAM_STR);
+ $stmt->bindParam(':userId', $id, PDO::PARAM_INT);
+ $stmt->bindParam(':k', $field, PDO::PARAM_STR);
+ $stmt->bindParam(':v', $data[$field], PDO::PARAM_STR);
$stmt->execute();
$storeId = $this->db->lastInsertId();
$stmt->closeCursor();
@@ -268,16 +296,19 @@ LIMIT :limit');
* @param string[] $data
* @param int $timestamp
*/
- private function update($id, $data, $timestamp) {
+ private function update(int $id, array $data, int $timestamp): void {
$stmt = $this->db->prepare('UPDATE users SET timestamp = FROM_UNIXTIME(:timestamp) WHERE id = :id');
- $stmt->bindParam(':id', $id, \PDO::PARAM_STR);
- $stmt->bindParam(':timestamp', $timestamp, \PDO::PARAM_INT);
+ $stmt->bindParam(':id', $id, PDO::PARAM_STR);
+ $stmt->bindParam(':timestamp', $timestamp, PDO::PARAM_INT);
$stmt->execute();
$stmt->closeCursor();
- $fields = ['name', 'email', 'address', 'website', 'twitter', 'phone', 'twitter_signature', 'website_signature', 'userid'];
+ $fields = [
+ 'name', 'email', 'address', 'website', 'twitter', 'phone', 'twitter_signature',
+ 'website_signature', 'userid'
+ ];
$stmt = $this->db->prepare('SELECT * FROM store WHERE userId = :userId');
- $stmt->bindParam(':userId', $id, \PDO::PARAM_INT);
+ $stmt->bindParam(':userId', $id, PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll();
$stmt->closeCursor();
@@ -288,14 +319,12 @@ LIMIT :limit');
unset($fields[$loc]);
}
- if (!isset($data[$key]) || $data[$key] === '') {
+ if ($this->get($key, $data) === '') {
// key not present in new data so delete
$stmt = $this->db->prepare('DELETE FROM store WHERE id = :id');
$stmt->bindParam(':id', $row['id']);
$stmt->execute();
$stmt->closeCursor();
- // remove verification request if correspondig data was deleted
- $this->removeOpenVerificationRequestByStoreId($row['id']);
} else {
// Key present check if we need to update
if ($data[$key] === $value) {
@@ -310,23 +339,24 @@ LIMIT :limit');
if ($key === 'email') {
$this->emailValidator->emailUpdated($data[$key], $row['id']);
}
- // remove verification request from old data
- $this->removeOpenVerificationRequestByStoreId($row['id']);
}
+
+ // remove verification request if correspondig data was deleted
+ $this->removeOpenVerificationRequestByStoreId($row['id']);
}
//Check for new fields
foreach ($fields as $field) {
// Not set or empty field
- if (!isset($data[$field]) || $data[$field] === '') {
+ if ($this->get($field, $data) === '') {
continue;
}
// Insert
$stmt = $this->db->prepare('INSERT INTO store (userId, k, v) VALUES (:userId, :k, :v)');
- $stmt->bindParam(':userId', $id, \PDO::PARAM_INT);
- $stmt->bindParam(':k', $field, \PDO::PARAM_STR);
- $stmt->bindParam(':v', $data[$field], \PDO::PARAM_STR);
+ $stmt->bindParam(':userId', $id, PDO::PARAM_INT);
+ $stmt->bindParam(':k', $field, PDO::PARAM_STR);
+ $stmt->bindParam(':v', $data[$field], PDO::PARAM_STR);
$stmt->execute();
$storeId = $this->db->lastInsertId();
$stmt->closeCursor();
@@ -337,31 +367,43 @@ LIMIT :limit');
}
}
- private function needToVerify($userId, $storeId, $data, $key) {
+
+ /**
+ * @param string $userId
+ * @param int $storeId
+ * @param array $data
+ * @param string $key
+ */
+ private function needToVerify(string $userId, int $storeId, array $data, string $key): void {
$stmt = $this->db->prepare('SELECT * FROM toVerify WHERE storeId = :storeId');
- $stmt->bindParam(':storeId', $storeId, \PDO::PARAM_INT);
+ $stmt->bindParam(':storeId', $storeId, PDO::PARAM_INT);
$stmt->execute();
$alreadyExists = $stmt->fetch();
- if ($alreadyExists === false && isset($data['verificationStatus'][$key]) && $data['verificationStatus'][$key] === '1') {
+ if ($alreadyExists === false && isset($data['verificationStatus'][$key])
+ && $data['verificationStatus'][$key] === '1') {
$tries = 0;
- $stmt = $this->db->prepare('INSERT INTO toVerify (userId, storeId, property, location, tries) VALUES (:userId, :storeId, :property, :location, :tries)');
- $stmt->bindParam(':userId', $userId, \PDO::PARAM_INT);
- $stmt->bindParam(':storeId', $storeId, \PDO::PARAM_INT);
+ $stmt = $this->db->prepare(
+ 'INSERT INTO toVerify (userId, storeId, property, location, tries) VALUES (:userId, :storeId, :property, :location, :tries)'
+ );
+ $stmt->bindParam(':userId', $userId, PDO::PARAM_INT);
+ $stmt->bindParam(':storeId', $storeId, PDO::PARAM_INT);
$stmt->bindParam(':property', $key);
$stmt->bindParam(':location', $data[$key]);
- $stmt->bindParam(':tries', $tries, \PDO::PARAM_INT);
+ $stmt->bindParam(':tries', $tries, PDO::PARAM_INT);
$stmt->execute();
$stmt->closeCursor();
}
}
- public function register(Request $request, Response $response) {
+
+ public function register(Request $request, Response $response, array $args = []): Response {
$body = json_decode($request->getBody(), true);
- if ($body === null || !isset($body['message']) || !isset($body['message']['data']) ||
- !isset($body['message']['data']['federationId']) || !isset($body['signature']) ||
- !isset($body['message']['timestamp'])) {
+ if ($body === null || !isset($body['message']) || !isset($body['message']['data'])
+ || !isset($body['message']['data']['federationId'])
+ || !isset($body['signature'])
+ || !isset($body['message']['timestamp'])) {
return $response->withStatus(400);
}
@@ -369,14 +411,15 @@ LIMIT :limit');
try {
$verified = $this->signatureHandler->verify($cloudId, $body['message'], $body['signature']);
- } catch(\Exception $e) {
+ } catch (Exception $e) {
return $response->withStatus(400);
}
if ($verified) {
- $result = $this->insertOrUpdate($cloudId, $body['message']['data'], $body['message']['timestamp']);
+ $result =
+ $this->insertOrUpdate($cloudId, $body['message']['data'], $body['message']['timestamp']);
if ($result === false) {
- return $response->withStatus(403);
+ return $response->withStatus(403);
}
} else {
// ERROR OUT
@@ -391,9 +434,11 @@ LIMIT :limit');
*
* @param Request $request
* @param Response $response
+ * @param array $args
+ *
* @return Response
*/
- public function batchRegister(Request $request, Response $response) {
+ public function batchRegister(Request $request, Response $response, array $args = []): Response {
$body = json_decode($request->getBody(), true);
@@ -418,9 +463,11 @@ LIMIT :limit');
*
* @param Request $request
* @param Response $response
+ * @param array $args
+ *
* @return Response
*/
- public function batchDelete(Request $request, Response $response) {
+ public function batchDelete(Request $request, Response $response, array $args = []): Response {
$body = json_decode($request->getBody(), true);
@@ -441,12 +488,21 @@ LIMIT :limit');
}
- public function delete(Request $request, Response $response) {
+ /**
+ * @param Request $request
+ * @param Response $response
+ * @param array $args
+ *
+ * @return Response
+ * @throws GuzzleException
+ */
+ public function delete(Request $request, Response $response, array $args = []): Response {
$body = json_decode($request->getBody(), true);
- if ($body === null || !isset($body['message']) || !isset($body['message']['data']) ||
- !isset($body['message']['data']['federationId']) || !isset($body['signature']) ||
- !isset($body['message']['timestamp'])) {
+ if ($body === null || !isset($body['message']) || !isset($body['message']['data'])
+ || !isset($body['message']['data']['federationId'])
+ || !isset($body['signature'])
+ || !isset($body['message']['timestamp'])) {
return $response->withStatus(400);
}
@@ -454,7 +510,7 @@ LIMIT :limit');
try {
$verified = $this->signatureHandler->verify($cloudId, $body['message'], $body['signature']);
- } catch(\Exception $e) {
+ } catch (Exception $e) {
return $response->withStatus(400);
}
@@ -472,7 +528,19 @@ LIMIT :limit');
return $response;
}
- public function verify(Request $request, Response $response) {
+
+ /**
+ * @param Request|null $request
+ * @param Response|null $response
+ * @param array $args
+ *
+ * @return Response|null
+ */
+ public function verify(
+ ?Request $request = null,
+ ?Response $response = null,
+ array $args = []
+ ): ?Response {
$verificationRequests = $this->getOpenVerificationRequests();
foreach ($verificationRequests as $verificationData) {
$success = false;
@@ -493,20 +561,23 @@ LIMIT :limit');
$this->incMaxTries($verificationData);
}
}
+
+ return $response;
}
/**
* increase number of max tries to verify account data
*
- * @param $verificationData
+ * @param array $verificationData
*/
- private function incMaxTries($verificationData) {
+ private function incMaxTries(array $verificationData): void {
$tries = (int)$verificationData['tries'];
$tries++;
// max number of tries reached, remove verification request and return
if ($tries > $this->maxVerifyTries) {
$this->removeOpenVerificationRequest($verificationData['id']);
+
return;
}
@@ -520,9 +591,9 @@ LIMIT :limit');
/**
* if data could be verified successfully we update the information in the store table
*
- * @param $storeId
+ * @param int $storeId
*/
- private function updateVerificationStatus($storeId) {
+ private function updateVerificationStatus(int $storeId): void {
$stmt = $this->db->prepare('UPDATE store SET valid = 1 WHERE id = :storeId');
$stmt->bindParam('storeId', $storeId);
$stmt->execute();
@@ -559,11 +630,12 @@ LIMIT :limit');
*
* @return array
*/
- private function getOpenVerificationRequests() {
+ private function getOpenVerificationRequests(): array {
$stmt = $this->db->prepare('SELECT * FROM toVerify LIMIT 10');
$stmt->execute();
$result = $stmt->fetchAll();
$stmt->closeCursor();
+
return $result;
}
@@ -571,9 +643,10 @@ LIMIT :limit');
* @param string $cloudId
* @param string[] $data
* @param int $timestamp
+ *
* @return bool
*/
- private function insertOrUpdate($cloudId, $data, $timestamp) {
+ private function insertOrUpdate(string $cloudId, array $data, int $timestamp): bool {
$stmt = $this->db->prepare('SELECT * FROM users WHERE federationId = :federationId');
$stmt->bindParam(':federationId', $cloudId);
$stmt->execute();
@@ -602,9 +675,10 @@ LIMIT :limit');
* federated cloud ID in order to propagate the changes
*
* @param string $cloudId
+ *
* @return bool
*/
- private function deleteDBRecord($cloudId) {
+ private function deleteDBRecord(string $cloudId): bool {
$stmt = $this->db->prepare('SELECT * FROM users WHERE federationId = :federationId');
$stmt->bindParam(':federationId', $cloudId);
diff --git a/server/lib/Validator/Email.php b/server/lib/Validator/Email.php
index b0e0c44..06c63c0 100644
--- a/server/lib/Validator/Email.php
+++ b/server/lib/Validator/Email.php
@@ -1,49 +1,77 @@
<?php
+declare(strict_types=1);
+
+
+/**
+ * lookup-server - Standalone Lookup Server.
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bjoern Schiessle <bjoern@schiessle.org>
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ *
+ * @copyright 2017
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
namespace LookupServer\Validator;
+use Exception;
+use PDO;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
+use Slim\Interfaces\RouteParserInterface;
+use Slim\Routing\Route;
class Email {
- /** @var \PDO */
- private $db;
-
- /** @var \Slim\Interfaces\RouterInterface */
- private $router;
-
- /** @var string */
- private $host;
-
- /** @var string */
- private $from;
+ private PDO $db;
+ private RouteParserInterface $routeParser;
+ private string $host;
+ private string $from;
+ private bool $globalScale;
- /** @var bool */
- private $globalScale;
/**
- * Email constructor.
- * @param \PDO $db
- * @param \Slim\Interfaces\RouterInterface $router
+ * @param PDO $db
+ * @param RouteParserInterface $routeParser
* @param string $host
* @param string $from
* @param bool $globalScale
*/
- public function __construct(\PDO $db,
- \Slim\Interfaces\RouterInterface $router,
- $host,
- $from,
- $globalScale) {
+ public function __construct(
+ PDO $db,
+ RouteParserInterface $routeParser,
+ string $host,
+ string $from,
+ bool $globalScale
+ ) {
$this->db = $db;
- $this->router = $router;
+ $this->routeParser = $routeParser;
$this->host = $host;
$this->from = $from;
$this->globalScale = $globalScale;
}
- public function validate(Request $request, Response $response) {
- /** @var $route \Slim\Route */
+ public function validate(Request $request, Response $response, array $args = []): Response {
+ /** @var Route $route */
$route = $request->getAttribute('route');
$token = $route->getArgument('token');
@@ -72,7 +100,7 @@ class Email {
return $response;
}
- public function emailUpdated($email, $storeId) {
+ public function emailUpdated(string $email, int $storeId): void {
if ($this->globalScale) {
// When in global scale mode we should not send e-mails
return;
@@ -95,23 +123,34 @@ class Email {
$stmt->closeCursor();
// Actually send e-mail
- $link = $this->host . $this->router->pathFor('validateEmail', ['token' => $token]);
+ $link = $this->host . $this->routeParser->urlFor('validateEmail', ['token' => $token]);
$text = 'Please click this link to confirm your e-mail address: ' . $link;
- $headers = 'From: '.$this->from."\r\n" .'X-Mailer: PHP/' . phpversion();
+ $headers = 'From: ' . $this->from . "\r\n" . 'X-Mailer: PHP/' . phpversion();
mail($email, 'Email confirmation', $text, $headers);
}
- private function generate($length,
- $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
+
+ /**
+ * @param int $length
+ * @param string $characters
+ *
+ * @return string
+ * @throws Exception
+ */
+ private function generate(
+ int $length,
+ string $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
+ ): string {
$maxCharIndex = strlen($characters) - 1;
$randomString = '';
- while($length > 0) {
- $randomNumber = \random_int(0, $maxCharIndex);
+ while ($length > 0) {
+ $randomNumber = random_int(0, $maxCharIndex);
$randomString .= $characters[$randomNumber];
$length--;
}
+
return $randomString;
}
}
diff --git a/server/lib/Validator/Twitter.php b/server/lib/Validator/Twitter.php
index 7cd3724..b86a661 100644
--- a/server/lib/Validator/Twitter.php
+++ b/server/lib/Validator/Twitter.php
@@ -1,7 +1,12 @@
<?php
+
+declare(strict_types=1);
+
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
@@ -24,27 +29,24 @@ namespace LookupServer\Validator;
use Abraham\TwitterOAuth\TwitterOAuth;
+use Exception;
use LookupServer\SignatureHandler;
+use PDO;
class Twitter {
- /** @var TwitterOAuth */
- private $twitterOAuth;
-
- /** @var SignatureHandler */
- private $signatureHandler;
-
- /** @var \PDO */
- private $db;
+ private TwitterOAuth $twitterOAuth;
+ private SignatureHandler $signatureHandler;
+ private PDO $db;
/**
* Twitter constructor.
*
* @param TwitterOAuth $twitterOAuth
* @param SignatureHandler $signatureHandler
- * @param \PDO $db
+ * @param PDO $db
*/
- public function __construct(TwitterOAuth $twitterOAuth, SignatureHandler $signatureHandler, \PDO $db) {
+ public function __construct(TwitterOAuth $twitterOAuth, SignatureHandler $signatureHandler, PDO $db) {
$this->twitterOAuth = $twitterOAuth;
$this->signatureHandler = $signatureHandler;
$this->db = $db;
@@ -55,9 +57,10 @@ class Twitter {
*
* @param array $verificationData from toVerify table
* @param array $userData stored user data
+ *
* @return bool
*/
- public function verify(array $verificationData, array $userData) {
+ public function verify(array $verificationData, array $userData): bool {
$twitterHandle = $verificationData['location'];
$isValid = $this->isValidTwitterHandle($twitterHandle);
$result = false;
@@ -76,8 +79,8 @@ class Twitter {
$result = $this->signatureHandler->verify($cloudId, $message, $signature);
$result = $result && md5($signature) === $md5signature;
}
- } catch (\Exception $e) {
- // do nothing, just return false;
+ } catch (Exception $e) {
+ return false;
}
if ($result === true) {
@@ -91,9 +94,10 @@ class Twitter {
* get tweet text and id
*
* @param string $userName user name without the '@'
+ *
* @return array
*/
- private function getTweet($userName) {
+ private function getTweet(string $userName): array {
try {
$search = 'from:' . $userName . ' Use my Federated Cloud ID to share with me';
@@ -101,7 +105,7 @@ class Twitter {
$id = $statuses->statuses[0]->id;
$text = $statuses->statuses[0]->text;
- } catch (\Exception $e) {
+ } catch (Exception $e) {
return [null, null];
}
@@ -111,11 +115,13 @@ class Twitter {
/**
* check if we have a correct twitter Handle
*
- * @param $twitterHandle
+ * @param string $twitterHandle
+ *
* @return bool
*/
- private function isValidTwitterHandle($twitterHandle) {
+ private function isValidTwitterHandle(string $twitterHandle): bool {
$result = preg_match('/^@[A-Za-z0-9_]+$/', $twitterHandle);
+
return $result === 1;
}
@@ -123,9 +129,10 @@ class Twitter {
* split message and signature
*
* @param string $proof
+ *
* @return array
*/
- private function splitMessageSignature($proof) {
+ private function splitMessageSignature(string $proof): array {
$signature = substr($proof, -32);
$message = substr($proof, 0, -32);
@@ -135,25 +142,25 @@ class Twitter {
/**
* store reference to tweet
*
- * @param $userId
- * @param $tweetId
+ * @param int $userId
+ * @param string $tweetId
*/
- private function storeReference($userId, $tweetId) {
+ private function storeReference(int $userId, string $tweetId) {
$key = 'tweet_id';
// delete old value, if exists
$stmt = $this->db->prepare('DELETE FROM store WHERE userId = :userId AND k = :k');
- $stmt->bindParam(':userId', $userId, \PDO::PARAM_INT);
- $stmt->bindParam(':k', $key, \PDO::PARAM_STR);
+ $stmt->bindParam(':userId', $userId, PDO::PARAM_INT);
+ $stmt->bindParam(':k', $key, PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
// add new value
$stmt = $this->db->prepare('INSERT INTO store (userId, k, v) VALUES (:userId, :k, :v)');
- $stmt->bindParam(':userId', $userId, \PDO::PARAM_INT);
- $stmt->bindParam(':k', $key, \PDO::PARAM_STR);
- $stmt->bindParam(':v', $tweetId, \PDO::PARAM_STR);
+ $stmt->bindParam(':userId', $userId, PDO::PARAM_INT);
+ $stmt->bindParam(':k', $key, PDO::PARAM_STR);
+ $stmt->bindParam(':v', $tweetId, PDO::PARAM_STR);
$stmt->execute();
$stmt->closeCursor();
}
diff --git a/server/lib/Validator/Website.php b/server/lib/Validator/Website.php
index e43bfb0..0fa904f 100644
--- a/server/lib/Validator/Website.php
+++ b/server/lib/Validator/Website.php
@@ -1,7 +1,12 @@
<?php
+
+declare(strict_types=1);
+
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
+ * @author Maxence Lange <maxence@artificial-owl.com>
+ *
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
@@ -23,12 +28,12 @@
namespace LookupServer\Validator;
+use Exception;
use LookupServer\SignatureHandler;
class Website {
- /** @var SignatureHandler */
- private $signatureHandler;
+ private SignatureHandler $signatureHandler;
public function __construct(SignatureHandler $signatureHandler) {
$this->signatureHandler = $signatureHandler;
@@ -39,9 +44,10 @@ class Website {
*
* @param array $verificationData from toVerify table
* @param array $userData stored user data
+ *
* @return bool
*/
- public function verify($verificationData, $userData) {
+ public function verify(array $verificationData, array $userData): bool {
$url = $this->getValidUrl($verificationData['location']);
$proof = @file_get_contents($url);
$result = false;
@@ -52,7 +58,7 @@ class Website {
list($message, $signature) = $this->splitMessageSignature($proofSanitized);
$result = $this->signatureHandler->verify($cloudId, $message, $signature);
}
- } catch (\Exception $e) {
+ } catch (Exception $e) {
// do nothing, just return false
}
@@ -63,9 +69,10 @@ class Website {
* construct valid URL to proof
*
* @param string $url
+ *
* @return string
*/
- private function getValidUrl($url) {
+ private function getValidUrl(string $url): string {
$url = trim($url);
$url = rtrim($url, '/');
if (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) {
@@ -79,9 +86,10 @@ class Website {
* split message and signature
*
* @param string $proof
+ *
* @return array
*/
- private function splitMessageSignature($proof) {
+ private function splitMessageSignature(string $proof): array {
$signature = substr($proof, -344);
$message = substr($proof, 0, -344);
diff --git a/server/replicationcron.php b/server/replicationcron.php
index 5b1555c..96d95d7 100755
--- a/server/replicationcron.php
+++ b/server/replicationcron.php
@@ -1,19 +1,20 @@
<?php
+use LookupServer\Replication;
+
require __DIR__ . '/vendor/autoload.php';
if (PHP_SAPI !== 'cli') {
return;
}
-$env = \Slim\Http\Environment::mock(['REQUEST_URI' => '/import']);
-$settings = require __DIR__ . '/src/config.php';
-$settings['environment'] = $env;
-$container = new \Slim\Container($settings);
-require __DIR__ . '/src/dependencies.php';
+require __DIR__ . '/init.php';
-$app = new \Slim\App($container);
+if (!isset($app) || !isset($container)) {
+ return;
+}
-$app->map(['GET'], '/import', 'Replication:import');
-$app->run();
+/** @var Replication $replication */
+$replication = $container->get('Replication');
+$replication->import();
diff --git a/server/src/dependencies.php b/server/src/dependencies.php
deleted file mode 100644
index 4716a45..0000000
--- a/server/src/dependencies.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-$container['db'] = function($c) {
- $db = $c['settings']['db'];
- $pdo = new PDO("mysql:host=" . $db['host'] . ";dbname=" . $db['dbname'],
- $db['user'], $db['pass']);
- $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
- return $pdo;
-};
-$container['UserManager'] = function($c) {
- return new \LookupServer\UserManager($c->db, $c->EmailValidator, $c->WebsiteValidator, $c->TwitterValidator, $c->SignatureHandler, $c['settings']['global_scale'], $c['settings']['auth_key']);
-};
-$container['SignatureHandler'] = function($c) {
- return new \LookupServer\SignatureHandler();
-};
-$container['TwitterOAuth'] = function($c) {
- $twitterConf = $c['settings']['twitter'];
- return new \Abraham\TwitterOAuth\TwitterOAuth(
- $twitterConf['consumer_key'],
- $twitterConf['consumer_secret'],
- $twitterConf['access_token'],
- $twitterConf['access_token_secret']
- );
-};
-
-$container['EmailValidator'] = function($c) {
- return new \LookupServer\Validator\Email(
- $c->db,
- $c->router,
- $c->settings['host'],
- $c->settings['emailfrom'],
- $c['settings']['global_scale']
- );
-};
-$container['WebsiteValidator'] = function($c) {
- return new \LookupServer\Validator\Website($c->SignatureHandler);
-};
-$container['TwitterValidator'] = function($c) {
- return new \LookupServer\Validator\Twitter($c->TwitterOAuth, $c->SignatureHandler, $c->db);
-};
-$container['Status'] = function($c) {
- return new \LookupServer\Status();
-};
-$container['Replication'] = function ($c) {
- return new \LookupServer\Replication($c->db, $c->settings['replication_auth'], $c->settings['replication_hosts']);
-};
diff --git a/server/vendor/abraham/twitteroauth/.gitignore b/server/vendor/abraham/twitteroauth/.gitignore
deleted file mode 100644
index 8213dad..0000000
--- a/server/vendor/abraham/twitteroauth/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.DS_Store
-composer.lock
-vendor
-env
diff --git a/server/vendor/abraham/twitteroauth/.travis.yml b/server/vendor/abraham/twitteroauth/.travis.yml
deleted file mode 100644
index 196b6e3..0000000
--- a/server/vendor/abraham/twitteroauth/.travis.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-language: php
-php:
- - '5.6'
- - '7.0'
- - '7.1'
- - hhvm
-sudo: false
-before_script:
- - composer self-update
- - composer install --prefer-source --no-interaction
-script: phpunit
diff --git a/server/vendor/abraham/twitteroauth/LICENSE.md b/server/vendor/abraham/twitteroauth/LICENSE.md
deleted file mode 100644
index 64e83a1..0000000
--- a/server/vendor/abraham/twitteroauth/LICENSE.md
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@abrah.am
-
-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/server/vendor/abraham/twitteroauth/README.md b/server/vendor/abraham/twitteroauth/README.md
deleted file mode 100644
index cc40341..0000000
--- a/server/vendor/abraham/twitteroauth/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-<span itemprop="name">TwitterOAuth</span> [![Build Status](https://img.shields.io/travis/abraham/twitteroauth.svg)](https://travis-ci.org/abraham/twitteroauth) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/abraham/twitteroauth/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/abraham/twitteroauth/?branch=master) [![Issues Count](https://img.shields.io/github/issues/abraham/twitteroauth.svg)](https://github.com/abraham/twitteroauth/issues) [![Latest Version](https://img.shields.io/packagist/v/abraham/twitteroauth.svg)](https://packagist.org/packages/abraham/twitteroauth)
-------------
-
-<p itemprop="description">The most popular PHP library for Twitter's OAuth REST API.</p>
-
-See documentation at https://twitteroauth.com.
-
-PHP versions [listed](https://secure.php.net/supported-versions.php) as "active support" or "security fixes only" are supported.
-
-<img src="https://raw.githubusercontent.com/abraham/twitteroauth-demo/master/images/twitter-logo-blue.png" itemprop="image" alt="Twitter bird" width="200px">
diff --git a/server/vendor/abraham/twitteroauth/autoload.php b/server/vendor/abraham/twitteroauth/autoload.php
deleted file mode 100644
index cff03e8..0000000
--- a/server/vendor/abraham/twitteroauth/autoload.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * Use to autoload needed classes without Composer.
- *
- * @param string $class The fully-qualified class name.
- * @return void
- */
-spl_autoload_register(function ($class) {
-
- // project-specific namespace prefix
- $prefix = 'Abraham\\TwitterOAuth\\';
-
- // base directory for the namespace prefix
- $base_dir = __DIR__ . '/src/';
-
- // does the class use the namespace prefix?
- $len = strlen($prefix);
- if (strncmp($prefix, $class, $len) !== 0) {
- // no, move to the next registered autoloader
- return;
- }
-
- // get the relative class name
- $relative_class = substr($class, $len);
-
- // replace the namespace prefix with the base directory, replace namespace
- // separators with directory separators in the relative class name, append
- // with .php
- $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
-
- // if the file exists, require it
- if (file_exists($file)) {
- require $file;
- }
-});
diff --git a/server/vendor/abraham/twitteroauth/composer.json b/server/vendor/abraham/twitteroauth/composer.json
deleted file mode 100644
index 7a6600f..0000000
--- a/server/vendor/abraham/twitteroauth/composer.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "abraham/twitteroauth",
- "type": "library",
- "description": "The most popular PHP library for use with the Twitter OAuth REST API.",
- "keywords": ["twitter", "api", "oauth", "rest", "social", "twitter api", "twitter oauth"],
- "license": "MIT",
- "homepage": "https://twitteroauth.com",
- "authors": [
- {
- "name": "Abraham Williams",
- "email": "abraham@abrah.am",
- "homepage": "https://abrah.am",
- "role": "Developer"
- }
- ],
- "support": {
- "source": "https://github.com/abraham/twitteroauth",
- "issues": "https://github.com/abraham/twitteroauth/issues"
- },
- "require": {
- "php": "^5.6 || ^7.0",
- "ext-curl": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "~5.6",
- "squizlabs/php_codesniffer": "~2.7",
- "phpmd/phpmd": "~2.4"
- },
- "autoload": {
- "psr-4": {
- "Abraham\\TwitterOAuth\\": "src"
- }
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/phpmd.xml b/server/vendor/abraham/twitteroauth/phpmd.xml
deleted file mode 100644
index ef45e75..0000000
--- a/server/vendor/abraham/twitteroauth/phpmd.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0"?>
-<ruleset name="My first PHPMD rule set"
- xmlns="http://pmd.sf.net/ruleset/1.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
- xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
- <description>Keep TwitterOAuth source code clean.</description>
-
- <!-- <rule ref="rulesets/cleancode.xml" /> -->
- <rule ref="rulesets/codesize.xml" />
- <rule ref="rulesets/controversial.xml" />
- <rule ref="rulesets/design.xml" />
- <rule ref="rulesets/naming.xml" />
- <rule ref="rulesets/unusedcode.xml" />
-</ruleset>
diff --git a/server/vendor/abraham/twitteroauth/phpunit.xml b/server/vendor/abraham/twitteroauth/phpunit.xml
deleted file mode 100644
index 71cc3e1..0000000
--- a/server/vendor/abraham/twitteroauth/phpunit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit
- colors="true"
- bootstrap="tests/bootstrap.php">
-
- <testsuites>
- <testsuite name="TwitterOAuth Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
-</phpunit>
diff --git a/server/vendor/abraham/twitteroauth/src/Config.php b/server/vendor/abraham/twitteroauth/src/Config.php
deleted file mode 100644
index ac0657f..0000000
--- a/server/vendor/abraham/twitteroauth/src/Config.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth;
-
-/**
- * Handle setting and storing config for TwitterOAuth.
- *
- * @author Abraham Williams <abraham@abrah.am>
- */
-class Config
-{
- /** @var int How long to wait for a response from the API */
- protected $timeout = 5;
- /** @var int how long to wait while connecting to the API */
- protected $connectionTimeout = 5;
- /**
- * Decode JSON Response as associative Array
- *
- * @see http://php.net/manual/en/function.json-decode.php
- *
- * @var bool
- */
- protected $decodeJsonAsArray = false;
- /** @var string User-Agent header */
- protected $userAgent = 'TwitterOAuth (+https://twitteroauth.com)';
- /** @var array Store proxy connection details */
- protected $proxy = [];
-
- /** @var bool Whether to encode the curl requests with gzip or not */
- protected $gzipEncoding = true;
-
- /**
- * Set the connection and response timeouts.
- *
- * @param int $connectionTimeout
- * @param int $timeout
- */
- public function setTimeouts($connectionTimeout, $timeout)
- {
- $this->connectionTimeout = (int)$connectionTimeout;
- $this->timeout = (int)$timeout;
- }
-
- /**
- * @param bool $value
- */
- public function setDecodeJsonAsArray($value)
- {
- $this->decodeJsonAsArray = (bool)$value;
- }
-
- /**
- * @param string $userAgent
- */
- public function setUserAgent($userAgent)
- {
- $this->userAgent = (string)$userAgent;
- }
-
- /**
- * @param array $proxy
- */
- public function setProxy(array $proxy)
- {
- $this->proxy = $proxy;
- }
-
- /**
- * Whether to encode the curl requests with gzip or not.
- *
- * @param boolean $gzipEncoding
- */
- public function setGzipEncoding($gzipEncoding)
- {
- $this->gzipEncoding = (bool)$gzipEncoding;
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/Consumer.php b/server/vendor/abraham/twitteroauth/src/Consumer.php
deleted file mode 100644
index ceaf1ef..0000000
--- a/server/vendor/abraham/twitteroauth/src/Consumer.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-/**
- * The MIT License
- * Copyright (c) 2007 Andy Smith
- */
-namespace Abraham\TwitterOAuth;
-
-class Consumer
-{
- /** @var string */
- public $key;
- /** @var string */
- public $secret;
- /** @var string|null */
- public $callbackUrl;
-
- /**
- * @param string $key
- * @param string $secret
- * @param null $callbackUrl
- */
- public function __construct($key, $secret, $callbackUrl = null)
- {
- $this->key = $key;
- $this->secret = $secret;
- $this->callbackUrl = $callbackUrl;
- }
-
- /**
- * @return string
- */
- public function __toString()
- {
- return "Consumer[key=$this->key,secret=$this->secret]";
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/HmacSha1.php b/server/vendor/abraham/twitteroauth/src/HmacSha1.php
deleted file mode 100644
index d8cdab8..0000000
--- a/server/vendor/abraham/twitteroauth/src/HmacSha1.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * The MIT License
- * Copyright (c) 2007 Andy Smith
- */
-namespace Abraham\TwitterOAuth;
-
-/**
- * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
- * where the Signature Base String is the text and the key is the concatenated values (each first
- * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
- * character (ASCII code 38) even if empty.
- * - Chapter 9.2 ("HMAC-SHA1")
- */
-class HmacSha1 extends SignatureMethod
-{
- /**
- * {@inheritDoc}
- */
- public function getName()
- {
- return "HMAC-SHA1";
- }
-
- /**
- * {@inheritDoc}
- */
- public function buildSignature(Request $request, Consumer $consumer, Token $token = null)
- {
- $signatureBase = $request->getSignatureBaseString();
-
- $parts = [$consumer->secret, null !== $token ? $token->secret : ""];
-
- $parts = Util::urlencodeRfc3986($parts);
- $key = implode('&', $parts);
-
- return base64_encode(hash_hmac('sha1', $signatureBase, $key, true));
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/Request.php b/server/vendor/abraham/twitteroauth/src/Request.php
deleted file mode 100644
index a60c23d..0000000
--- a/server/vendor/abraham/twitteroauth/src/Request.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-/**
- * The MIT License
- * Copyright (c) 2007 Andy Smith
- */
-namespace Abraham\TwitterOAuth;
-
-class Request
-{
- protected $parameters;
- protected $httpMethod;
- protected $httpUrl;
- public static $version = '1.0';
-
- /**
- * Constructor
- *
- * @param string $httpMethod
- * @param string $httpUrl
- * @param array|null $parameters
- */
- public function __construct($httpMethod, $httpUrl, array $parameters = [])
- {
- $parameters = array_merge(Util::parseParameters(parse_url($httpUrl, PHP_URL_QUERY)), $parameters);
- $this->parameters = $parameters;
- $this->httpMethod = $httpMethod;
- $this->httpUrl = $httpUrl;
- }
-
- /**
- * pretty much a helper function to set up the request
- *
- * @param Consumer $consumer
- * @param Token $token
- * @param string $httpMethod
- * @param string $httpUrl
- * @param array $parameters
- *
- * @return Request
- */
- public static function fromConsumerAndToken(
- Consumer $consumer,
- Token $token = null,
- $httpMethod,
- $httpUrl,
- array $parameters = []
- ) {
- $defaults = [
- "oauth_version" => Request::$version,
- "oauth_nonce" => Request::generateNonce(),
- "oauth_timestamp" => time(),
- "oauth_consumer_key" => $consumer->key
- ];
- if (null !== $token) {
- $defaults['oauth_token'] = $token->key;
- }
-
- $parameters = array_merge($defaults, $parameters);
-
- return new Request($httpMethod, $httpUrl, $parameters);
- }
-
- /**
- * @param string $name
- * @param string $value
- */
- public function setParameter($name, $value)
- {
- $this->parameters[$name] = $value;
- }
-
- /**
- * @param $name
- *
- * @return string|null
- */
- public function getParameter($name)
- {
- return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
- }
-
- /**
- * @return array
- */
- public function getParameters()
- {
- return $this->parameters;
- }
-
- /**
- * @param $name
- */
- public function removeParameter($name)
- {
- unset($this->parameters[$name]);
- }
-
- /**
- * The request parameters, sorted and concatenated into a normalized string.
- *
- * @return string
- */
- public function getSignableParameters()
- {
- // Grab all parameters
- $params = $this->parameters;
-
- // Remove oauth_signature if present
- // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
- if (isset($params['oauth_signature'])) {
- unset($params['oauth_signature']);
- }
-
- return Util::buildHttpQuery($params);
- }
-
- /**
- * Returns the base string of this request
- *
- * The base string defined as the method, the url
- * and the parameters (normalized), each urlencoded
- * and the concated with &.
- *
- * @return string
- */
- public function getSignatureBaseString()
- {
- $parts = [
- $this->getNormalizedHttpMethod(),
- $this->getNormalizedHttpUrl(),
- $this->getSignableParameters()
- ];
-
- $parts = Util::urlencodeRfc3986($parts);
-
- return implode('&', $parts);
- }
-
- /**
- * Returns the HTTP Method in uppercase
- *
- * @return string
- */
- public function getNormalizedHttpMethod()
- {
- return strtoupper($this->httpMethod);
- }
-
- /**
- * parses the url and rebuilds it to be
- * scheme://host/path
- *
- * @return string
- */
- public function getNormalizedHttpUrl()
- {
- $parts = parse_url($this->httpUrl);
-
- $scheme = $parts['scheme'];
- $host = strtolower($parts['host']);
- $path = $parts['path'];
-
- return "$scheme://$host$path";
- }
-
- /**
- * Builds a url usable for a GET request
- *
- * @return string
- */
- public function toUrl()
- {
- $postData = $this->toPostdata();
- $out = $this->getNormalizedHttpUrl();
- if ($postData) {
- $out .= '?' . $postData;
- }
- return $out;
- }
-
- /**
- * Builds the data one would send in a POST request
- *
- * @return string
- */
- public function toPostdata()
- {
- return Util::buildHttpQuery($this->parameters);
- }
-
- /**
- * Builds the Authorization: header
- *
- * @return string
- * @throws TwitterOAuthException
- */
- public function toHeader()
- {
- $first = true;
- $out = 'Authorization: OAuth';
- foreach ($this->parameters as $k => $v) {
- if (substr($k, 0, 5) != "oauth") {
- continue;
- }
- if (is_array($v)) {
- throw new TwitterOAuthException('Arrays not supported in headers');
- }
- $out .= ($first) ? ' ' : ', ';
- $out .= Util::urlencodeRfc3986($k) . '="' . Util::urlencodeRfc3986($v) . '"';
- $first = false;
- }
- return $out;
- }
-
- /**
- * @return string
- */
- public function __toString()
- {
- return $this->toUrl();
- }
-
- /**
- * @param SignatureMethod $signatureMethod
- * @param Consumer $consumer
- * @param Token $token
- */
- public function signRequest(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null)
- {
- $this->setParameter("oauth_signature_method", $signatureMethod->getName());
- $signature = $this->buildSignature($signatureMethod, $consumer, $token);
- $this->setParameter("oauth_signature", $signature);
- }
-
- /**
- * @param SignatureMethod $signatureMethod
- * @param Consumer $consumer
- * @param Token $token
- *
- * @return string
- */
- public function buildSignature(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null)
- {
- return $signatureMethod->buildSignature($this, $consumer, $token);
- }
-
- /**
- * @return string
- */
- public static function generateNonce()
- {
- return md5(microtime() . mt_rand());
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/Response.php b/server/vendor/abraham/twitteroauth/src/Response.php
deleted file mode 100644
index 982b6ae..0000000
--- a/server/vendor/abraham/twitteroauth/src/Response.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth;
-
-/**
- * The result of the most recent API request.
- *
- * @author Abraham Williams <abraham@abrah.am>
- */
-class Response
-{
- /** @var string|null API path from the most recent request */
- private $apiPath;
- /** @var int HTTP status code from the most recent request */
- private $httpCode = 0;
- /** @var array HTTP headers from the most recent request */
- private $headers = [];
- /** @var array|object Response body from the most recent request */
- private $body = [];
- /** @var array HTTP headers from the most recent request that start with X */
- private $xHeaders = [];
-
- /**
- * @param string $apiPath
- */
- public function setApiPath($apiPath)
- {
- $this->apiPath = $apiPath;
- }
-
- /**
- * @return string|null
- */
- public function getApiPath()
- {
- return $this->apiPath;
- }
-
- /**
- * @param array|object $body
- */
- public function setBody($body)
- {
- $this->body = $body;
- }
-
- /**
- * @return array|object|string
- */
- public function getBody()
- {
- return $this->body;
- }
-
- /**
- * @param int $httpCode
- */
- public function setHttpCode($httpCode)
- {
- $this->httpCode = $httpCode;
- }
-
- /**
- * @return int
- */
- public function getHttpCode()
- {
- return $this->httpCode;
- }
-
- /**
- * @param array $headers
- */
- public function setHeaders(array $headers)
- {
- foreach ($headers as $key => $value) {
- if (substr($key, 0, 1) == 'x') {
- $this->xHeaders[$key] = $value;
- }
- }
- $this->headers = $headers;
- }
-
- /**
- * @return array
- */
- public function getsHeaders()
- {
- return $this->headers;
- }
-
- /**
- * @param array $xHeaders
- */
- public function setXHeaders(array $xHeaders = [])
- {
- $this->xHeaders = $xHeaders;
- }
-
- /**
- * @return array
- */
- public function getXHeaders()
- {
- return $this->xHeaders;
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/SignatureMethod.php b/server/vendor/abraham/twitteroauth/src/SignatureMethod.php
deleted file mode 100644
index 40fd51e..0000000
--- a/server/vendor/abraham/twitteroauth/src/SignatureMethod.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-/**
- * The MIT License
- * Copyright (c) 2007 Andy Smith
- */
-namespace Abraham\TwitterOAuth;
-
-/**
- * A class for implementing a Signature Method
- * See section 9 ("Signing Requests") in the spec
- */
-abstract class SignatureMethod
-{
- /**
- * Needs to return the name of the Signature Method (ie HMAC-SHA1)
- *
- * @return string
- */
- abstract public function getName();
-
- /**
- * Build up the signature
- * NOTE: The output of this function MUST NOT be urlencoded.
- * the encoding is handled in OAuthRequest when the final
- * request is serialized
- *
- * @param Request $request
- * @param Consumer $consumer
- * @param Token $token
- *
- * @return string
- */
- abstract public function buildSignature(Request $request, Consumer $consumer, Token $token = null);
-
- /**
- * Verifies that a given signature is correct
- *
- * @param Request $request
- * @param Consumer $consumer
- * @param Token $token
- * @param string $signature
- *
- * @return bool
- */
- public function checkSignature(Request $request, Consumer $consumer, Token $token, $signature)
- {
- $built = $this->buildSignature($request, $consumer, $token);
-
- // Check for zero length, although unlikely here
- if (strlen($built) == 0 || strlen($signature) == 0) {
- return false;
- }
-
- if (strlen($built) != strlen($signature)) {
- return false;
- }
-
- // Avoid a timing leak with a (hopefully) time insensitive compare
- $result = 0;
- for ($i = 0; $i < strlen($signature); $i++) {
- $result |= ord($built{$i}) ^ ord($signature{$i});
- }
-
- return $result == 0;
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/Token.php b/server/vendor/abraham/twitteroauth/src/Token.php
deleted file mode 100644
index 140c1ec..0000000
--- a/server/vendor/abraham/twitteroauth/src/Token.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * The MIT License
- * Copyright (c) 2007 Andy Smith
- */
-namespace Abraham\TwitterOAuth;
-
-class Token
-{
- /** @var string */
- public $key;
- /** @var string */
- public $secret;
-
- /**
- * @param string $key The OAuth Token
- * @param string $secret The OAuth Token Secret
- */
- public function __construct($key, $secret)
- {
- $this->key = $key;
- $this->secret = $secret;
- }
-
- /**
- * Generates the basic string serialization of a token that a server
- * would respond to request_token and access_token calls with
- *
- * @return string
- */
- public function __toString()
- {
- return sprintf("oauth_token=%s&oauth_token_secret=%s",
- Util::urlencodeRfc3986($this->key),
- Util::urlencodeRfc3986($this->secret)
- );
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/TwitterOAuth.php b/server/vendor/abraham/twitteroauth/src/TwitterOAuth.php
deleted file mode 100644
index b4e961f..0000000
--- a/server/vendor/abraham/twitteroauth/src/TwitterOAuth.php
+++ /dev/null
@@ -1,465 +0,0 @@
-<?php
-/**
- * The most popular PHP library for use with the Twitter OAuth REST API.
- *
- * @license MIT
- */
-namespace Abraham\TwitterOAuth;
-
-use Abraham\TwitterOAuth\Util\JsonDecoder;
-
-/**
- * TwitterOAuth class for interacting with the Twitter API.
- *
- * @author Abraham Williams <abraham@abrah.am>
- */
-class TwitterOAuth extends Config
-{
- const API_VERSION = '1.1';
- const API_HOST = 'https://api.twitter.com';
- const UPLOAD_HOST = 'https://upload.twitter.com';
- const UPLOAD_CHUNK = 40960; // 1024 * 40
-
- /** @var Response details about the result of the last request */
- private $response;
- /** @var string|null Application bearer token */
- private $bearer;
- /** @var Consumer Twitter application details */
- private $consumer;
- /** @var Token|null User access token details */
- private $token;
- /** @var HmacSha1 OAuth 1 signature type used by Twitter */
- private $signatureMethod;
-
- /**
- * Constructor
- *
- * @param string $consumerKey The Application Consumer Key
- * @param string $consumerSecret The Application Consumer Secret
- * @param string|null $oauthToken The Client Token (optional)
- * @param string|null $oauthTokenSecret The Client Token Secret (optional)
- */
- public function __construct($consumerKey, $consumerSecret, $oauthToken = null, $oauthTokenSecret = null)
- {
- $this->resetLastResponse();
- $this->signatureMethod = new HmacSha1();
- $this->consumer = new Consumer($consumerKey, $consumerSecret);
- if (!empty($oauthToken) && !empty($oauthTokenSecret)) {
- $this->token = new Token($oauthToken, $oauthTokenSecret);
- }
- if (empty($oauthToken) && !empty($oauthTokenSecret)) {
- $this->bearer = $oauthTokenSecret;
- }
- }
-
- /**
- * @param string $oauthToken
- * @param string $oauthTokenSecret
- */
- public function setOauthToken($oauthToken, $oauthTokenSecret)
- {
- $this->token = new Token($oauthToken, $oauthTokenSecret);
- }
-
- /**
- * @return string|null
- */
- public function getLastApiPath()
- {
- return $this->response->getApiPath();
- }
-
- /**
- * @return int
- */
- public function getLastHttpCode()
- {
- return $this->response->getHttpCode();
- }
-
- /**
- * @return array
- */
- public function getLastXHeaders()
- {
- return $this->response->getXHeaders();
- }
-
- /**
- * @return array|object|null
- */
- public function getLastBody()
- {
- return $this->response->getBody();
- }
-
- /**
- * Resets the last response cache.
- */
- public function resetLastResponse()
- {
- $this->response = new Response();
- }
-
- /**
- * Make URLs for user browser navigation.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return string
- */
- public function url($path, array $parameters)
- {
- $this->resetLastResponse();
- $this->response->setApiPath($path);
- $query = http_build_query($parameters);
- return sprintf('%s/%s?%s', self::API_HOST, $path, $query);
- }
-
- /**
- * Make /oauth/* requests to the API.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array
- * @throws TwitterOAuthException
- */
- public function oauth($path, array $parameters = [])
- {
- $response = [];
- $this->resetLastResponse();
- $this->response->setApiPath($path);
- $url = sprintf('%s/%s', self::API_HOST, $path);
- $result = $this->oAuthRequest($url, 'POST', $parameters);
-
- if ($this->getLastHttpCode() != 200) {
- throw new TwitterOAuthException($result);
- }
-
- parse_str($result, $response);
- $this->response->setBody($response);
-
- return $response;
- }
-
- /**
- * Make /oauth2/* requests to the API.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- public function oauth2($path, array $parameters = [])
- {
- $method = 'POST';
- $this->resetLastResponse();
- $this->response->setApiPath($path);
- $url = sprintf('%s/%s', self::API_HOST, $path);
- $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters);
- $authorization = 'Authorization: Basic ' . $this->encodeAppAuthorization($this->consumer);
- $result = $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters);
- $response = JsonDecoder::decode($result, $this->decodeJsonAsArray);
- $this->response->setBody($response);
- return $response;
- }
-
- /**
- * Make GET requests to the API.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- public function get($path, array $parameters = [])
- {
- return $this->http('GET', self::API_HOST, $path, $parameters);
- }
-
- /**
- * Make POST requests to the API.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- public function post($path, array $parameters = [])
- {
- return $this->http('POST', self::API_HOST, $path, $parameters);
- }
-
- /**
- * Make DELETE requests to the API.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- public function delete($path, array $parameters = [])
- {
- return $this->http('DELETE', self::API_HOST, $path, $parameters);
- }
-
- /**
- * Make PUT requests to the API.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- public function put($path, array $parameters = [])
- {
- return $this->http('PUT', self::API_HOST, $path, $parameters);
- }
-
- /**
- * Upload media to upload.twitter.com.
- *
- * @param string $path
- * @param array $parameters
- * @param boolean $chunked
- *
- * @return array|object
- */
- public function upload($path, array $parameters = [], $chunked = false)
- {
- if ($chunked) {
- return $this->uploadMediaChunked($path, $parameters);
- } else {
- return $this->uploadMediaNotChunked($path, $parameters);
- }
- }
-
- /**
- * Private method to upload media (not chunked) to upload.twitter.com.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- private function uploadMediaNotChunked($path, array $parameters)
- {
- $file = file_get_contents($parameters['media']);
- $base = base64_encode($file);
- $parameters['media'] = $base;
- return $this->http('POST', self::UPLOAD_HOST, $path, $parameters);
- }
-
- /**
- * Private method to upload media (chunked) to upload.twitter.com.
- *
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- private function uploadMediaChunked($path, array $parameters)
- {
- // Init
- $init = $this->http('POST', self::UPLOAD_HOST, $path, [
- 'command' => 'INIT',
- 'media_type' => $parameters['media_type'],
- 'total_bytes' => filesize($parameters['media'])
- ]);
- // Append
- $segment_index = 0;
- $media = fopen($parameters['media'], 'rb');
- while (!feof($media))
- {
- $this->http('POST', self::UPLOAD_HOST, 'media/upload', [
- 'command' => 'APPEND',
- 'media_id' => $init->media_id_string,
- 'segment_index' => $segment_index++,
- 'media_data' => base64_encode(fread($media, self::UPLOAD_CHUNK))
- ]);
- }
- fclose($media);
- // Finalize
- $finalize = $this->http('POST', self::UPLOAD_HOST, 'media/upload', [
- 'command' => 'FINALIZE',
- 'media_id' => $init->media_id_string
- ]);
- return $finalize;
- }
-
- /**
- * @param string $method
- * @param string $host
- * @param string $path
- * @param array $parameters
- *
- * @return array|object
- */
- private function http($method, $host, $path, array $parameters)
- {
- $this->resetLastResponse();
- $url = sprintf('%s/%s/%s.json', $host, self::API_VERSION, $path);
- $this->response->setApiPath($path);
- $result = $this->oAuthRequest($url, $method, $parameters);
- $response = JsonDecoder::decode($result, $this->decodeJsonAsArray);
- $this->response->setBody($response);
- return $response;
- }
-
- /**
- * Format and sign an OAuth / API request
- *
- * @param string $url
- * @param string $method
- * @param array $parameters
- *
- * @return string
- * @throws TwitterOAuthException
- */
- private function oAuthRequest($url, $method, array $parameters)
- {
- $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters);
- if (array_key_exists('oauth_callback', $parameters)) {
- // Twitter doesn't like oauth_callback as a parameter.
- unset($parameters['oauth_callback']);
- }
- if ($this->bearer === null) {
- $request->signRequest($this->signatureMethod, $this->consumer, $this->token);
- $authorization = $request->toHeader();
- } else {
- $authorization = 'Authorization: Bearer ' . $this->bearer;
- }
- return $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters);
- }
-
- /**
- * Make an HTTP request
- *
- * @param string $url
- * @param string $method
- * @param string $authorization
- * @param array $postfields
- *
- * @return string
- * @throws TwitterOAuthException
- */
- private function request($url, $method, $authorization, array $postfields)
- {
- /* Curl settings */
- $options = [
- // CURLOPT_VERBOSE => true,
- CURLOPT_CAINFO => __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem',
- CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout,
- CURLOPT_HEADER => true,
- CURLOPT_HTTPHEADER => ['Accept: application/json', $authorization, 'Expect:'],
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_SSL_VERIFYHOST => 2,
- CURLOPT_SSL_VERIFYPEER => true,
- CURLOPT_TIMEOUT => $this->timeout,
- CURLOPT_URL => $url,
- CURLOPT_USERAGENT => $this->userAgent,
- ];
-
- /* Remove CACert file when in a PHAR file. */
- if ($this->pharRunning()) {
- unset($options[CURLOPT_CAINFO]);
- }
-
- if($this->gzipEncoding) {
- $options[CURLOPT_ENCODING] = 'gzip';
- }
-
- if (!empty($this->proxy)) {
- $options[CURLOPT_PROXY] = $this->proxy['CURLOPT_PROXY'];
- $options[CURLOPT_PROXYUSERPWD] = $this->proxy['CURLOPT_PROXYUSERPWD'];
- $options[CURLOPT_PROXYPORT] = $this->proxy['CURLOPT_PROXYPORT'];
- $options[CURLOPT_PROXYAUTH] = CURLAUTH_BASIC;
- $options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP;
- }
-
- switch ($method) {
- case 'GET':
- break;
- case 'POST':
- $options[CURLOPT_POST] = true;
- $options[CURLOPT_POSTFIELDS] = Util::buildHttpQuery($postfields);
- break;
- case 'DELETE':
- $options[CURLOPT_CUSTOMREQUEST] = 'DELETE';
- break;
- case 'PUT':
- $options[CURLOPT_CUSTOMREQUEST] = 'PUT';
- break;
- }
-
- if (in_array($method, ['GET', 'PUT', 'DELETE']) && !empty($postfields)) {
- $options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields);
- }
-
-
- $curlHandle = curl_init();
- curl_setopt_array($curlHandle, $options);
- $response = curl_exec($curlHandle);
-
- // Throw exceptions on cURL errors.
- if (curl_errno($curlHandle) > 0) {
- throw new TwitterOAuthException(curl_error($curlHandle), curl_errno($curlHandle));
- }
-
- $this->response->setHttpCode(curl_getinfo($curlHandle, CURLINFO_HTTP_CODE));
- $parts = explode("\r\n\r\n", $response);
- $responseBody = array_pop($parts);
- $responseHeader = array_pop($parts);
- $this->response->setHeaders($this->parseHeaders($responseHeader));
-
- curl_close($curlHandle);
-
- return $responseBody;
- }
-
- /**
- * Get the header info to store.
- *
- * @param string $header
- *
- * @return array
- */
- private function parseHeaders($header)
- {
- $headers = [];
- foreach (explode("\r\n", $header) as $line) {
- if (strpos($line, ':') !== false) {
- list ($key, $value) = explode(': ', $line);
- $key = str_replace('-', '_', strtolower($key));
- $headers[$key] = trim($value);
- }
- }
- return $headers;
- }
-
- /**
- * Encode application authorization header with base64.
- *
- * @param Consumer $consumer
- *
- * @return string
- */
- private function encodeAppAuthorization(Consumer $consumer)
- {
- $key = rawurlencode($consumer->key);
- $secret = rawurlencode($consumer->secret);
- return base64_encode($key . ':' . $secret);
- }
-
- /**
- * Is the code running from a Phar module.
- *
- * @return boolean
- */
- private function pharRunning()
- {
- return class_exists('Phar') && !empty(\Phar::running(false));
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/TwitterOAuthException.php b/server/vendor/abraham/twitteroauth/src/TwitterOAuthException.php
deleted file mode 100644
index 79903ec..0000000
--- a/server/vendor/abraham/twitteroauth/src/TwitterOAuthException.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth;
-
-/**
- * @author Abraham Williams <abraham@abrah.am>
- */
-class TwitterOAuthException extends \Exception
-{
-}
diff --git a/server/vendor/abraham/twitteroauth/src/Util.php b/server/vendor/abraham/twitteroauth/src/Util.php
deleted file mode 100644
index 372af95..0000000
--- a/server/vendor/abraham/twitteroauth/src/Util.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * The MIT License
- * Copyright (c) 2007 Andy Smith
- */
-namespace Abraham\TwitterOAuth;
-
-class Util
-{
- /**
- * @param $input
- *
- * @return array|mixed|string
- */
- public static function urlencodeRfc3986($input)
- {
- $output = '';
- if (is_array($input)) {
- $output = array_map([__NAMESPACE__ . '\Util', 'urlencodeRfc3986'], $input);
- } elseif (is_scalar($input)) {
- $output = rawurlencode($input);
- }
- return $output;
- }
-
- /**
- * @param string $string
- *
- * @return string
- */
- public static function urldecodeRfc3986($string)
- {
- return urldecode($string);
- }
-
- /**
- * This function takes a input like a=b&a=c&d=e and returns the parsed
- * parameters like this
- * array('a' => array('b','c'), 'd' => 'e')
- *
- * @param string $input
- *
- * @return array
- */
- public static function parseParameters($input)
- {
- if (!is_string($input)) {
- return [];
- }
-
- $pairs = explode('&', $input);
-
- $parameters = [];
- foreach ($pairs as $pair) {
- $split = explode('=', $pair, 2);
- $parameter = Util::urldecodeRfc3986($split[0]);
- $value = isset($split[1]) ? Util::urldecodeRfc3986($split[1]) : '';
-
- if (isset($parameters[$parameter])) {
- // We have already recieved parameter(s) with this name, so add to the list
- // of parameters with this name
-
- if (is_scalar($parameters[$parameter])) {
- // This is the first duplicate, so transform scalar (string) into an array
- // so we can add the duplicates
- $parameters[$parameter] = [$parameters[$parameter]];
- }
-
- $parameters[$parameter][] = $value;
- } else {
- $parameters[$parameter] = $value;
- }
- }
- return $parameters;
- }
-
- /**
- * @param array $params
- *
- * @return string
- */
- public static function buildHttpQuery(array $params)
- {
- if (empty($params)) {
- return '';
- }
-
- // Urlencode both keys and values
- $keys = Util::urlencodeRfc3986(array_keys($params));
- $values = Util::urlencodeRfc3986(array_values($params));
- $params = array_combine($keys, $values);
-
- // Parameters are sorted by name, using lexicographical byte value ordering.
- // Ref: Spec: 9.1.1 (1)
- uksort($params, 'strcmp');
-
- $pairs = [];
- foreach ($params as $parameter => $value) {
- if (is_array($value)) {
- // If two or more parameters share the same name, they are sorted by their value
- // Ref: Spec: 9.1.1 (1)
- // June 12th, 2010 - changed to sort because of issue 164 by hidetaka
- sort($value, SORT_STRING);
- foreach ($value as $duplicateValue) {
- $pairs[] = $parameter . '=' . $duplicateValue;
- }
- } else {
- $pairs[] = $parameter . '=' . $value;
- }
- }
- // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
- // Each name-value pair is separated by an '&' character (ASCII code 38)
- return implode('&', $pairs);
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php b/server/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php
deleted file mode 100644
index c8589c5..0000000
--- a/server/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth\Util;
-
-/**
- * @author louis <louis@systemli.org>
- */
-class JsonDecoder
-{
- /**
- * Decodes a JSON string to stdObject or associative array
- *
- * @param string $string
- * @param bool $asArray
- *
- * @return array|object
- */
- public static function decode($string, $asArray)
- {
- if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) {
- return json_decode($string, $asArray, 512, JSON_BIGINT_AS_STRING);
- }
-
- return json_decode($string, $asArray);
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/src/cacert.pem b/server/vendor/abraham/twitteroauth/src/cacert.pem
deleted file mode 100644
index cce0e58..0000000
--- a/server/vendor/abraham/twitteroauth/src/cacert.pem
+++ /dev/null
@@ -1,4066 +0,0 @@
-##
-## Bundle of CA Root Certificates
-##
-## Certificate data from Mozilla as of: Wed Nov 2 04:12:05 2016 GMT
-##
-## This is a bundle of X.509 certificates of public Certificate Authorities
-## (CA). These were automatically extracted from Mozilla's root certificates
-## file (certdata.txt). This file can be found in the mozilla source tree:
-## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
-##
-## It contains the certificates in PEM format and therefore
-## can be directly used with curl / libcurl / php_curl, or with
-## an Apache+mod_ssl webserver for SSL client authentication.
-## Just configure this file as the SSLCACertificateFile.
-##
-## Conversion done with mk-ca-bundle.pl version 1.27.
-## SHA256: 17e2a90c8a5cfd6a675b3475d3d467e1ab1fe0d5397e907b08206182389caa08
-##
-
-
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-GlobalSign Root CA - R2
-=======================
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
-ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
-s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
-S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
-TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
-ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
-YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
-BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
-9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
-01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
-
-Verisign Class 3 Public Primary Certification Authority - G3
-============================================================
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
-dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
-EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
-cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
-EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
-055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
-ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
-xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
-t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
-KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
-T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
-J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
-nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
-AddTrust External Root
-======================
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
-VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
-NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
-cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
-Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
-+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
-Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
-aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
-2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
-7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
-BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
-VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
-VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
-e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
-G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
-
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
-Entrust Root Certification Authority
-====================================
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
-b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
-A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
-MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
-MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
-Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
-A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
-Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
-j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
-rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
-MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
-Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
-v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
-W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
-tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
-
-RSA Security 2048 v3
-====================
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
-ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
-MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
-BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
-Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
-WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
-KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
-+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
-MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
-FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
-v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
-0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
-VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
-nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
-
-GeoTrust Global CA
-==================
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
-MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
-BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
-8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
-T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
-vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
-DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
-zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
-d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
-mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
-XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
-
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
-GeoTrust Universal CA
-=====================
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
-MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
-Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
-JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
-RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
-7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
-8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
-qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
-Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
-Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
-KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
-ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
-XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
-qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
-oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
-xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
-KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
-DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
-xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
-p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
-P/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
-
-GeoTrust Universal CA 2
-=======================
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
-MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
-SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
-DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
-j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
-JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
-QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
-WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
-20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
-ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
-SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
-8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
-+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
-4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
-mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
-A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
-Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
-pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
-FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
-gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
-X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
-
-Visa eCommerce Root
-===================
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
-EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
-QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
-WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
-VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
-F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
-RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
-TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
-/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
-GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
-CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
-YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
-zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
-
-Certum Root CA
-==============
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
-ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
-Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
-by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
-wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
-kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
-89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
-Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
-NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
-GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
-GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
-0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
-qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
-
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
-QuoVadis Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
-ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
-XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
-lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
-lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
-lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
-66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
-wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
-D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
-BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
-J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
-DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
-Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
-UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
-VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
-+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
-IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
-WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
-f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
-4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
-VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
-
-QuoVadis Root CA 3
-==================
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
-EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
-OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
-aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
-DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
-KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
-DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
-BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
-p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
-nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
-MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
-Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
-uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
-BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
-BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
-VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
-ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
-AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
-qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
-hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
-POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
-Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
-8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
-bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
-g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
-vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
-qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
-
-Security Communication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
-U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
-8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
-DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
-5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
-DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
-JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
-DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
-0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
-mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
-s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
-6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
-
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
-Camerfirma Chambers of Commerce Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
-NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
-cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
-MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
-AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
-xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
-NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
-DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
-d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
-EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
-cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
-AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
-bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
-fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
-L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
-UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
-ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
-erfutGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
-
-Camerfirma Global Chambersign Root
-==================================
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
-QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
-ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
-NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
-YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
-MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
-ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
-1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
-by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
-6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
-8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
-BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
-aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
-Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
-aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
-PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
-gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
-PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
-IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
-t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
-
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
-YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
-AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
-Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
-U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
-LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
-cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
-dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
-AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
-3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
-vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
-fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
-EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
-1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
-lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
-g14=
------END CERTIFICATE-----
-
-Taiwan GRCA
-===========
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
-EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
-dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
-w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
-BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
-1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
-htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
-J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
-Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
-B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
-O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
-lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
-HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
-Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
-Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
-D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
-DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
-Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
-7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
-CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
-+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
------END CERTIFICATE-----
-
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
-MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
-MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
-NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
-AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
-b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
-7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
-cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
-WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
-haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
-MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
-MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
-jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
-MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
-VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
-vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
-OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
-1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
-nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
-x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
-MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
-9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
-UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
-/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
-oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
-GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
-66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
-hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
-EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
-SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
-
-DigiCert Global Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
-MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
-TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
-BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
-4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
-7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
-o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
-8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
-BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
-EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
-tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
-
-DigiCert High Assurance EV Root CA
-==================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
-KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
-MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
-MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
-Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
-Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
-OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
-MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
-NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
-h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
-JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
-V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
-myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
-
-Certplus Class 2 Primary CA
-===========================
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
-BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
-OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
-dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
-5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
-Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
-YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
-e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
-CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
-YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
-L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
-P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
-TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
-7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
-
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
-DST ACES CA X6
-==============
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
-MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
-MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
-CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
-DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
-pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
-GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
-MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
-EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
-Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
-dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
-CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
-5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
-vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
-oKfN5XozNmr6mis=
------END CERTIFICATE-----
-
-SwissSign Gold CA - G2
-======================
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
-EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
-MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
-c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
-t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
-jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
-vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
-ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
-AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
-jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
-peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
-7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
-GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
-5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
-44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
-Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
-Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
-mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
-vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
-KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
-NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
-viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
-
-SwissSign Silver CA - G2
-========================
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
-BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
-DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
-aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
-N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
-+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
-6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
-MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
-qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
-FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
-ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
-celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
-CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
-4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
-kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
-3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
-/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
-DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
-e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
-WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
-DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
-DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority
-========================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
-CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
-cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
-b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
-nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
-RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
-tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
-hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
-Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
-NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
-Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
-
-thawte Primary Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
-MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
-SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
-KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
-FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
-oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
-1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
-q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
-aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
-afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
-AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
-jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
-z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G5
-============================================================
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
-dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
-j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
-Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
-Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
-fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
-SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
-X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
-KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
-Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
-ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
-
-SecureTrust CA
-==============
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
-dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
-BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
-OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
-DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
-GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
-01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
-ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
-BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
-aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
-SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
-mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
-
-Secure Global CA
-================
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
-EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
-bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
-MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
-Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
-YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
-bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
-8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
-HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
-0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
-oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
-MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
-OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
-CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
-
-COMODO Certification Authority
-==============================
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
-MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
-T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
-+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
-xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
-4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
-1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
-rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
-b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
-AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
-IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
-+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
-
-Network Solutions Certificate Authority
-=======================================
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
-EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
-IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
-MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
-jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
-aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
-crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
-/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
-AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
-bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
-A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
-4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
-GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
-ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
-
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
-COMODO ECC Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
-GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
-Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
-4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
-wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
-FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
-U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
-
-IGC/A
-=====
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
-VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
-Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
-MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
-EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
-STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
-TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
-So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
-HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
-frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
-tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
-egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
-iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
-q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
-MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
-lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
-0mBWWg==
------END CERTIFICATE-----
-
-Security Communication EV RootCA1
-=================================
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
-BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
-Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
-/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
-WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
-ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
-bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
-9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
-iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
-Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
-mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
-T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GA CA
-===============================
------BEGIN CERTIFICATE-----
-MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
-BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
-A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
-bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
-VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
-IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
-IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
-Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
-Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
-d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
-/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
-LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
-KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
-MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
-+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
-hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
-okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
-Certigna
-========
------BEGIN CERTIFICATE-----
-MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
-EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
-MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
-Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
-XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
-GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
-ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
-DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
-Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
-tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
-BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
-SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
-hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
-ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
-PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
-1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
-WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
------END CERTIFICATE-----
-
-Deutsche Telekom Root CA 2
-==========================
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
-RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
-A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
-MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
-A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
-b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
-bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
-KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
-AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
-Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
-jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
-HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
-E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
-zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
-rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
-dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
-Cybertrust Global Root
-======================
------BEGIN CERTIFICATE-----
-MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
-ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
-MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
-ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
-0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
-AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
-89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
-8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
-MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
-A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
-lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
-5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
-hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
-X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
-WL1WMRJOEcgh4LMRkWXbtKaIOM5V
------END CERTIFICATE-----
-
-ePKI Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
-EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
-MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
-MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
-AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
-IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
-lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
-qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
-12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
-WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
-ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
-lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
-vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
-Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
-MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
-ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
-1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
-KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
-xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
-NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
-GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
-xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
-gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
-sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
-BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
------END CERTIFICATE-----
-
-T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
-=============================================================================================================================
------BEGIN CERTIFICATE-----
-MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
-DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
-aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
-b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
-BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
-S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
-MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
-IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
-n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
-IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
-dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
-cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
-Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
-xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
-6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
-hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
-BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
-N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
-y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
-LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
-dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
------END CERTIFICATE-----
-
-Buypass Class 2 CA 1
-====================
------BEGIN CERTIFICATE-----
-MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
-MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
-c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
-cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
-0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
-0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
-uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
-AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
-1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
-7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
-fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
-wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
------END CERTIFICATE-----
-
-EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
-==========================================================================
------BEGIN CERTIFICATE-----
-MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
-QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
-Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
-ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
-IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
-SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
-X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
-gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
-eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
-TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
-Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
-uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
-qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
-ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
-Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
-Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
-FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
-zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
-XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
-bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
-RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
-1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
-2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
-Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
-AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
------END CERTIFICATE-----
-
-certSIGN ROOT CA
-================
------BEGIN CERTIFICATE-----
-MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
-VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
-Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
-CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
-JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
-rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
-ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
-0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
-AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
-AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
-SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
-x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
-vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
-TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
------END CERTIFICATE-----
-
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G3
-=============================================
------BEGIN CERTIFICATE-----
-MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
-eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
-NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
-YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
-LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
-K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
-c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
-IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
-dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
-2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
-cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
-Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
-AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
-t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
------END CERTIFICATE-----
-
-thawte Primary Root CA - G2
-===========================
------BEGIN CERTIFICATE-----
-MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
-VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
-IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
-Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
-MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
-b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
-IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
-LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
-8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
-mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
-G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
-rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
------END CERTIFICATE-----
-
-thawte Primary Root CA - G3
-===========================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
-BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
-aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
-cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
-ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
-d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
-VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
-A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
-P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
-+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
-7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
-vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
-KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
-A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
-t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
-8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
-er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
------END CERTIFICATE-----
-
-GeoTrust Primary Certification Authority - G2
-=============================================
------BEGIN CERTIFICATE-----
-MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
-OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
-MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
-b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
-BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
-KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
-VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
-EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
-ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
-npaqBA+K
------END CERTIFICATE-----
-
-VeriSign Universal Root Certification Authority
-===============================================
------BEGIN CERTIFICATE-----
-MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
-ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
-IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
-1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
-MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
-9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
-AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
-tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
-CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
-a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
-DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
-Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
-Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
-P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
-wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
-mJO37M2CYfE45k+XmCpajQ==
------END CERTIFICATE-----
-
-VeriSign Class 3 Public Primary Certification Authority - G4
-============================================================
------BEGIN CERTIFICATE-----
-MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
-VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
-b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
-ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
-b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
-Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
-rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
-/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
-HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
-Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
-A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
-AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
------END CERTIFICATE-----
-
-NetLock Arany (Class Gold) Főtanúsítvány
-========================================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
-A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
-dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
-cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
-MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
-ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
-c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
-0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
-/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
-H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
-fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
-neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
-BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
-qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
-YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
-bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
-NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
-dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G2
-==================================
------BEGIN CERTIFICATE-----
-MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
-5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
-vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
-CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
-e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
-OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
-CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
-48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
-trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
-qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
-AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
-ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
-A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
-+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
-f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
-kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
-CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
-URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
-CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
-oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
-IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
-66+KAQ==
------END CERTIFICATE-----
-
-Juur-SK
-=======
------BEGIN CERTIFICATE-----
-MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA
-c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw
-DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG
-SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy
-aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf
-TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC
-+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw
-UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa
-Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF
-MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD
-HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh
-AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA
-cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr
-AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw
-cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE
-FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G
-A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo
-ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL
-abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678
-IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh
-Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2
-yyqcjg==
------END CERTIFICATE-----
-
-Hongkong Post Root CA 1
-=======================
------BEGIN CERTIFICATE-----
-MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
-DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
-NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
-IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
-ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
-auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
-qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
-V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
-HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
-h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
-l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
-IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
-T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
-c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
------END CERTIFICATE-----
-
-SecureSign RootCA11
-===================
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
-SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
-b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
-KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
-cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
-TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
-wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
-g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
-O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
-bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
-t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
-OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
-bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
-Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
-y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
-lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
------END CERTIFICATE-----
-
-ACEDICOM Root
-=============
------BEGIN CERTIFICATE-----
-MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
-T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
-MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
-A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
-AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
-WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
-YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
-MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
-m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
-HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
-xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
-3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
-2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
-TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
-4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
-9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
-bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
-aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
-eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
-zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
-ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
-KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
-nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
-I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
-MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
-tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
------END CERTIFICATE-----
-
-Microsec e-Szigno Root CA 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
-MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
-c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
-dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
-BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
-U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
-fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
-0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
-pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
-1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
-AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
-QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
-FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
-lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
-I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
-tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
-yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
-LXpUq3DDfSJlgnCW
------END CERTIFICATE-----
-
-GlobalSign Root CA - R3
-=======================
------BEGIN CERTIFICATE-----
-MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
-YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
-bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
-aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
-bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
-iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
-0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
-rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
-OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
-xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
-lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
-EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
-bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
-YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
-kpeDMdmztcpHWD9f
------END CERTIFICATE-----
-
-Autoridad de Certificacion Firmaprofesional CIF A62634068
-=========================================================
------BEGIN CERTIFICATE-----
-MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
-BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
-QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
-NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
-Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
-B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
-7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
-ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
-plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
-MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
-LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
-bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
-vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
-EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
-DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
-cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
-bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
-ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
-51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
-R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
-T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
-Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
-osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
-crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
-saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
-KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
-6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
------END CERTIFICATE-----
-
-Izenpe.com
-==========
------BEGIN CERTIFICATE-----
-MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
-EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
-MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
-QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
-03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
-ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
-+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
-PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
-OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
-F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
-0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
-0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
-leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
-AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
-SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
-NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
-MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
-Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
-kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
-hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
-g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
-aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
-nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
-ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
-Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
-WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
------END CERTIFICATE-----
-
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
-Go Daddy Root Certificate Authority - G2
-========================================
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
-MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
-MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
-b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
-A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
-9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
-+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
-fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
-NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
-BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
-vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
-5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
-N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
-LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
------END CERTIFICATE-----
-
-Starfield Root Certificate Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
-eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
-DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
-VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
-dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
-W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
-bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
-N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
-ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
-JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
-TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
-4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
-F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
-pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
-c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
------END CERTIFICATE-----
-
-Starfield Services Root Certificate Authority - G2
-==================================================
------BEGIN CERTIFICATE-----
-MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
-b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
-IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
-BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
-dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
-h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
-hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
-LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
-rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
-AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
-SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
-E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
-xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
-iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
-YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
------END CERTIFICATE-----
-
-AffirmTrust Commercial
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
-MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
-DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
-C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
-BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
-MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
-HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
-hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
-qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
-0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
-sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
------END CERTIFICATE-----
-
-AffirmTrust Networking
-======================
------BEGIN CERTIFICATE-----
-MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
-MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
-bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
-Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
-dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
-/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
-h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
-HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
-AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
-UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
-12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
-WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
-/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
------END CERTIFICATE-----
-
-AffirmTrust Premium
-===================
------BEGIN CERTIFICATE-----
-MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
-BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
-OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
-dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
-BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
-5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
-+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
-GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
-p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
-S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
-6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
-/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
-+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
-MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
-Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
-6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
-L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
-+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
-BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
-IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
-g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
-zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
------END CERTIFICATE-----
-
-AffirmTrust Premium ECC
-=======================
------BEGIN CERTIFICATE-----
-MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
-BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
-MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
-cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
-N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
-BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
-BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
-57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
-eQ==
------END CERTIFICATE-----
-
-Certum Trusted Network CA
-=========================
------BEGIN CERTIFICATE-----
-MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
-ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
-MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
-ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
-l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
-J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
-fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
-cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
-Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
-DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
-jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
-mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
-Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
-03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
------END CERTIFICATE-----
-
-Certinomis - Autorité Racine
-============================
------BEGIN CERTIFICATE-----
-MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
-LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
-A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
-JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
-wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
-Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
-2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
-jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
-c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
-lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
-xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
-530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
-4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
-KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
-WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
-R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
-nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
-CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
-JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
-qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
-WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
-wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
-vgt2Fl43N+bYdJeimUV5
------END CERTIFICATE-----
-
-Root CA Generalitat Valenciana
-==============================
------BEGIN CERTIFICATE-----
-MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE
-ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290
-IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3
-WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE
-CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2
-F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B
-ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ
-D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte
-JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB
-AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n
-dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB
-ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl
-AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA
-YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy
-AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA
-aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt
-AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA
-YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu
-AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA
-OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0
-dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV
-BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G
-A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S
-b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh
-TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz
-Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63
-NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH
-iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt
-+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM=
------END CERTIFICATE-----
-
-TWCA Root Certification Authority
-=================================
------BEGIN CERTIFICATE-----
-MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
-VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
-EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
-IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
-QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
-oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
-4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
-y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
-9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
-mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
-QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
-T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
-Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
------END CERTIFICATE-----
-
-Security Communication RootCA2
-==============================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
-U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
-dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
-SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
-aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
-+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
-3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
-spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
-EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
-QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
-CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
-u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
-3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
-tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
-mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
------END CERTIFICATE-----
-
-EC-ACC
-======
------BEGIN CERTIFICATE-----
-MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
-BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
-ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
-VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
-CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
-BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
-MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
-SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
-Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
-cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
-w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
-ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
-HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
-E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
-0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
-VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
-Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
-dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
-lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
-Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
-l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
-E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
-5EI=
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2011
-=======================================================
------BEGIN CERTIFICATE-----
-MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
-O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
-aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
-AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
-IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
-IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
-1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
-71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
-8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
-3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
-MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
-MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
-b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
-XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
-TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
-/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
-7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
------END CERTIFICATE-----
-
-Actalis Authentication Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
-BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
-AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
-MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
-IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
-IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
-wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
-by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
-zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
-YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
-oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
-EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
-hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
-EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
-jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
-iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
-ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
-WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
-JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
-K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
-Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
-4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
-2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
-lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
-OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
-vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
------END CERTIFICATE-----
-
-Trustis FPS Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
-EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
-IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
-BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
-RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
-H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
-cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
-o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
-AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
-BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
-GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
-yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
-8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
-l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
-iB6XzCGcKQENZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
-StartCom Certification Authority
-================================
------BEGIN CERTIFICATE-----
-MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
-ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
-NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
-LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
-U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
-ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
-o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
-Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
-eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
-2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
-6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
-osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
-untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
-UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
-VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
-Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
-dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
-c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
-bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
-aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
-L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
-fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
-N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
-Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
-tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
-e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
-2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
-HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
-JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
-D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
------END CERTIFICATE-----
-
-StartCom Certification Authority G2
-===================================
------BEGIN CERTIFICATE-----
-MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
-U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
-ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
-o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
-4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
-Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
-Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
-O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
-vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
-nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
-FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
-z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
-BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
-KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
-2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
-J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
-JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
-/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
-nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
-blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
-l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
-7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
-obp573PYtlNXLfbQ4ddI
------END CERTIFICATE-----
-
-Buypass Class 2 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
-DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
-g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
-9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
-/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
-CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
-awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
-zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
-Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
-Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
-M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
-A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
-osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
-aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
-DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
-LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
-oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
-wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
-CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
-rJgWVqA=
------END CERTIFICATE-----
-
-Buypass Class 3 Root CA
-=======================
------BEGIN CERTIFICATE-----
-MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
-QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
-DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
-eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
-sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
-5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
-7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
-ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
-2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
-/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
-RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
-Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
-j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
-AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
-cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
-uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
-Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
-ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
-KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
-6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
-UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
-eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
-Cp/HuZc=
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 3
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
-MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
-9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
-NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
-iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
-0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
-AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
-fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
-ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
-P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
-e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
------END CERTIFICATE-----
-
-EE Certification Centre Root CA
-===============================
------BEGIN CERTIFICATE-----
-MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
-EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
-dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
-MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
-UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
-ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
-TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
-rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
-93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
-P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
-MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
-BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
-xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
-lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
-uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
-3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
-dcGWxZ0=
------END CERTIFICATE-----
-
-TURKTRUST Certificate Services Provider Root 2007
-=================================================
------BEGIN CERTIFICATE-----
-MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
-MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
-DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
-a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
-BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
-bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
-YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
-KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
-KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
-rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
-AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
-BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
-Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
-aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
-Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
-BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
-poRq0Tl9
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 2009
-==============================
------BEGIN CERTIFICATE-----
-MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
-Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
-LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
-ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
-BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
-KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
-p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
-AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
-4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
-eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
-MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
-PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
-OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
-2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
-o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
-dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
-X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
------END CERTIFICATE-----
-
-D-TRUST Root Class 3 CA 2 EV 2009
-=================================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
-DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
-OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
-egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
-zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
-7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
-sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
-11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
-cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
-ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
-MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
-b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
-c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
-PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
-nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
-ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
-NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
-w9y4AyHqnxbxLFS1
------END CERTIFICATE-----
-
-PSCProcert
-==========
------BEGIN CERTIFICATE-----
-MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
-ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
-MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
-dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
-cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
-IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
-MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
-DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
-ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
-Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
-wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
-3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
-RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
-EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
-0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
-0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
-td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
-Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
-r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
-AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
-Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
-xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
-ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
-EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
-Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
-ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
-9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
-MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
-LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
-ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
-YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
-Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
-dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
-T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
-g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
-uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
-n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
-FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
-5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
-3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
-poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
-eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
------END CERTIFICATE-----
-
-China Internet Network Information Center EV Certificates Root
-==============================================================
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
-BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
-aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
-Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
-A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
-PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
-cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
-jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
-98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
-klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
-KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
-7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
-glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
-0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
-7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
-ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
-5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
------END CERTIFICATE-----
-
-Swisscom Root CA 2
-==================
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG
-EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
-dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2
-MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
-aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC
-IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM
-LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo
-ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ
-wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH
-Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a
-SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS
-NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab
-mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY
-Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3
-qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O
-BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu
-MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO
-v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ
-82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz
-o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs
-a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx
-OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW
-mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o
-+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC
-rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX
-5OfNeOI5wSsSnqaeG8XmDtkx2Q==
------END CERTIFICATE-----
-
-Swisscom Root EV CA 2
-=====================
------BEGIN CERTIFICATE-----
-MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE
-BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl
-cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN
-MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
-HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg
-Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz
-o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy
-Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti
-GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li
-qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH
-Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG
-alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa
-m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox
-bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi
-xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/
-BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED
-MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB
-bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL
-j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU
-wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7
-XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH
-59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/
-23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq
-J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA
-HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi
-uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW
-l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
------END CERTIFICATE-----
-
-CA Disig Root R1
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
-3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
-u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
-m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
-CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
-YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
-vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
-LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
-ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
-XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
-04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
-xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
-LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
-CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
-VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
-YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
-ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
-lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
-UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
-a7+h89n07eLw4+1knj0vllJPgFOL
------END CERTIFICATE-----
-
-CA Disig Root R2
-================
------BEGIN CERTIFICATE-----
-MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
-EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
-ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
-EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
-c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
-w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
-xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
-A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
-GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
-g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
-5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
-koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
-Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
-Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
-Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
-tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
-sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
-dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
-1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
-mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
-utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
-sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
-UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
-7+ZtsH8tZ/3zbBt1RqPlShfppNcL
------END CERTIFICATE-----
-
-ACCVRAIZ1
-=========
------BEGIN CERTIFICATE-----
-MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
-SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
-MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
-UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
-DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
-jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
-RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
-aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
-0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
-WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
-8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
-5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
-9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
-Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
-Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
-Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
-VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
-Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
-QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
-AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
-YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
-AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
-IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
-aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
-dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
-MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
-hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
-R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
-YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
-nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
-TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
-sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
-I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
-Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
-3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
-EfbRD0tVNEYqi4Y7
------END CERTIFICATE-----
-
-TWCA Global Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
-CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
-QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
-EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
-Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
-nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
-r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
-Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
-tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
-KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
-sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
-yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
-kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
-zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
-AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
-cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
-LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
-8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
-/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
-lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
-A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
-i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
-EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
-zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
------END CERTIFICATE-----
-
-TeliaSonera Root CA v1
-======================
------BEGIN CERTIFICATE-----
-MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
-CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
-MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
-VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
-6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
-3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
-B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
-Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
-oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
-F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
-oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
-gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
-TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
-AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
-DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
-zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
-0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
-pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
-G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
-c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
-JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
-qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
-Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
-WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
------END CERTIFICATE-----
-
-E-Tugra Certification Authority
-===============================
------BEGIN CERTIFICATE-----
-MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
-DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
-ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
-ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
-NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
-QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
-cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
-DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
-hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
-CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
-ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
-BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
-E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
-rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
-jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
-rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
-dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
-/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
-kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
-XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
-VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
-a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
-dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
-KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
-Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
-8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
-C7TbO6Orb1wdtn7os4I07QZcJA==
------END CERTIFICATE-----
-
-T-TeleSec GlobalRoot Class 2
-============================
------BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
-IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
-cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
-MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
-dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
-ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
-SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
-vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
-2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
-WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
-YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
-r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
-vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
-3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
-9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
------END CERTIFICATE-----
-
-Atos TrustedRoot 2011
-=====================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
-cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
-MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
-A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
-hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
-54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
-DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
-HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
-z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
-l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
-bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
-k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
-TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
-61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
-3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
------END CERTIFICATE-----
-
-QuoVadis Root CA 1 G3
-=====================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG
-A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
-b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg
-RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE
-PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm
-PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6
-Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN
-ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l
-g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV
-7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX
-9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f
-iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg
-t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI
-hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC
-MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3
-GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct
-Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP
-+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh
-3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa
-wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6
-O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0
-FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV
-hMJKzRwuJIczYOXD
------END CERTIFICATE-----
-
-QuoVadis Root CA 2 G3
-=====================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG
-A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
-b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg
-RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh
-ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY
-NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t
-oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o
-MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l
-V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo
-L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ
-sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD
-6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh
-lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI
-hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66
-AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K
-pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9
-x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz
-dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X
-U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw
-mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD
-zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN
-JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr
-O3jtZsSOeWmD3n+M
------END CERTIFICATE-----
-
-QuoVadis Root CA 3 G3
-=====================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG
-A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
-b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg
-RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286
-IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL
-Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe
-6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3
-I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U
-VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7
-5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi
-Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM
-dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt
-rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI
-hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px
-KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS
-t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ
-TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du
-DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib
-Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD
-hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX
-0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW
-dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2
-PpxxVJkES/1Y+Zj0
------END CERTIFICATE-----
-
-DigiCert Assured ID Root G2
-===========================
------BEGIN CERTIFICATE-----
-MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
-IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
-MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
-ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
-35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
-bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
-VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
-YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
-lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
-w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
-0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
-d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
-hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
-jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
-IhNzbM8m9Yop5w==
------END CERTIFICATE-----
-
-DigiCert Assured ID Root G3
-===========================
------BEGIN CERTIFICATE-----
-MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
-UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
-VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
-MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
-BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
-RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
-KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
-UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
-YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
-1vUhZscv6pZjamVFkpUBtA==
------END CERTIFICATE-----
-
-DigiCert Global Root G2
-=======================
------BEGIN CERTIFICATE-----
-MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
-HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
-MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
-dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
-kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
-3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
-BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
-UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
-o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
-5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
-F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
-WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
-QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
-iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
-MrY=
------END CERTIFICATE-----
-
-DigiCert Global Root G3
-=======================
------BEGIN CERTIFICATE-----
-MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
-UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
-VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
-MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
-aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
-AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
-YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
-BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
-Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
-3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
-VOKa5Vt8sycX
------END CERTIFICATE-----
-
-DigiCert Trusted Root G4
-========================
------BEGIN CERTIFICATE-----
-MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
-HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
-MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G
-CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp
-pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o
-k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa
-vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY
-QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6
-MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm
-mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
-f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH
-dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8
-oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
-DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
-ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY
-ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr
-yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy
-7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah
-ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN
-5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb
-/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa
-5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK
-G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
-82Z+
------END CERTIFICATE-----
-
-WoSign
-======
------BEGIN CERTIFICATE-----
-MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
-EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g
-QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ
-BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
-vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO
-CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX
-2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5
-KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR
-+ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez
-EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk
-lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2
-8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY
-yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C
-AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R
-8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1
-LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq
-T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj
-y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC
-2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes
-5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
-EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh
-mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx
-kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi
-kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w==
------END CERTIFICATE-----
-
-WoSign China
-============
------BEGIN CERTIFICATE-----
-MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG
-EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv
-geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD
-VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k
-8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5
-uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85
-dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5
-Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy
-b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc
-76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m
-+Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6
-yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX
-GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA
-A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6
-yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY
-r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115
-j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A
-kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97
-qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y
-jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB
-ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv
-T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO
-kI26oQ==
------END CERTIFICATE-----
-
-COMODO RSA Certification Authority
-==================================
------BEGIN CERTIFICATE-----
-MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE
-BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
-A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC
-R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
-ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn
-dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ
-FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
-5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG
-x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX
-2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL
-OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3
-sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C
-GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5
-WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
-FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt
-rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+
-nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg
-tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW
-sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp
-pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA
-zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq
-ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52
-7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I
-LaZRfyHBNVOFBkpdn627G190
------END CERTIFICATE-----
-
-USERTrust RSA Certification Authority
-=====================================
------BEGIN CERTIFICATE-----
-MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE
-BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
-ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE
-BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
-ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz
-0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j
-Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn
-RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O
-+T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq
-/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE
-Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM
-lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8
-yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+
-eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
-BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW
-FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ
-7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ
-Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM
-8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi
-FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi
-yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c
-J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw
-sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx
-Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
------END CERTIFICATE-----
-
-USERTrust ECC Certification Authority
-=====================================
------BEGIN CERTIFICATE-----
-MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
-aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
-aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
-0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
-nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
-HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
-HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
-9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
------END CERTIFICATE-----
-
-GlobalSign ECC Root CA - R4
-===========================
------BEGIN CERTIFICATE-----
-MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
-OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
-AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
-MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
-JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
------END CERTIFICATE-----
-
-GlobalSign ECC Root CA - R5
-===========================
------BEGIN CERTIFICATE-----
-MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
-R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
-EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
-SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
-h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
-BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
-uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
-yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
------END CERTIFICATE-----
-
-Staat der Nederlanden Root CA - G3
-==================================
------BEGIN CERTIFICATE-----
-MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC
-TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
-ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y
-olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t
-x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy
-EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K
-Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur
-mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5
-1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp
-07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo
-FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
-41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB
-AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu
-yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
-U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq
-KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1
-v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA
-8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b
-8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r
-mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq
-1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI
-JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV
-tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk=
------END CERTIFICATE-----
-
-Staat der Nederlanden EV Root CA
-================================
------BEGIN CERTIFICATE-----
-MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE
-CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
-RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M
-MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl
-cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk
-SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW
-O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r
-0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8
-Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV
-XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr
-08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV
-0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd
-74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx
-fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa
-ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI
-eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu
-c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq
-5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN
-b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN
-f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi
-5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4
-WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK
-DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy
-eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
------END CERTIFICATE-----
-
-IdenTrust Commercial Root CA 1
-==============================
------BEGIN CERTIFICATE-----
-MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG
-EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS
-b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES
-MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB
-IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld
-hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/
-mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi
-1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C
-XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl
-3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy
-NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV
-WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg
-xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix
-uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
-AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI
-hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH
-6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg
-ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt
-ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV
-YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX
-feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro
-kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe
-2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz
-Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R
-cGzM7vRX+Bi6hG6H
------END CERTIFICATE-----
-
-IdenTrust Public Sector Root CA 1
-=================================
------BEGIN CERTIFICATE-----
-MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG
-EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv
-ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV
-UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS
-b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy
-P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6
-Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI
-rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf
-qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS
-mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn
-ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh
-LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v
-iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL
-4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B
-Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw
-DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj
-t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A
-mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt
-GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt
-m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx
-NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4
-Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI
-ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC
-ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ
-3Wl9af0AVqW3rLatt8o+Ae+c
------END CERTIFICATE-----
-
-Entrust Root Certification Authority - G2
-=========================================
------BEGIN CERTIFICATE-----
-MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
-BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
-bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
-b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
-HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
-DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
-OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
-/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
-HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
-s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
-TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
-AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
-0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
-iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
-Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
-nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
-vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
-e4pIb4tF9g==
------END CERTIFICATE-----
-
-Entrust Root Certification Authority - EC1
-==========================================
------BEGIN CERTIFICATE-----
-MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
-FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
-YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
-ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
-FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
-LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
-AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
-9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
-vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
-kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
------END CERTIFICATE-----
-
-CFCA EV ROOT
-============
------BEGIN CERTIFICATE-----
-MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE
-CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB
-IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw
-MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD
-DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV
-BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD
-7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN
-uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW
-ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7
-xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f
-py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K
-gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol
-hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ
-tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf
-BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
-/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB
-ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q
-ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua
-4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG
-E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX
-BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn
-aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy
-PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX
-kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C
-ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
------END CERTIFICATE-----
-
-TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
-====================================================
------BEGIN CERTIFICATE-----
-MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
-BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
-bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
-RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
-ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
-SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
-n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
-ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
-jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
-ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
-9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
-4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
-HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
-hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
-BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
-URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
-lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
-B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
------END CERTIFICATE-----
-
-TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
-====================================================
------BEGIN CERTIFICATE-----
-MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5
-MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL
-BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf
-aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm
-aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a
-2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED
-wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb
-HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV
-+DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT
-9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R
-fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
-o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW
-hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1
-O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw==
------END CERTIFICATE-----
-
-Certinomis - Root CA
-====================
------BEGIN CERTIFICATE-----
-MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
-Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg
-LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx
-EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD
-ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos
-P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo
-d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap
-z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00
-8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x
-RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE
-6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t
-FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV
-PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH
-i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj
-YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I
-6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF
-AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV
-WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw
-Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX
-lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ
-y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9
-Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng
-DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi
-I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM
-cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr
-hkIGuUE=
------END CERTIFICATE-----
-
-OISTE WISeKey Global Root GB CA
-===============================
------BEGIN CERTIFICATE-----
-MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
-EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
-ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
-MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
-VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
-b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
-scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
-rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
-9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
-Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
-GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
-hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
-dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
-VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
-HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
-Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
------END CERTIFICATE-----
-
-Certification Authority of WoSign G2
-====================================
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
-EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
-CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
-XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
-W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
-5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
-v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
-AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
-hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
-P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
-TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
-+sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
-7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
------END CERTIFICATE-----
-
-CA WoSign ECC Root
-==================
------BEGIN CERTIFICATE-----
-MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
-TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
-dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
-ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
-zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
-t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
-QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
-MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
-Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
-a/GRspBl9JrmkO5K
------END CERTIFICATE-----
-
-SZAFIR ROOT CA2
-===============
------BEGIN CERTIFICATE-----
-MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
-A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
-BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
-BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
-VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
-qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
-DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
-2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
-ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
-ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
-AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
-AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
-O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
-oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
-4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
-+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
------END CERTIFICATE-----
-
-Certum Trusted Network CA 2
-===========================
------BEGIN CERTIFICATE-----
-MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
-BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
-bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
-ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
-TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
-IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
-7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
-CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
-Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
-uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
-GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
-9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
-Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
-hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
-BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
-hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
-Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
-L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
-clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
-pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
-w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
-J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
-ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
-is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
-zAYspsbiDrW5viSP
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions RootCA 2015
-=======================================================
------BEGIN CERTIFICATE-----
-MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
-BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
-aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
-YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
-MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
-QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
-BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
-MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
-bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
-iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
-6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
-FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
-i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
-GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
-fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
-iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
-Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
-AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
-hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
-D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
-d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
-d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
-82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
-davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
-Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
-J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
-JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
-p/UsQu0yrbYhnr68
------END CERTIFICATE-----
-
-Hellenic Academic and Research Institutions ECC RootCA 2015
-===========================================================
------BEGIN CERTIFICATE-----
-MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
-aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
-cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
-aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
-MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
-IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
-VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
-Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
-dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
-Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
-BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
-GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
-dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
------END CERTIFICATE-----
-
-Certplus Root CA G1
-===================
------BEGIN CERTIFICATE-----
-MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV
-BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe
-Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD
-ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN
-r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx
-Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj
-BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv
-LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2
-z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc
-4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd
-4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj
-jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+
-ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G
-A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY
-lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh
-66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG
-YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/
-2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F
-6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX
-CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe
-tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC
-VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/
-+mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+
-qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
------END CERTIFICATE-----
-
-Certplus Root CA G2
-===================
------BEGIN CERTIFICATE-----
-MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
-AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
-NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
-cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
-BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
-Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
-IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
-HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
-vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
------END CERTIFICATE-----
-
-OpenTrust Root CA G1
-====================
------BEGIN CERTIFICATE-----
-MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx
-MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
-CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa
-Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87
-ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO
-YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9
-xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO
-9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq
-3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi
-n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9
-URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr
-TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px
-N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E
-PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv
-uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK
-n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh
-X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80
-nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm
-GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/
-bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o
-4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA
-OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
------END CERTIFICATE-----
-
-OpenTrust Root CA G2
-====================
------BEGIN CERTIFICATE-----
-MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV
-BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy
-MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
-CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+
-Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz
-4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV
-eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt
-UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz
-3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj
-3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz
-9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0
-0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT
-y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59
-M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz
-Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI
-mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG
-S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp
-EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ
-6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr
-gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo
-SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0
-YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm
-u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
------END CERTIFICATE-----
-
-OpenTrust Root CA G3
-====================
------BEGIN CERTIFICATE-----
-MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
-AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
-DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
-ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
-IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
-ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
-/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
-BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
-BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
-3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
------END CERTIFICATE-----
-
-ISRG Root X1
-============
------BEGIN CERTIFICATE-----
-MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
-BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
-EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
-EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
-DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
-Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
-3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
-b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
-Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
-4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
-1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
-hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
-usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
-OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
-A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
-9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
-ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
-0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
-hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
-TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
-e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
-JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
-YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
-JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
-m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
------END CERTIFICATE-----
diff --git a/server/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php b/server/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php
deleted file mode 100644
index 60a2a7f..0000000
--- a/server/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth\Tests;
-
-use Abraham\TwitterOAuth\SignatureMethod;
-
-abstract class AbstractSignatureMethodTest extends \PHPUnit_Framework_TestCase
-{
- protected $name;
-
- /**
- * @return SignatureMethod
- */
- abstract public function getClass();
-
- abstract protected function signatureDataProvider();
-
- public function testGetName()
- {
- $this->assertEquals($this->name, $this->getClass()->getName());
- }
-
- /**
- * @dataProvider signatureDataProvider
- */
- public function testBuildSignature($expected, $request, $consumer, $token)
- {
- $this->assertEquals($expected, $this->getClass()->buildSignature($request, $consumer, $token));
- }
-
- protected function getRequest()
- {
- return $this->getMockBuilder('Abraham\TwitterOAuth\Request')
- ->disableOriginalConstructor()
- ->getMock();
- }
-
- protected function getConsumer($key = null, $secret = null, $callbackUrl = null)
- {
- return $this->getMockBuilder('Abraham\TwitterOAuth\Consumer')
- ->setConstructorArgs(array($key, $secret, $callbackUrl))
- ->getMock();
- }
-
- protected function getToken($key = null, $secret = null)
- {
- return $this->getMockBuilder('Abraham\TwitterOAuth\Token')
- ->setConstructorArgs(array($key, $secret))
- ->getMock();
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/tests/ConsumerTest.php b/server/vendor/abraham/twitteroauth/tests/ConsumerTest.php
deleted file mode 100644
index 3ec810a..0000000
--- a/server/vendor/abraham/twitteroauth/tests/ConsumerTest.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth\Tests;
-
-use Abraham\TwitterOAuth\Consumer;
-
-class ConsumerTest extends \PHPUnit_Framework_TestCase {
- public function testToString()
- {
- $key = uniqid();
- $secret = uniqid();
- $consumer = new Consumer($key, $secret);
-
- $this->assertEquals("Consumer[key=$key,secret=$secret]", $consumer->__toString());
- }
-} \ No newline at end of file
diff --git a/server/vendor/abraham/twitteroauth/tests/HmacSha1Test.php b/server/vendor/abraham/twitteroauth/tests/HmacSha1Test.php
deleted file mode 100644
index c17ce26..0000000
--- a/server/vendor/abraham/twitteroauth/tests/HmacSha1Test.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth\Tests;
-
-use Abraham\TwitterOAuth\HmacSha1;
-
-class HmacSha1Test extends AbstractSignatureMethodTest
-{
- protected $name = 'HMAC-SHA1';
-
- public function getClass()
- {
- return new HmacSha1();
- }
-
- public function signatureDataProvider()
- {
- return array(
- array('5CoEcoq7XoKFjwYCieQvuzadeUA=', $this->getRequest(), $this->getConsumer(), $this->getToken()),
- array(
- 'EBw0gHngam3BTx8kfPfNNSyKem4=',
- $this->getRequest(),
- $this->getConsumer('key', 'secret'),
- $this->getToken()
- ),
- array(
- 'kDsHFZzws2a5M6cAQjfpdNBo+v8=',
- $this->getRequest(),
- $this->getConsumer('key', 'secret'),
- $this->getToken('key', 'secret')
- ),
- array('EBw0gHngam3BTx8kfPfNNSyKem4=', $this->getRequest(), $this->getConsumer('key', 'secret'), null),
- );
- }
-} \ No newline at end of file
diff --git a/server/vendor/abraham/twitteroauth/tests/TokenTest.php b/server/vendor/abraham/twitteroauth/tests/TokenTest.php
deleted file mode 100644
index c7b36a4..0000000
--- a/server/vendor/abraham/twitteroauth/tests/TokenTest.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth\Tests;
-
-use Abraham\TwitterOAuth\Token;
-
-class TokenTest extends \PHPUnit_Framework_TestCase {
- /**
- * @dataProvider tokenProvider
- */
- public function testToString($expected, $key, $secret)
- {
- $token = new Token($key, $secret);
-
- $this->assertEquals($expected, $token->__toString());
- }
-
- public function tokenProvider()
- {
- return array(
- array('oauth_token=key&oauth_token_secret=secret', 'key', 'secret'),
- array('oauth_token=key%2Bkey&oauth_token_secret=secret', 'key+key', 'secret'),
- array('oauth_token=key~key&oauth_token_secret=secret', 'key~key', 'secret'),
- );
- }
-} \ No newline at end of file
diff --git a/server/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php b/server/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php
deleted file mode 100644
index 6b72995..0000000
--- a/server/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-/**
- * WARNING: Running these tests will post and delete through the actual Twitter account.
- */
-namespace Abraham\TwitterOAuth\Test;
-
-use Abraham\TwitterOAuth\TwitterOAuth;
-
-class TwitterOAuthTest extends \PHPUnit_Framework_TestCase
-{
- /** @var TwitterOAuth */
- protected $twitter;
-
- protected function setUp()
- {
- $this->twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
- }
-
- public function testBuildClient()
- {
- $this->assertObjectHasAttribute('consumer', $this->twitter);
- $this->assertObjectHasAttribute('token', $this->twitter);
- }
-
- public function testSetOauthToken()
- {
- $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
- $twitter->setOauthToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
- $this->assertObjectHasAttribute('consumer', $twitter);
- $this->assertObjectHasAttribute('token', $twitter);
- $twitter->get('friendships/show', array('target_screen_name' => 'twitterapi'));
- $this->assertEquals(200, $twitter->getLastHttpCode());
- }
-
- public function testOauth2Token()
- {
- $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
- $result = $twitter->oauth2('oauth2/token', array('grant_type' => 'client_credentials'));
- $this->assertEquals(200, $twitter->getLastHttpCode());
- $this->assertObjectHasAttribute('token_type', $result);
- $this->assertObjectHasAttribute('access_token', $result);
- $this->assertEquals('bearer', $result->token_type);
- return $result;
- }
-
- /**
- * @depends testOauth2Token
- */
- public function testBearerToken($accessToken)
- {
- $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, null, $accessToken->access_token);
- $result = $twitter->get('statuses/user_timeline', array('screen_name' => 'twitterapi'));
- if ($twitter->getLastHttpCode() !== 200) {
- $this->assertEquals('foo', substr($accessToken->access_token, 0, 75));
- $this->assertEquals('foo', print_r($result, true));
- }
- $this->assertEquals(200, $twitter->getLastHttpCode());
- return $accessToken;
- }
-
- // This causes issues for parallel run tests.
- // /**
- // * @depends testBearerToken
- // */
- // public function testOauth2TokenInvalidate($accessToken)
- // {
- // $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
- // // HACK: access_token is already urlencoded but gets urlencoded again breaking the invalidate request.
- // $result = $twitter->oauth2(
- // 'oauth2/invalidate_token',
- // array('access_token' => urldecode($accessToken->access_token))
- // );
- // $this->assertEquals(200, $twitter->getLastHttpCode());
- // $this->assertObjectHasAttribute('access_token', $result);
- // return $result;
- // }
-
- public function testOauthRequestToken()
- {
- $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
- $result = $twitter->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));
- $this->assertEquals(200, $twitter->getLastHttpCode());
- $this->assertArrayHasKey('oauth_token', $result);
- $this->assertArrayHasKey('oauth_token_secret', $result);
- $this->assertArrayHasKey('oauth_callback_confirmed', $result);
- $this->assertEquals('true', $result['oauth_callback_confirmed']);
- return $result;
- }
-
- /**
- * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException
- * @expectedExceptionMessage Could not authenticate you
- */
- public function testOauthRequestTokenException()
- {
- $twitter = new TwitterOAuth('CONSUMER_KEY', 'CONSUMER_SECRET');
- $result = $twitter->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));
- return $result;
- }
-
- /**
- * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException
- * @expectedExceptionMessage Invalid oauth_verifier parameter
- * @depends testOauthRequestToken
- */
- public function testOauthAccessTokenTokenException(array $requestToken)
- {
- // Can't test this without a browser logging into Twitter so check for the correct error instead.
- $twitter = new TwitterOAuth(
- CONSUMER_KEY,
- CONSUMER_SECRET,
- $requestToken['oauth_token'],
- $requestToken['oauth_token_secret']
- );
- $twitter->oauth("oauth/access_token", array("oauth_verifier" => "fake_oauth_verifier"));
- }
-
- public function testUrl()
- {
- $url = $this->twitter->url('oauth/authorize', array('foo' => 'bar', 'baz' => 'qux'));
- $this->assertEquals('https://api.twitter.com/oauth/authorize?foo=bar&baz=qux', $url);
- }
-
- public function testGetAccountVerifyCredentials()
- {
- // Include entities boolean added to test parameter value cohearsion
- $this->twitter->get('account/verify_credentials', array("include_entities" => false));
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- }
-
- // BUG: testing is too unreliable for now
- // public function testSetProxy()
- // {
- // $this->twitter->setProxy(array(
- // 'CURLOPT_PROXY' => PROXY,
- // 'CURLOPT_PROXYUSERPWD' => PROXYUSERPWD,
- // 'CURLOPT_PROXYPORT' => PROXYPORT,
- // ));
- // $this->twitter->setTimeouts(60, 60);
- // $result = $this->twitter->get('account/verify_credentials');
- // $this->assertEquals(200, $this->twitter->getLastHttpCode());
- // $this->assertObjectHasAttribute('id', $result);
- // }
-
- public function testGetStatusesMentionsTimeline()
- {
- $this->twitter->get('statuses/mentions_timeline');
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- }
-
- public function testGetSearchTweets()
- {
- $result = $this->twitter->get('search/tweets', array('q' => 'twitter'));
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- return $result->statuses;
- }
-
- /**
- * @depends testGetSearchTweets
- */
- public function testGetSearchTweetsWithMaxId($statuses)
- {
- $maxId = array_pop($statuses)->id_str;
- $this->twitter->get('search/tweets', array('q' => 'twitter', 'max_id' => $maxId));
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- }
-
- public function testPostFavoritesCreate()
- {
- $result = $this->twitter->post('favorites/create', array('id' => '6242973112'));
- if ($this->twitter->getLastHttpCode() == 403) {
- // Status already favorited
- $this->assertEquals(139, $result->errors[0]->code);
- } else {
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- }
- }
-
- /**
- * @depends testPostFavoritesCreate
- */
- public function testPostFavoritesDestroy()
- {
- $this->twitter->post('favorites/destroy', array('id' => '6242973112'));
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- }
-
- public function testPostStatusesUpdateWithMedia()
- {
- $this->twitter->setTimeouts(60, 30);
- // Image source https://www.flickr.com/photos/titrans/8548825587/
- $file_path = __DIR__ . '/kitten.jpg';
- $result = $this->twitter->upload('media/upload', array('media' => $file_path));
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- $this->assertObjectHasAttribute('media_id_string', $result);
- $parameters = array('status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string);
- $result = $this->twitter->post('statuses/update', $parameters);
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- if ($this->twitter->getLastHttpCode() == 200) {
- $result = $this->twitter->post('statuses/destroy/' . $result->id_str);
- }
- return $result;
- }
-
- public function testPostStatusesUpdateWithMediaChunked()
- {
- $this->twitter->setTimeouts(60, 30);
- // Video source http://www.sample-videos.com/
- $file_path = __DIR__ . '/video.mp4';
- $result = $this->twitter->upload('media/upload', array('media' => $file_path, 'media_type' => 'video/mp4'), true);
- $this->assertEquals(201, $this->twitter->getLastHttpCode());
- $this->assertObjectHasAttribute('media_id_string', $result);
- $parameters = array('status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string);
- $result = $this->twitter->post('statuses/update', $parameters);
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- if ($this->twitter->getLastHttpCode() == 200) {
- $result = $this->twitter->post('statuses/destroy/' . $result->id_str);
- }
- return $result;
- }
-
- public function testPostStatusesUpdateUtf8()
- {
- $result = $this->twitter->post('statuses/update', array('status' => 'xこんにちは世界 ' . time()));
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- return $result;
- }
-
- /**
- * @depends testPostStatusesUpdateUtf8
- */
- public function testPostStatusesDestroy($status)
- {
- $this->twitter->post('statuses/destroy/' . $status->id_str);
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- }
-
- public function testLastResult()
- {
- $this->twitter->get('search/tweets', array('q' => 'twitter'));
- $this->assertEquals('search/tweets', $this->twitter->getLastApiPath());
- $this->assertEquals(200, $this->twitter->getLastHttpCode());
- $this->assertObjectHasAttribute('statuses', $this->twitter->getLastBody());
- }
-
- /**
- * @depends testLastResult
- */
- public function testResetLastResponse()
- {
- $this->twitter->resetLastResponse();
- $this->assertEquals('', $this->twitter->getLastApiPath());
- $this->assertEquals(0, $this->twitter->getLastHttpCode());
- $this->assertEquals(array(), $this->twitter->getLastBody());
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php b/server/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php
deleted file mode 100644
index 85c6a75..0000000
--- a/server/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-namespace Abraham\TwitterOAuth\Tests;
-
-use Abraham\TwitterOAuth\Util\JsonDecoder;
-
-class JsonDecoderTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * @dataProvider jsonProvider
- */
- public function testDecode($input, $asArray, $expected)
- {
- $this->assertEquals($expected, JsonDecoder::decode($input, $asArray));
- }
-
- public function jsonProvider()
- {
- return array(
- array('[]', true, array()),
- array('[1,2,3]', true, array(1, 2, 3)),
- array('[{"id": 556179961825226750}]', true, array(array('id' => 556179961825226750))),
- array('[]', false, array()),
- array('[1,2,3]', false, array(1, 2, 3)),
- array(
- '[{"id": 556179961825226750}]',
- false,
- array(
- $this->getClass(function ($object) {
- $object->id = 556179961825226750;
- return $object;
- })
- )
- ),
-
- );
- }
-
- /**
- * @param callable $callable
- *
- * @return stdClass
- */
- private function getClass(\Closure $callable)
- {
- $object = new \stdClass();
-
- return $callable($object);
- }
-}
diff --git a/server/vendor/abraham/twitteroauth/tests/bootstrap.php b/server/vendor/abraham/twitteroauth/tests/bootstrap.php
deleted file mode 100644
index 7cc9c27..0000000
--- a/server/vendor/abraham/twitteroauth/tests/bootstrap.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-require __DIR__ . '/../vendor/autoload.php';
-
-define('CONSUMER_KEY', getenv('TEST_CONSUMER_KEY'));
-define('CONSUMER_SECRET', getenv('TEST_CONSUMER_SECRET'));
-define('ACCESS_TOKEN', getenv('TEST_ACCESS_TOKEN'));
-define('ACCESS_TOKEN_SECRET', getenv('TEST_ACCESS_TOKEN_SECRET'));
-define('OAUTH_CALLBACK', getenv('TEST_OAUTH_CALLBACK'));
-define('PROXY', getenv('TEST_CURLOPT_PROXY'));
-define('PROXYUSERPWD', getenv('TEST_CURLOPT_PROXYUSERPWD'));
-define('PROXYPORT', getenv('TEST_CURLOPT_PROXYPORT'));
diff --git a/server/vendor/abraham/twitteroauth/tests/kitten.jpg b/server/vendor/abraham/twitteroauth/tests/kitten.jpg
deleted file mode 100644
index 47006b4..0000000
--- a/server/vendor/abraham/twitteroauth/tests/kitten.jpg
+++ /dev/null
Binary files differ
diff --git a/server/vendor/abraham/twitteroauth/tests/sample_env b/server/vendor/abraham/twitteroauth/tests/sample_env
deleted file mode 100644
index 64e07fd..0000000
--- a/server/vendor/abraham/twitteroauth/tests/sample_env
+++ /dev/null
@@ -1,13 +0,0 @@
-# WARNING: Running the tests will perform live actions as the Twitter account.
-# Set all values, move to `env`, run `source tests/env` and `phpunit` to start testing.
-
-# To run the tests you must register Twitter application at https://app.twitter.com/.
-export TEST_CONSUMER_KEY=
-export TEST_CONSUMER_SECRET=
-export TEST_ACCESS_TOKEN=
-export TEST_ACCESS_TOKEN_SECRET=
-export TEST_OAUTH_CALLBACK=
-# You can find proxies for testing at http://proxylist.hidemyass.com/.
-export TEST_CURLOPT_PROXY=
-export TEST_CURLOPT_PROXYUSERPWD=
-export TEST_CURLOPT_PROXYPORT=
diff --git a/server/vendor/abraham/twitteroauth/tests/video.mp4 b/server/vendor/abraham/twitteroauth/tests/video.mp4
deleted file mode 100644
index 1fc4788..0000000
--- a/server/vendor/abraham/twitteroauth/tests/video.mp4
+++ /dev/null
Binary files differ
diff --git a/server/vendor/autoload.php b/server/vendor/autoload.php
deleted file mode 100644
index 522a5c0..0000000
--- a/server/vendor/autoload.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-// autoload.php @generated by Composer
-
-require_once __DIR__ . '/composer/autoload_real.php';
-
-return ComposerAutoloaderInit509ee4e79733fbe3199b97373b795eca::getLoader();
diff --git a/server/vendor/composer/ClassLoader.php b/server/vendor/composer/ClassLoader.php
deleted file mode 100644
index 4626994..0000000
--- a/server/vendor/composer/ClassLoader.php
+++ /dev/null
@@ -1,441 +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\Autoload;
-
-/**
- * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
- *
- * $loader = new \Composer\Autoload\ClassLoader();
- *
- * // register classes with namespaces
- * $loader->add('Symfony\Component', __DIR__.'/component');
- * $loader->add('Symfony', __DIR__.'/framework');
- *
- * // activate the autoloader
- * $loader->register();
- *
- * // to enable searching the include path (eg. for PEAR packages)
- * $loader->setUseIncludePath(true);
- *
- * In this example, if you try to use a class in the Symfony\Component
- * namespace or one of its children (Symfony\Component\Console for instance),
- * the autoloader will first look for the class under the component/
- * directory, and it will then fallback to the framework/ directory if not
- * found before giving up.
- *
- * This class is loosely based on the Symfony UniversalClassLoader.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Jordi Boggiano <j.boggiano@seld.be>
- * @see http://www.php-fig.org/psr/psr-0/
- * @see http://www.php-fig.org/psr/psr-4/
- */
-class ClassLoader
-{
- // PSR-4
- private $prefixLengthsPsr4 = array();
- private $prefixDirsPsr4 = array();
- private $fallbackDirsPsr4 = array();
-
- // PSR-0
- private $prefixesPsr0 = array();
- private $fallbackDirsPsr0 = array();
-
- private $useIncludePath = false;
- private $classMap = array();
- private $classMapAuthoritative = false;
- private $missingClasses = array();
- private $apcuPrefix;
-
- public function getPrefixes()
- {
- if (!empty($this->prefixesPsr0)) {
- return call_user_func_array('array_merge', $this->prefixesPsr0);
- }
-
- return array();
- }
-
- public function getPrefixesPsr4()
- {
- return $this->prefixDirsPsr4;
- }
-
- public function getFallbackDirs()
- {
- return $this->fallbackDirsPsr0;
- }
-
- public function getFallbackDirsPsr4()
- {
- return $this->fallbackDirsPsr4;
- }
-
- public function getClassMap()
- {
- return $this->classMap;
- }
-
- /**
- * @param array $classMap Class to filename map
- */
- public function addClassMap(array $classMap)
- {
- if ($this->classMap) {
- $this->classMap = array_merge($this->classMap, $classMap);
- } else {
- $this->classMap = $classMap;
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix, either
- * appending or prepending to the ones previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param array|string $paths The PSR-0 root directories
- * @param bool $prepend Whether to prepend the directories
- */
- public function add($prefix, $paths, $prepend = false)
- {
- if (!$prefix) {
- if ($prepend) {
- $this->fallbackDirsPsr0 = array_merge(
- (array) $paths,
- $this->fallbackDirsPsr0
- );
- } else {
- $this->fallbackDirsPsr0 = array_merge(
- $this->fallbackDirsPsr0,
- (array) $paths
- );
- }
-
- return;
- }
-
- $first = $prefix[0];
- if (!isset($this->prefixesPsr0[$first][$prefix])) {
- $this->prefixesPsr0[$first][$prefix] = (array) $paths;
-
- return;
- }
- if ($prepend) {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- (array) $paths,
- $this->prefixesPsr0[$first][$prefix]
- );
- } else {
- $this->prefixesPsr0[$first][$prefix] = array_merge(
- $this->prefixesPsr0[$first][$prefix],
- (array) $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace, either
- * appending or prepending to the ones previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-4 base directories
- * @param bool $prepend Whether to prepend the directories
- *
- * @throws \InvalidArgumentException
- */
- public function addPsr4($prefix, $paths, $prepend = false)
- {
- if (!$prefix) {
- // Register directories for the root namespace.
- if ($prepend) {
- $this->fallbackDirsPsr4 = array_merge(
- (array) $paths,
- $this->fallbackDirsPsr4
- );
- } else {
- $this->fallbackDirsPsr4 = array_merge(
- $this->fallbackDirsPsr4,
- (array) $paths
- );
- }
- } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
- // Register directories for a new namespace.
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
- } elseif ($prepend) {
- // Prepend directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- (array) $paths,
- $this->prefixDirsPsr4[$prefix]
- );
- } else {
- // Append directories for an already registered namespace.
- $this->prefixDirsPsr4[$prefix] = array_merge(
- $this->prefixDirsPsr4[$prefix],
- (array) $paths
- );
- }
- }
-
- /**
- * Registers a set of PSR-0 directories for a given prefix,
- * replacing any others previously set for this prefix.
- *
- * @param string $prefix The prefix
- * @param array|string $paths The PSR-0 base directories
- */
- public function set($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr0 = (array) $paths;
- } else {
- $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
- }
- }
-
- /**
- * Registers a set of PSR-4 directories for a given namespace,
- * replacing any others previously set for this namespace.
- *
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-4 base directories
- *
- * @throws \InvalidArgumentException
- */
- public function setPsr4($prefix, $paths)
- {
- if (!$prefix) {
- $this->fallbackDirsPsr4 = (array) $paths;
- } else {
- $length = strlen($prefix);
- if ('\\' !== $prefix[$length - 1]) {
- throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
- }
- $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
- $this->prefixDirsPsr4[$prefix] = (array) $paths;
- }
- }
-
- /**
- * Turns on searching the include path for class files.
- *
- * @param bool $useIncludePath
- */
- public function setUseIncludePath($useIncludePath)
- {
- $this->useIncludePath = $useIncludePath;
- }
-
- /**
- * Can be used to check if the autoloader uses the include path to check
- * for classes.
- *
- * @return bool
- */
- public function getUseIncludePath()
- {
- return $this->useIncludePath;
- }
-
- /**
- * Turns off searching the prefix and fallback directories for classes
- * that have not been registered with the class map.
- *
- * @param bool $classMapAuthoritative
- */
- public function setClassMapAuthoritative($classMapAuthoritative)
- {
- $this->classMapAuthoritative = $classMapAuthoritative;
- }
-
- /**
- * Should class lookup fail if not found in the current class map?
- *
- * @return bool
- */
- public function isClassMapAuthoritative()
- {
- return $this->classMapAuthoritative;
- }
-
- /**
- * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
- *
- * @param string|null $apcuPrefix
- */
- public function setApcuPrefix($apcuPrefix)
- {
- $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
- }
-
- /**
- * The APCu prefix in use, or null if APCu caching is not enabled.
- *
- * @return string|null
- */
- public function getApcuPrefix()
- {
- return $this->apcuPrefix;
- }
-
- /**
- * Registers this instance as an autoloader.
- *
- * @param bool $prepend Whether to prepend the autoloader or not
- */
- public function register($prepend = false)
- {
- spl_autoload_register(array($this, 'loadClass'), true, $prepend);
- }
-
- /**
- * Unregisters this instance as an autoloader.
- */
- public function unregister()
- {
- spl_autoload_unregister(array($this, 'loadClass'));
- }
-
- /**
- * Loads the given class or interface.
- *
- * @param string $class The name of the class
- * @return bool|null True if loaded, null otherwise
- */
- public function loadClass($class)
- {
- if ($file = $this->findFile($class)) {
- includeFile($file);
-
- return true;
- }
- }
-
- /**
- * Finds the path to the file where the class is defined.
- *
- * @param string $class The name of the class
- *
- * @return string|false The path if found, false otherwise
- */
- public function findFile($class)
- {
- // class map lookup
- if (isset($this->classMap[$class])) {
- return $this->classMap[$class];
- }
- if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
- return false;
- }
- if (null !== $this->apcuPrefix) {
- $file = apcu_fetch($this->apcuPrefix.$class, $hit);
- if ($hit) {
- return $file;
- }
- }
-
- $file = $this->findFileWithExtension($class, '.php');
-
- // Search for Hack files if we are running on HHVM
- if (false === $file && defined('HHVM_VERSION')) {
- $file = $this->findFileWithExtension($class, '.hh');
- }
-
- if (null !== $this->apcuPrefix) {
- apcu_add($this->apcuPrefix.$class, $file);
- }
-
- if (false === $file) {
- // Remember that this class does not exist.
- $this->missingClasses[$class] = true;
- }
-
- return $file;
- }
-
- private function findFileWithExtension($class, $ext)
- {
- // PSR-4 lookup
- $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
-
- $first = $class[0];
- if (isset($this->prefixLengthsPsr4[$first])) {
- foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
- if (0 === strpos($class, $prefix)) {
- foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-4 fallback dirs
- foreach ($this->fallbackDirsPsr4 as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
- return $file;
- }
- }
-
- // PSR-0 lookup
- if (false !== $pos = strrpos($class, '\\')) {
- // namespaced class name
- $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
- . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
- } else {
- // PEAR-like class name
- $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
- }
-
- if (isset($this->prefixesPsr0[$first])) {
- foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
- if (0 === strpos($class, $prefix)) {
- foreach ($dirs as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
- }
- }
- }
-
- // PSR-0 fallback dirs
- foreach ($this->fallbackDirsPsr0 as $dir) {
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
- return $file;
- }
- }
-
- // PSR-0 include paths.
- if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
- return $file;
- }
-
- return false;
- }
-}
-
-/**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- */
-function includeFile($file)
-{
- include $file;
-}
diff --git a/server/vendor/composer/LICENSE b/server/vendor/composer/LICENSE
deleted file mode 100644
index 1a28124..0000000
--- a/server/vendor/composer/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-
-Copyright (c) 2016 Nils Adermann, Jordi Boggiano
-
-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/server/vendor/composer/autoload_classmap.php b/server/vendor/composer/autoload_classmap.php
deleted file mode 100644
index 49923d6..0000000
--- a/server/vendor/composer/autoload_classmap.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-
-// autoload_classmap.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
- 'Abraham\\TwitterOAuth\\Config' => $vendorDir . '/abraham/twitteroauth/src/Config.php',
- 'Abraham\\TwitterOAuth\\Consumer' => $vendorDir . '/abraham/twitteroauth/src/Consumer.php',
- 'Abraham\\TwitterOAuth\\HmacSha1' => $vendorDir . '/abraham/twitteroauth/src/HmacSha1.php',
- 'Abraham\\TwitterOAuth\\Request' => $vendorDir . '/abraham/twitteroauth/src/Request.php',
- 'Abraham\\TwitterOAuth\\Response' => $vendorDir . '/abraham/twitteroauth/src/Response.php',
- 'Abraham\\TwitterOAuth\\SignatureMethod' => $vendorDir . '/abraham/twitteroauth/src/SignatureMethod.php',
- 'Abraham\\TwitterOAuth\\Token' => $vendorDir . '/abraham/twitteroauth/src/Token.php',
- 'Abraham\\TwitterOAuth\\TwitterOAuth' => $vendorDir . '/abraham/twitteroauth/src/TwitterOAuth.php',
- 'Abraham\\TwitterOAuth\\TwitterOAuthException' => $vendorDir . '/abraham/twitteroauth/src/TwitterOAuthException.php',
- 'Abraham\\TwitterOAuth\\Util' => $vendorDir . '/abraham/twitteroauth/src/Util.php',
- 'Abraham\\TwitterOAuth\\Util\\JsonDecoder' => $vendorDir . '/abraham/twitteroauth/src/Util/JsonDecoder.php',
- 'FastRoute\\BadRouteException' => $vendorDir . '/nikic/fast-route/src/BadRouteException.php',
- 'FastRoute\\DataGenerator' => $vendorDir . '/nikic/fast-route/src/DataGenerator.php',
- 'FastRoute\\DataGenerator\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
- 'FastRoute\\DataGenerator\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php',
- 'FastRoute\\DataGenerator\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php',
- 'FastRoute\\DataGenerator\\MarkBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/MarkBased.php',
- 'FastRoute\\DataGenerator\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php',
- 'FastRoute\\Dispatcher' => $vendorDir . '/nikic/fast-route/src/Dispatcher.php',
- 'FastRoute\\Dispatcher\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/CharCountBased.php',
- 'FastRoute\\Dispatcher\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php',
- 'FastRoute\\Dispatcher\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php',
- 'FastRoute\\Dispatcher\\MarkBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/MarkBased.php',
- 'FastRoute\\Dispatcher\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php',
- 'FastRoute\\Route' => $vendorDir . '/nikic/fast-route/src/Route.php',
- 'FastRoute\\RouteCollector' => $vendorDir . '/nikic/fast-route/src/RouteCollector.php',
- 'FastRoute\\RouteParser' => $vendorDir . '/nikic/fast-route/src/RouteParser.php',
- 'FastRoute\\RouteParser\\Std' => $vendorDir . '/nikic/fast-route/src/RouteParser/Std.php',
- 'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
- 'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
- 'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
- 'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
- 'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
- 'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
- 'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
- 'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
- 'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
- 'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
- 'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
- 'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
- 'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
- 'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
- 'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
- 'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
- 'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php',
- 'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
- 'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
- 'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
- 'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
- 'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
- 'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
- 'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
- 'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
- 'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php',
- 'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php',
- 'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
- 'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
- 'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php',
- 'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php',
- 'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php',
- 'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php',
- 'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php',
- 'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php',
- 'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php',
- 'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php',
- 'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php',
- 'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php',
- 'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php',
- 'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php',
- 'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php',
- 'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php',
- 'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php',
- 'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php',
- 'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php',
- 'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php',
- 'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php',
- 'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php',
- 'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php',
- 'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php',
- 'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php',
- 'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php',
- 'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php',
- 'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php',
- 'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php',
- 'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php',
- 'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
- 'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php',
- 'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php',
- 'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php',
- 'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php',
- 'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php',
- 'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
- 'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php',
- 'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
- 'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php',
- 'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php',
- 'Interop\\Container\\ContainerInterface' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php',
- 'Interop\\Container\\Exception\\ContainerException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php',
- 'Interop\\Container\\Exception\\NotFoundException' => $vendorDir . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php',
- 'LookupServer\\BruteForceMiddleware' => $baseDir . '/lib/BruteForceMiddleware.php',
- 'LookupServer\\Replication' => $baseDir . '/lib/Replication.php',
- 'LookupServer\\SignatureHandler' => $baseDir . '/lib/SignatureHandler.php',
- 'LookupServer\\Status' => $baseDir . '/lib/Status.php',
- 'LookupServer\\UserManager' => $baseDir . '/lib/UserManager.php',
- 'LookupServer\\Validator\\Email' => $baseDir . '/lib/Validator/Email.php',
- 'LookupServer\\Validator\\Twitter' => $baseDir . '/lib/Validator/Twitter.php',
- 'LookupServer\\Validator\\Website' => $baseDir . '/lib/Validator/Website.php',
- 'Pimple\\Container' => $vendorDir . '/pimple/pimple/src/Pimple/Container.php',
- 'Pimple\\ServiceProviderInterface' => $vendorDir . '/pimple/pimple/src/Pimple/ServiceProviderInterface.php',
- 'Pimple\\Tests\\Fixtures\\Invokable' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php',
- 'Pimple\\Tests\\Fixtures\\NonInvokable' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php',
- 'Pimple\\Tests\\Fixtures\\PimpleServiceProvider' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php',
- 'Pimple\\Tests\\Fixtures\\Service' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php',
- 'Pimple\\Tests\\PimpleServiceProviderInterfaceTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php',
- 'Pimple\\Tests\\PimpleTest' => $vendorDir . '/pimple/pimple/src/Pimple/Tests/PimpleTest.php',
- 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php',
- 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
- 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
- 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
- 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
- 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
- 'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
- 'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
- 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
- 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
- 'Slim\\App' => $vendorDir . '/slim/slim/Slim/App.php',
- 'Slim\\CallableResolver' => $vendorDir . '/slim/slim/Slim/CallableResolver.php',
- 'Slim\\CallableResolverAwareTrait' => $vendorDir . '/slim/slim/Slim/CallableResolverAwareTrait.php',
- 'Slim\\Collection' => $vendorDir . '/slim/slim/Slim/Collection.php',
- 'Slim\\Container' => $vendorDir . '/slim/slim/Slim/Container.php',
- 'Slim\\DefaultServicesProvider' => $vendorDir . '/slim/slim/Slim/DefaultServicesProvider.php',
- 'Slim\\DeferredCallable' => $vendorDir . '/slim/slim/Slim/DeferredCallable.php',
- 'Slim\\Exception\\ContainerException' => $vendorDir . '/slim/slim/Slim/Exception/ContainerException.php',
- 'Slim\\Exception\\ContainerValueNotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/ContainerValueNotFoundException.php',
- 'Slim\\Exception\\InvalidMethodException' => $vendorDir . '/slim/slim/Slim/Exception/InvalidMethodException.php',
- 'Slim\\Exception\\MethodNotAllowedException' => $vendorDir . '/slim/slim/Slim/Exception/MethodNotAllowedException.php',
- 'Slim\\Exception\\NotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/NotFoundException.php',
- 'Slim\\Exception\\SlimException' => $vendorDir . '/slim/slim/Slim/Exception/SlimException.php',
- 'Slim\\Handlers\\AbstractError' => $vendorDir . '/slim/slim/Slim/Handlers/AbstractError.php',
- 'Slim\\Handlers\\AbstractHandler' => $vendorDir . '/slim/slim/Slim/Handlers/AbstractHandler.php',
- 'Slim\\Handlers\\Error' => $vendorDir . '/slim/slim/Slim/Handlers/Error.php',
- 'Slim\\Handlers\\NotAllowed' => $vendorDir . '/slim/slim/Slim/Handlers/NotAllowed.php',
- 'Slim\\Handlers\\NotFound' => $vendorDir . '/slim/slim/Slim/Handlers/NotFound.php',
- 'Slim\\Handlers\\PhpError' => $vendorDir . '/slim/slim/Slim/Handlers/PhpError.php',
- 'Slim\\Handlers\\Strategies\\RequestResponse' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
- 'Slim\\Handlers\\Strategies\\RequestResponseArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
- 'Slim\\Http\\Body' => $vendorDir . '/slim/slim/Slim/Http/Body.php',
- 'Slim\\Http\\Cookies' => $vendorDir . '/slim/slim/Slim/Http/Cookies.php',
- 'Slim\\Http\\Environment' => $vendorDir . '/slim/slim/Slim/Http/Environment.php',
- 'Slim\\Http\\Headers' => $vendorDir . '/slim/slim/Slim/Http/Headers.php',
- 'Slim\\Http\\Message' => $vendorDir . '/slim/slim/Slim/Http/Message.php',
- 'Slim\\Http\\Request' => $vendorDir . '/slim/slim/Slim/Http/Request.php',
- 'Slim\\Http\\RequestBody' => $vendorDir . '/slim/slim/Slim/Http/RequestBody.php',
- 'Slim\\Http\\Response' => $vendorDir . '/slim/slim/Slim/Http/Response.php',
- 'Slim\\Http\\Stream' => $vendorDir . '/slim/slim/Slim/Http/Stream.php',
- 'Slim\\Http\\UploadedFile' => $vendorDir . '/slim/slim/Slim/Http/UploadedFile.php',
- 'Slim\\Http\\Uri' => $vendorDir . '/slim/slim/Slim/Http/Uri.php',
- 'Slim\\Interfaces\\CallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
- 'Slim\\Interfaces\\CollectionInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CollectionInterface.php',
- 'Slim\\Interfaces\\Http\\CookiesInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Http/CookiesInterface.php',
- 'Slim\\Interfaces\\Http\\EnvironmentInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php',
- 'Slim\\Interfaces\\Http\\HeadersInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Http/HeadersInterface.php',
- 'Slim\\Interfaces\\InvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
- 'Slim\\Interfaces\\RouteGroupInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
- 'Slim\\Interfaces\\RouteInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteInterface.php',
- 'Slim\\Interfaces\\RouterInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouterInterface.php',
- 'Slim\\MiddlewareAwareTrait' => $vendorDir . '/slim/slim/Slim/MiddlewareAwareTrait.php',
- 'Slim\\Routable' => $vendorDir . '/slim/slim/Slim/Routable.php',
- 'Slim\\Route' => $vendorDir . '/slim/slim/Slim/Route.php',
- 'Slim\\RouteGroup' => $vendorDir . '/slim/slim/Slim/RouteGroup.php',
- 'Slim\\Router' => $vendorDir . '/slim/slim/Slim/Router.php',
-);
diff --git a/server/vendor/composer/autoload_files.php b/server/vendor/composer/autoload_files.php
deleted file mode 100644
index 47c0f4d..0000000
--- a/server/vendor/composer/autoload_files.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-// autoload_files.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
- '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php',
- 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
- 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
- '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
-);
diff --git a/server/vendor/composer/autoload_namespaces.php b/server/vendor/composer/autoload_namespaces.php
deleted file mode 100644
index c3cd022..0000000
--- a/server/vendor/composer/autoload_namespaces.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-// autoload_namespaces.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
- 'Pimple' => array($vendorDir . '/pimple/pimple/src'),
-);
diff --git a/server/vendor/composer/autoload_psr4.php b/server/vendor/composer/autoload_psr4.php
deleted file mode 100644
index eaf1447..0000000
--- a/server/vendor/composer/autoload_psr4.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-// autoload_psr4.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
- 'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
- 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
- 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
- 'LookupServer\\' => array($baseDir . '/lib'),
- 'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'),
- 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
- 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
- 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
- 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
- 'Abraham\\TwitterOAuth\\' => array($vendorDir . '/abraham/twitteroauth/src'),
-);
diff --git a/server/vendor/composer/autoload_real.php b/server/vendor/composer/autoload_real.php
deleted file mode 100644
index 37744d2..0000000
--- a/server/vendor/composer/autoload_real.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-// autoload_real.php @generated by Composer
-
-class ComposerAutoloaderInit509ee4e79733fbe3199b97373b795eca
-{
- private static $loader;
-
- public static function loadClassLoader($class)
- {
- if ('Composer\Autoload\ClassLoader' === $class) {
- require __DIR__ . '/ClassLoader.php';
- }
- }
-
- public static function getLoader()
- {
- if (null !== self::$loader) {
- return self::$loader;
- }
-
- spl_autoload_register(array('ComposerAutoloaderInit509ee4e79733fbe3199b97373b795eca', 'loadClassLoader'), true, true);
- self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInit509ee4e79733fbe3199b97373b795eca', 'loadClassLoader'));
-
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
- if ($useStaticLoader) {
- require_once __DIR__ . '/autoload_static.php';
-
- call_user_func(\Composer\Autoload\ComposerStaticInit509ee4e79733fbe3199b97373b795eca::getInitializer($loader));
- } else {
- $classMap = require __DIR__ . '/autoload_classmap.php';
- if ($classMap) {
- $loader->addClassMap($classMap);
- }
- }
-
- $loader->setClassMapAuthoritative(true);
- $loader->register(true);
-
- if ($useStaticLoader) {
- $includeFiles = Composer\Autoload\ComposerStaticInit509ee4e79733fbe3199b97373b795eca::$files;
- } else {
- $includeFiles = require __DIR__ . '/autoload_files.php';
- }
- foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequire509ee4e79733fbe3199b97373b795eca($fileIdentifier, $file);
- }
-
- return $loader;
- }
-}
-
-function composerRequire509ee4e79733fbe3199b97373b795eca($fileIdentifier, $file)
-{
- if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
- require $file;
-
- $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
- }
-}
diff --git a/server/vendor/composer/autoload_static.php b/server/vendor/composer/autoload_static.php
deleted file mode 100644
index 247990e..0000000
--- a/server/vendor/composer/autoload_static.php
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-
-// autoload_static.php @generated by Composer
-
-namespace Composer\Autoload;
-
-class ComposerStaticInit509ee4e79733fbe3199b97373b795eca
-{
- public static $files = array (
- '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php',
- 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
- 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
- '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
- );
-
- public static $prefixLengthsPsr4 = array (
- 'S' =>
- array (
- 'Slim\\' => 5,
- ),
- 'P' =>
- array (
- 'Psr\\Http\\Message\\' => 17,
- 'Psr\\Container\\' => 14,
- ),
- 'L' =>
- array (
- 'LookupServer\\' => 13,
- ),
- 'I' =>
- array (
- 'Interop\\Container\\' => 18,
- ),
- 'G' =>
- array (
- 'GuzzleHttp\\Psr7\\' => 16,
- 'GuzzleHttp\\Promise\\' => 19,
- 'GuzzleHttp\\' => 11,
- ),
- 'F' =>
- array (
- 'FastRoute\\' => 10,
- ),
- 'A' =>
- array (
- 'Abraham\\TwitterOAuth\\' => 21,
- ),
- );
-
- public static $prefixDirsPsr4 = array (
- 'Slim\\' =>
- array (
- 0 => __DIR__ . '/..' . '/slim/slim/Slim',
- ),
- 'Psr\\Http\\Message\\' =>
- array (
- 0 => __DIR__ . '/..' . '/psr/http-message/src',
- ),
- 'Psr\\Container\\' =>
- array (
- 0 => __DIR__ . '/..' . '/psr/container/src',
- ),
- 'LookupServer\\' =>
- array (
- 0 => __DIR__ . '/../..' . '/lib',
- ),
- 'Interop\\Container\\' =>
- array (
- 0 => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container',
- ),
- 'GuzzleHttp\\Psr7\\' =>
- array (
- 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
- ),
- 'GuzzleHttp\\Promise\\' =>
- array (
- 0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',
- ),
- 'GuzzleHttp\\' =>
- array (
- 0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
- ),
- 'FastRoute\\' =>
- array (
- 0 => __DIR__ . '/..' . '/nikic/fast-route/src',
- ),
- 'Abraham\\TwitterOAuth\\' =>
- array (
- 0 => __DIR__ . '/..' . '/abraham/twitteroauth/src',
- ),
- );
-
- public static $prefixesPsr0 = array (
- 'P' =>
- array (
- 'Pimple' =>
- array (
- 0 => __DIR__ . '/..' . '/pimple/pimple/src',
- ),
- ),
- );
-
- public static $classMap = array (
- 'Abraham\\TwitterOAuth\\Config' => __DIR__ . '/..' . '/abraham/twitteroauth/src/Config.php',
- 'Abraham\\TwitterOAuth\\Consumer' => __DIR__ . '/..' . '/abraham/twitteroauth/src/Consumer.php',
- 'Abraham\\TwitterOAuth\\HmacSha1' => __DIR__ . '/..' . '/abraham/twitteroauth/src/HmacSha1.php',
- 'Abraham\\TwitterOAuth\\Request' => __DIR__ . '/..' . '/abraham/twitteroauth/src/Request.php',
- 'Abraham\\TwitterOAuth\\Response' => __DIR__ . '/..' . '/abraham/twitteroauth/src/Response.php',
- 'Abraham\\TwitterOAuth\\SignatureMethod' => __DIR__ . '/..' . '/abraham/twitteroauth/src/SignatureMethod.php',
- 'Abraham\\TwitterOAuth\\Token' => __DIR__ . '/..' . '/abraham/twitteroauth/src/Token.php',
- 'Abraham\\TwitterOAuth\\TwitterOAuth' => __DIR__ . '/..' . '/abraham/twitteroauth/src/TwitterOAuth.php',
- 'Abraham\\TwitterOAuth\\TwitterOAuthException' => __DIR__ . '/..' . '/abraham/twitteroauth/src/TwitterOAuthException.php',
- 'Abraham\\TwitterOAuth\\Util' => __DIR__ . '/..' . '/abraham/twitteroauth/src/Util.php',
- 'Abraham\\TwitterOAuth\\Util\\JsonDecoder' => __DIR__ . '/..' . '/abraham/twitteroauth/src/Util/JsonDecoder.php',
- 'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php',
- 'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php',
- 'FastRoute\\DataGenerator\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
- 'FastRoute\\DataGenerator\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php',
- 'FastRoute\\DataGenerator\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php',
- 'FastRoute\\DataGenerator\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/MarkBased.php',
- 'FastRoute\\DataGenerator\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php',
- 'FastRoute\\Dispatcher' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher.php',
- 'FastRoute\\Dispatcher\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/CharCountBased.php',
- 'FastRoute\\Dispatcher\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php',
- 'FastRoute\\Dispatcher\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php',
- 'FastRoute\\Dispatcher\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/MarkBased.php',
- 'FastRoute\\Dispatcher\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php',
- 'FastRoute\\Route' => __DIR__ . '/..' . '/nikic/fast-route/src/Route.php',
- 'FastRoute\\RouteCollector' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteCollector.php',
- 'FastRoute\\RouteParser' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser.php',
- 'FastRoute\\RouteParser\\Std' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser/Std.php',
- 'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php',
- 'GuzzleHttp\\ClientInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientInterface.php',
- 'GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
- 'GuzzleHttp\\Cookie\\CookieJarInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
- 'GuzzleHttp\\Cookie\\FileCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
- 'GuzzleHttp\\Cookie\\SessionCookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
- 'GuzzleHttp\\Cookie\\SetCookie' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
- 'GuzzleHttp\\Exception\\BadResponseException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
- 'GuzzleHttp\\Exception\\ClientException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
- 'GuzzleHttp\\Exception\\ConnectException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
- 'GuzzleHttp\\Exception\\GuzzleException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
- 'GuzzleHttp\\Exception\\RequestException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
- 'GuzzleHttp\\Exception\\SeekException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
- 'GuzzleHttp\\Exception\\ServerException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
- 'GuzzleHttp\\Exception\\TooManyRedirectsException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
- 'GuzzleHttp\\Exception\\TransferException' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
- 'GuzzleHttp\\HandlerStack' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/HandlerStack.php',
- 'GuzzleHttp\\Handler\\CurlFactory' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
- 'GuzzleHttp\\Handler\\CurlFactoryInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
- 'GuzzleHttp\\Handler\\CurlHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
- 'GuzzleHttp\\Handler\\CurlMultiHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
- 'GuzzleHttp\\Handler\\EasyHandle' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
- 'GuzzleHttp\\Handler\\MockHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
- 'GuzzleHttp\\Handler\\Proxy' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
- 'GuzzleHttp\\Handler\\StreamHandler' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
- 'GuzzleHttp\\MessageFormatter' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/MessageFormatter.php',
- 'GuzzleHttp\\Middleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Middleware.php',
- 'GuzzleHttp\\Pool' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Pool.php',
- 'GuzzleHttp\\PrepareBodyMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
- 'GuzzleHttp\\Promise\\AggregateException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/AggregateException.php',
- 'GuzzleHttp\\Promise\\CancellationException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/CancellationException.php',
- 'GuzzleHttp\\Promise\\Coroutine' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Coroutine.php',
- 'GuzzleHttp\\Promise\\EachPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/EachPromise.php',
- 'GuzzleHttp\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/FulfilledPromise.php',
- 'GuzzleHttp\\Promise\\Promise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/Promise.php',
- 'GuzzleHttp\\Promise\\PromiseInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromiseInterface.php',
- 'GuzzleHttp\\Promise\\PromisorInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/PromisorInterface.php',
- 'GuzzleHttp\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectedPromise.php',
- 'GuzzleHttp\\Promise\\RejectionException' => __DIR__ . '/..' . '/guzzlehttp/promises/src/RejectionException.php',
- 'GuzzleHttp\\Promise\\TaskQueue' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueue.php',
- 'GuzzleHttp\\Promise\\TaskQueueInterface' => __DIR__ . '/..' . '/guzzlehttp/promises/src/TaskQueueInterface.php',
- 'GuzzleHttp\\Psr7\\AppendStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/AppendStream.php',
- 'GuzzleHttp\\Psr7\\BufferStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/BufferStream.php',
- 'GuzzleHttp\\Psr7\\CachingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/CachingStream.php',
- 'GuzzleHttp\\Psr7\\DroppingStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/DroppingStream.php',
- 'GuzzleHttp\\Psr7\\FnStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/FnStream.php',
- 'GuzzleHttp\\Psr7\\InflateStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/InflateStream.php',
- 'GuzzleHttp\\Psr7\\LazyOpenStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LazyOpenStream.php',
- 'GuzzleHttp\\Psr7\\LimitStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/LimitStream.php',
- 'GuzzleHttp\\Psr7\\MessageTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MessageTrait.php',
- 'GuzzleHttp\\Psr7\\MultipartStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/MultipartStream.php',
- 'GuzzleHttp\\Psr7\\NoSeekStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/NoSeekStream.php',
- 'GuzzleHttp\\Psr7\\PumpStream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/PumpStream.php',
- 'GuzzleHttp\\Psr7\\Request' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Request.php',
- 'GuzzleHttp\\Psr7\\Response' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Response.php',
- 'GuzzleHttp\\Psr7\\ServerRequest' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/ServerRequest.php',
- 'GuzzleHttp\\Psr7\\Stream' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Stream.php',
- 'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
- 'GuzzleHttp\\Psr7\\StreamWrapper' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/StreamWrapper.php',
- 'GuzzleHttp\\Psr7\\UploadedFile' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UploadedFile.php',
- 'GuzzleHttp\\Psr7\\Uri' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/Uri.php',
- 'GuzzleHttp\\Psr7\\UriNormalizer' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriNormalizer.php',
- 'GuzzleHttp\\Psr7\\UriResolver' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/UriResolver.php',
- 'GuzzleHttp\\RedirectMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
- 'GuzzleHttp\\RequestOptions' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RequestOptions.php',
- 'GuzzleHttp\\RetryMiddleware' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
- 'GuzzleHttp\\TransferStats' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/TransferStats.php',
- 'GuzzleHttp\\UriTemplate' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/UriTemplate.php',
- 'Interop\\Container\\ContainerInterface' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/ContainerInterface.php',
- 'Interop\\Container\\Exception\\ContainerException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php',
- 'Interop\\Container\\Exception\\NotFoundException' => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php',
- 'LookupServer\\BruteForceMiddleware' => __DIR__ . '/../..' . '/lib/BruteForceMiddleware.php',
- 'LookupServer\\Replication' => __DIR__ . '/../..' . '/lib/Replication.php',
- 'LookupServer\\SignatureHandler' => __DIR__ . '/../..' . '/lib/SignatureHandler.php',
- 'LookupServer\\Status' => __DIR__ . '/../..' . '/lib/Status.php',
- 'LookupServer\\UserManager' => __DIR__ . '/../..' . '/lib/UserManager.php',
- 'LookupServer\\Validator\\Email' => __DIR__ . '/../..' . '/lib/Validator/Email.php',
- 'LookupServer\\Validator\\Twitter' => __DIR__ . '/../..' . '/lib/Validator/Twitter.php',
- 'LookupServer\\Validator\\Website' => __DIR__ . '/../..' . '/lib/Validator/Website.php',
- 'Pimple\\Container' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Container.php',
- 'Pimple\\ServiceProviderInterface' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/ServiceProviderInterface.php',
- 'Pimple\\Tests\\Fixtures\\Invokable' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php',
- 'Pimple\\Tests\\Fixtures\\NonInvokable' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php',
- 'Pimple\\Tests\\Fixtures\\PimpleServiceProvider' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php',
- 'Pimple\\Tests\\Fixtures\\Service' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php',
- 'Pimple\\Tests\\PimpleServiceProviderInterfaceTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php',
- 'Pimple\\Tests\\PimpleTest' => __DIR__ . '/..' . '/pimple/pimple/src/Pimple/Tests/PimpleTest.php',
- 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php',
- 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php',
- 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php',
- 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php',
- 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php',
- 'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php',
- 'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php',
- 'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php',
- 'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php',
- 'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php',
- 'Slim\\App' => __DIR__ . '/..' . '/slim/slim/Slim/App.php',
- 'Slim\\CallableResolver' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolver.php',
- 'Slim\\CallableResolverAwareTrait' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolverAwareTrait.php',
- 'Slim\\Collection' => __DIR__ . '/..' . '/slim/slim/Slim/Collection.php',
- 'Slim\\Container' => __DIR__ . '/..' . '/slim/slim/Slim/Container.php',
- 'Slim\\DefaultServicesProvider' => __DIR__ . '/..' . '/slim/slim/Slim/DefaultServicesProvider.php',
- 'Slim\\DeferredCallable' => __DIR__ . '/..' . '/slim/slim/Slim/DeferredCallable.php',
- 'Slim\\Exception\\ContainerException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/ContainerException.php',
- 'Slim\\Exception\\ContainerValueNotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/ContainerValueNotFoundException.php',
- 'Slim\\Exception\\InvalidMethodException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/InvalidMethodException.php',
- 'Slim\\Exception\\MethodNotAllowedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/MethodNotAllowedException.php',
- 'Slim\\Exception\\NotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/NotFoundException.php',
- 'Slim\\Exception\\SlimException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/SlimException.php',
- 'Slim\\Handlers\\AbstractError' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/AbstractError.php',
- 'Slim\\Handlers\\AbstractHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/AbstractHandler.php',
- 'Slim\\Handlers\\Error' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Error.php',
- 'Slim\\Handlers\\NotAllowed' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/NotAllowed.php',
- 'Slim\\Handlers\\NotFound' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/NotFound.php',
- 'Slim\\Handlers\\PhpError' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/PhpError.php',
- 'Slim\\Handlers\\Strategies\\RequestResponse' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
- 'Slim\\Handlers\\Strategies\\RequestResponseArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
- 'Slim\\Http\\Body' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Body.php',
- 'Slim\\Http\\Cookies' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Cookies.php',
- 'Slim\\Http\\Environment' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Environment.php',
- 'Slim\\Http\\Headers' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Headers.php',
- 'Slim\\Http\\Message' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Message.php',
- 'Slim\\Http\\Request' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Request.php',
- 'Slim\\Http\\RequestBody' => __DIR__ . '/..' . '/slim/slim/Slim/Http/RequestBody.php',
- 'Slim\\Http\\Response' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Response.php',
- 'Slim\\Http\\Stream' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Stream.php',
- 'Slim\\Http\\UploadedFile' => __DIR__ . '/..' . '/slim/slim/Slim/Http/UploadedFile.php',
- 'Slim\\Http\\Uri' => __DIR__ . '/..' . '/slim/slim/Slim/Http/Uri.php',
- 'Slim\\Interfaces\\CallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
- 'Slim\\Interfaces\\CollectionInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CollectionInterface.php',
- 'Slim\\Interfaces\\Http\\CookiesInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Http/CookiesInterface.php',
- 'Slim\\Interfaces\\Http\\EnvironmentInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php',
- 'Slim\\Interfaces\\Http\\HeadersInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Http/HeadersInterface.php',
- 'Slim\\Interfaces\\InvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
- 'Slim\\Interfaces\\RouteGroupInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
- 'Slim\\Interfaces\\RouteInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteInterface.php',
- 'Slim\\Interfaces\\RouterInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouterInterface.php',
- 'Slim\\MiddlewareAwareTrait' => __DIR__ . '/..' . '/slim/slim/Slim/MiddlewareAwareTrait.php',
- 'Slim\\Routable' => __DIR__ . '/..' . '/slim/slim/Slim/Routable.php',
- 'Slim\\Route' => __DIR__ . '/..' . '/slim/slim/Slim/Route.php',
- 'Slim\\RouteGroup' => __DIR__ . '/..' . '/slim/slim/Slim/RouteGroup.php',
- 'Slim\\Router' => __DIR__ . '/..' . '/slim/slim/Slim/Router.php',
- );
-
- public static function getInitializer(ClassLoader $loader)
- {
- return \Closure::bind(function () use ($loader) {
- $loader->prefixLengthsPsr4 = ComposerStaticInit509ee4e79733fbe3199b97373b795eca::$prefixLengthsPsr4;
- $loader->prefixDirsPsr4 = ComposerStaticInit509ee4e79733fbe3199b97373b795eca::$prefixDirsPsr4;
- $loader->prefixesPsr0 = ComposerStaticInit509ee4e79733fbe3199b97373b795eca::$prefixesPsr0;
- $loader->classMap = ComposerStaticInit509ee4e79733fbe3199b97373b795eca::$classMap;
-
- }, null, ClassLoader::class);
- }
-}
diff --git a/server/vendor/composer/installed.json b/server/vendor/composer/installed.json
deleted file mode 100644
index 619cf9e..0000000
--- a/server/vendor/composer/installed.json
+++ /dev/null
@@ -1,544 +0,0 @@
-[
- {
- "name": "psr/http-message",
- "version": "1.0.1",
- "version_normalized": "1.0.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "time": "2016-08-06T14:39:51+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP messages",
- "homepage": "https://github.com/php-fig/http-message",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ]
- },
- {
- "name": "pimple/pimple",
- "version": "v3.0.2",
- "version_normalized": "3.0.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/silexphp/Pimple.git",
- "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a",
- "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "time": "2015-09-11T15:10:35+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "Pimple": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- }
- ],
- "description": "Pimple, a simple Dependency Injection Container",
- "homepage": "http://pimple.sensiolabs.org",
- "keywords": [
- "container",
- "dependency injection"
- ]
- },
- {
- "name": "psr/container",
- "version": "1.0.0",
- "version_normalized": "1.0.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "time": "2017-02-14T16:28:37+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ]
- },
- {
- "name": "container-interop/container-interop",
- "version": "1.2.0",
- "version_normalized": "1.2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/container-interop/container-interop.git",
- "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
- "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
- "shasum": ""
- },
- "require": {
- "psr/container": "^1.0"
- },
- "time": "2017-02-14T19:40:03+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Interop\\Container\\": "src/Interop/Container/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
- "homepage": "https://github.com/container-interop/container-interop"
- },
- {
- "name": "nikic/fast-route",
- "version": "v1.2.0",
- "version_normalized": "1.2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/FastRoute.git",
- "reference": "b5f95749071c82a8e0f58586987627054400cdf6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6",
- "reference": "b5f95749071c82a8e0f58586987627054400cdf6",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0"
- },
- "time": "2017-01-19T11:35:12+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "FastRoute\\": "src/"
- },
- "files": [
- "src/functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov",
- "email": "nikic@php.net"
- }
- ],
- "description": "Fast request router for PHP",
- "keywords": [
- "router",
- "routing"
- ]
- },
- {
- "name": "slim/slim",
- "version": "3.8.1",
- "version_normalized": "3.8.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/slimphp/Slim.git",
- "reference": "5385302707530b2bccee1769613ad769859b826d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/slimphp/Slim/zipball/5385302707530b2bccee1769613ad769859b826d",
- "reference": "5385302707530b2bccee1769613ad769859b826d",
- "shasum": ""
- },
- "require": {
- "container-interop/container-interop": "^1.2",
- "nikic/fast-route": "^1.0",
- "php": ">=5.5.0",
- "pimple/pimple": "^3.0",
- "psr/container": "^1.0",
- "psr/http-message": "^1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0",
- "squizlabs/php_codesniffer": "^2.5"
- },
- "time": "2017-03-19T17:55:20+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Slim\\": "Slim"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Rob Allen",
- "email": "rob@akrabat.com",
- "homepage": "http://akrabat.com"
- },
- {
- "name": "Josh Lockhart",
- "email": "hello@joshlockhart.com",
- "homepage": "https://joshlockhart.com"
- },
- {
- "name": "Gabriel Manricks",
- "email": "gmanricks@me.com",
- "homepage": "http://gabrielmanricks.com"
- },
- {
- "name": "Andrew Smith",
- "email": "a.smith@silentworks.co.uk",
- "homepage": "http://silentworks.co.uk"
- }
- ],
- "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
- "homepage": "https://slimframework.com",
- "keywords": [
- "api",
- "framework",
- "micro",
- "router"
- ]
- },
- {
- "name": "guzzlehttp/promises",
- "version": "v1.3.1",
- "version_normalized": "1.3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
- "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0"
- },
- "time": "2016-12-20T10:07:11+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Guzzle promises library",
- "keywords": [
- "promise"
- ]
- },
- {
- "name": "guzzlehttp/psr7",
- "version": "1.4.2",
- "version_normalized": "1.4.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
- "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "time": "2017-03-20T17:10:46+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Tobias Schultze",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": [
- "http",
- "message",
- "request",
- "response",
- "stream",
- "uri",
- "url"
- ]
- },
- {
- "name": "guzzlehttp/guzzle",
- "version": "6.2.3",
- "version_normalized": "6.2.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/8d6c6cc55186db87b7dc5009827429ba4e9dc006",
- "reference": "8d6c6cc55186db87b7dc5009827429ba4e9dc006",
- "shasum": ""
- },
- "require": {
- "guzzlehttp/promises": "^1.0",
- "guzzlehttp/psr7": "^1.4",
- "php": ">=5.5"
- },
- "require-dev": {
- "ext-curl": "*",
- "phpunit/phpunit": "^4.0",
- "psr/log": "^1.0"
- },
- "time": "2017-02-28T22:50:30+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "6.2-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "GuzzleHttp\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Guzzle is a PHP HTTP client library",
- "homepage": "http://guzzlephp.org/",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "rest",
- "web service"
- ]
- },
- {
- "name": "abraham/twitteroauth",
- "version": "0.7.2",
- "version_normalized": "0.7.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/abraham/twitteroauth.git",
- "reference": "119d5a83478a2d21c09cd27980ab67eba11c8fe1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/119d5a83478a2d21c09cd27980ab67eba11c8fe1",
- "reference": "119d5a83478a2d21c09cd27980ab67eba11c8fe1",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "php": "^5.6 || ^7.0"
- },
- "require-dev": {
- "phpmd/phpmd": "~2.4",
- "phpunit/phpunit": "~5.6",
- "squizlabs/php_codesniffer": "~2.7"
- },
- "time": "2016-12-12T17:42:13+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-4": {
- "Abraham\\TwitterOAuth\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Abraham Williams",
- "email": "abraham@abrah.am",
- "homepage": "https://abrah.am",
- "role": "Developer"
- }
- ],
- "description": "The most popular PHP library for use with the Twitter OAuth REST API.",
- "homepage": "https://twitteroauth.com",
- "keywords": [
- "Twitter API",
- "Twitter oAuth",
- "api",
- "oauth",
- "rest",
- "social",
- "twitter"
- ]
- }
-]
diff --git a/server/vendor/container-interop/container-interop/.gitignore b/server/vendor/container-interop/container-interop/.gitignore
deleted file mode 100644
index b2395aa..0000000
--- a/server/vendor/container-interop/container-interop/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-composer.lock
-composer.phar
-/vendor/
diff --git a/server/vendor/container-interop/container-interop/LICENSE b/server/vendor/container-interop/container-interop/LICENSE
deleted file mode 100644
index 7671d90..0000000
--- a/server/vendor/container-interop/container-interop/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013 container-interop
-
-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/server/vendor/container-interop/container-interop/README.md b/server/vendor/container-interop/container-interop/README.md
deleted file mode 100644
index cdd7a44..0000000
--- a/server/vendor/container-interop/container-interop/README.md
+++ /dev/null
@@ -1,148 +0,0 @@
-# Container Interoperability
-
-[![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop)
-[![Total Downloads](https://poser.pugx.org/container-interop/container-interop/downloads.svg)](https://packagist.org/packages/container-interop/container-interop)
-
-## Deprecation warning!
-
-Starting Feb. 13th 2017, container-interop is officially deprecated in favor of [PSR-11](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md).
-Container-interop has been the test-bed of PSR-11. From v1.2, container-interop directly extends PSR-11 interfaces.
-Therefore, all containers implementing container-interop are now *de-facto* compatible with PSR-11.
-
-- Projects implementing container-interop interfaces are encouraged to directly implement PSR-11 interfaces instead.
-- Projects consuming container-interop interfaces are very strongly encouraged to directly type-hint on PSR-11 interfaces, in order to be compatible with PSR-11 containers that are not compatible with container-interop.
-
-Regarding the delegate lookup feature, that is present in container-interop and not in PSR-11, the feature is actually a design pattern. It is therefore not deprecated. Documentation regarding this design pattern will be migrated from this repository into a separate website in the future.
-
-## About
-
-*container-interop* tries to identify and standardize features in *container* objects (service locators,
-dependency injection containers, etc.) to achieve interoperability.
-
-Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations.
-
-If PHP projects that provide container implementations begin to adopt these common standards, then PHP
-applications and projects that use containers can depend on the common interfaces instead of specific
-implementations. This facilitates a high-level of interoperability and flexibility that allows users to consume
-*any* container implementation that can be adapted to these interfaces.
-
-The work done in this project is not officially endorsed by the [PHP-FIG](http://www.php-fig.org/), but it is being
-worked on by members of PHP-FIG and other good developers. We adhere to the spirit and ideals of PHP-FIG, and hope
-this project will pave the way for one or more future PSRs.
-
-
-## Installation
-
-You can install this package through Composer:
-
-```json
-composer require container-interop/container-interop
-```
-
-The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility
-between minor versions.
-
-## Standards
-
-### Available
-
-- [`ContainerInterface`](src/Interop/Container/ContainerInterface.php).
-[Description](docs/ContainerInterface.md) [Meta Document](docs/ContainerInterface-meta.md).
-Describes the interface of a container that exposes methods to read its entries.
-- [*Delegate lookup feature*](docs/Delegate-lookup.md).
-[Meta Document](docs/Delegate-lookup-meta.md).
-Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This
-feature lets several containers work together in a single application.
-
-### Proposed
-
-View open [request for comments](https://github.com/container-interop/container-interop/labels/RFC)
-
-## Compatible projects
-
-### Projects implementing `ContainerInterface`
-
-- [Acclimate](https://github.com/jeremeamia/acclimate-container): Adapters for
- Aura.Di, Laravel, Nette DI, Pimple, Symfony DI, ZF2 Service manager, ZF2
- Dependency injection and any container using `ArrayAccess`
-- [Aura.Di](https://github.com/auraphp/Aura.Di)
-- [auryn-container-interop](https://github.com/elazar/auryn-container-interop)
-- [Burlap](https://github.com/codeeverything/burlap)
-- [Chernozem](https://github.com/pyrsmk/Chernozem)
-- [Data Manager](https://github.com/chrismichaels84/data-manager)
-- [Disco](https://github.com/bitexpert/disco)
-- [InDI](https://github.com/idealogica/indi)
-- [League/Container](http://container.thephpleague.com/)
-- [Mouf](http://mouf-php.com)
-- [Njasm Container](https://github.com/njasm/container)
-- [PHP-DI](http://php-di.org)
-- [Picotainer](https://github.com/thecodingmachine/picotainer)
-- [PimpleInterop](https://github.com/moufmouf/pimple-interop)
-- [Pimple3-ContainerInterop](https://github.com/Sam-Burns/pimple3-containerinterop) (using Pimple v3)
-- [SitePoint Container](https://github.com/sitepoint/Container)
-- [Thruster Container](https://github.com/ThrusterIO/container) (PHP7 only)
-- [Ultra-Lite Container](https://github.com/ultra-lite/container)
-- [Unbox](https://github.com/mindplay-dk/unbox)
-- [XStatic](https://github.com/jeremeamia/xstatic)
-- [Zend\ServiceManager](https://github.com/zendframework/zend-servicemanager)
-- [Zit](https://github.com/inxilpro/Zit)
-
-### Projects implementing the *delegate lookup* feature
-
-- [Aura.Di](https://github.com/auraphp/Aura.Di)
-- [Burlap](https://github.com/codeeverything/burlap)
-- [Chernozem](https://github.com/pyrsmk/Chernozem)
-- [InDI](https://github.com/idealogica/indi)
-- [League/Container](http://container.thephpleague.com/)
-- [Mouf](http://mouf-php.com)
-- [Picotainer](https://github.com/thecodingmachine/picotainer)
-- [PHP-DI](http://php-di.org)
-- [PimpleInterop](https://github.com/moufmouf/pimple-interop)
-- [Ultra-Lite Container](https://github.com/ultra-lite/container)
-
-### Middlewares implementing `ContainerInterface`
-
-- [Alias-Container](https://github.com/thecodingmachine/alias-container): add
- aliases support to any container
-- [Prefixer-Container](https://github.com/thecodingmachine/prefixer-container):
- dynamically prefix identifiers
-- [Lazy-Container](https://github.com/snapshotpl/lazy-container): lazy services
-
-### Projects using `ContainerInterface`
-
-The list below contains only a sample of all the projects consuming `ContainerInterface`. For a more complete list have a look [here](http://packanalyst.com/class?q=Interop%5CContainer%5CContainerInterface).
-
-| | Downloads |
-| --- | --- |
-| [Adroit](https://github.com/bitexpert/adroit) | ![](https://img.shields.io/packagist/dt/bitexpert/adroit.svg) |
-| [Behat](https://github.com/Behat/Behat/pull/974) | ![](https://img.shields.io/packagist/dt/behat/behat.svg) |
-| [blast-facades](https://github.com/phpthinktank/blast-facades): Minimize complexity and represent dependencies as facades. | ![](https://img.shields.io/packagist/dt/blast/facades.svg) |
-| [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di): an extension to [Silex](http://silex.sensiolabs.org/) that adds support for any *container-interop* compatible container | ![](https://img.shields.io/packagist/dt/mouf/interop.silex.di.svg) |
-| [mindplay/walkway](https://github.com/mindplay-dk/walkway): a modular request router | ![](https://img.shields.io/packagist/dt/mindplay/walkway.svg) |
-| [mindplay/middleman](https://github.com/mindplay-dk/middleman): minimalist PSR-7 middleware dispatcher | ![](https://img.shields.io/packagist/dt/mindplay/middleman.svg) |
-| [PHP-DI/Invoker](https://github.com/PHP-DI/Invoker): extensible and configurable invoker/dispatcher | ![](https://img.shields.io/packagist/dt/php-di/invoker.svg) |
-| [Prophiler](https://github.com/fabfuel/prophiler) | ![](https://img.shields.io/packagist/dt/fabfuel/prophiler.svg) |
-| [Silly](https://github.com/mnapoli/silly): CLI micro-framework | ![](https://img.shields.io/packagist/dt/mnapoli/silly.svg) |
-| [Slim v3](https://github.com/slimphp/Slim) | ![](https://img.shields.io/packagist/dt/slim/slim.svg) |
-| [Splash](http://mouf-php.com/packages/mouf/mvc.splash-common/version/8.0-dev/README.md) | ![](https://img.shields.io/packagist/dt/mouf/mvc.splash-common.svg) |
-| [Woohoo Labs. Harmony](https://github.com/woohoolabs/harmony): a flexible micro-framework | ![](https://img.shields.io/packagist/dt/woohoolabs/harmony.svg) |
-| [zend-expressive](https://github.com/zendframework/zend-expressive) | ![](https://img.shields.io/packagist/dt/zendframework/zend-expressive.svg) |
-
-
-## Workflow
-
-Everyone is welcome to join and contribute.
-
-The general workflow looks like this:
-
-1. Someone opens a discussion (GitHub issue) to suggest an interface
-1. Feedback is gathered
-1. The interface is added to a development branch
-1. We release alpha versions so that the interface can be experimented with
-1. Discussions and edits ensue until the interface is deemed stable by a general consensus
-1. A new minor version of the package is released
-
-We try to not break BC by creating new interfaces instead of editing existing ones.
-
-While we currently work on interfaces, we are open to anything that might help towards interoperability, may that
-be code, best practices, etc.
diff --git a/server/vendor/container-interop/container-interop/composer.json b/server/vendor/container-interop/container-interop/composer.json
deleted file mode 100644
index 855f766..0000000
--- a/server/vendor/container-interop/container-interop/composer.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "container-interop/container-interop",
- "type": "library",
- "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
- "homepage": "https://github.com/container-interop/container-interop",
- "license": "MIT",
- "autoload": {
- "psr-4": {
- "Interop\\Container\\": "src/Interop/Container/"
- }
- },
- "require": {
- "psr/container": "^1.0"
- }
-}
diff --git a/server/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md b/server/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md
deleted file mode 100644
index 59f3d55..0000000
--- a/server/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md
+++ /dev/null
@@ -1,114 +0,0 @@
-# ContainerInterface Meta Document
-
-## Introduction
-
-This document describes the process and discussions that lead to the `ContainerInterface`.
-Its goal is to explain the reasons behind each decision.
-
-## Goal
-
-The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a
-container to obtain objects and parameters.
-
-By standardizing such a behavior, frameworks and libraries using the `ContainerInterface`
-could work with any compatible container.
-That would allow end users to choose their own container based on their own preferences.
-
-It is important to distinguish the two usages of a container:
-
-- configuring entries
-- fetching entries
-
-Most of the time, those two sides are not used by the same party.
-While it is often end users who tend to configure entries, it is generally the framework that fetch
-entries to build the application.
-
-This is why this interface focuses only on how entries can be fetched from a container.
-
-## Interface name
-
-The interface name has been thoroughly discussed and was decided by a vote.
-
-The list of options considered with their respective votes are:
-
-- `ContainerInterface`: +8
-- `ProviderInterface`: +2
-- `LocatorInterface`: 0
-- `ReadableContainerInterface`: -5
-- `ServiceLocatorInterface`: -6
-- `ObjectFactory`: -6
-- `ObjectStore`: -8
-- `ConsumerInterface`: -9
-
-[Full results of the vote](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote)
-
-The complete discussion can be read in [the issue #1](https://github.com/container-interop/container-interop/issues/1).
-
-## Interface methods
-
-The choice of which methods the interface would contain was made after a statistical analysis of existing containers.
-The results of this analysis are available [in this document](https://gist.github.com/mnapoli/6159681).
-
-The summary of the analysis showed that:
-
-- all containers offer a method to get an entry by its id
-- a large majority name such method `get()`
-- for all containers, the `get()` method has 1 mandatory parameter of type string
-- some containers have an optional additional argument for `get()`, but it doesn't have the same purpose between containers
-- a large majority of the containers offer a method to test if it can return an entry by its id
-- a majority name such method `has()`
-- for all containers offering `has()`, the method has exactly 1 parameter of type string
-- a large majority of the containers throw an exception rather than returning null when an entry is not found in `get()`
-- a large majority of the containers don't implement `ArrayAccess`
-
-The question of whether to include methods to define entries has been discussed in
-[issue #1](https://github.com/container-interop/container-interop/issues/1).
-It has been judged that such methods do not belong in the interface described here because it is out of its scope
-(see the "Goal" section).
-
-As a result, the `ContainerInterface` contains two methods:
-
-- `get()`, returning anything, with one mandatory string parameter. Should throw an exception if the entry is not found.
-- `has()`, returning a boolean, with one mandatory string parameter.
-
-### Number of parameters in `get()` method
-
-While `ContainerInterface` only defines one mandatory parameter in `get()`, it is not incompatible with
-existing containers that have additional optional parameters. PHP allows an implementation to offer more parameters
-as long as they are optional, because the implementation *does* satisfy the interface.
-
-This issue has been discussed in [issue #6](https://github.com/container-interop/container-interop/issues/6).
-
-### Type of the `$id` parameter
-
-The type of the `$id` parameter in `get()` and `has()` has been discussed in
-[issue #6](https://github.com/container-interop/container-interop/issues/6).
-While `string` is used in all the containers that were analyzed, it was suggested that allowing
-anything (such as objects) could allow containers to offer a more advanced query API.
-
-An example given was to use the container as an object builder. The `$id` parameter would then be an
-object that would describe how to create an instance.
-
-The conclusion of the discussion was that this was beyond the scope of getting entries from a container without
-knowing how the container provided them, and it was more fit for a factory.
-
-## Contributors
-
-Are listed here all people that contributed in the discussions or votes, by alphabetical order:
-
-- [Amy Stephen](https://github.com/AmyStephen)
-- [David Négrier](https://github.com/moufmouf)
-- [Don Gilbert](https://github.com/dongilbert)
-- [Jason Judge](https://github.com/judgej)
-- [Jeremy Lindblom](https://github.com/jeremeamia)
-- [Marco Pivetta](https://github.com/Ocramius)
-- [Matthieu Napoli](https://github.com/mnapoli)
-- [Paul M. Jones](https://github.com/pmjones)
-- [Stephan Hochdörfer](https://github.com/shochdoerfer)
-- [Taylor Otwell](https://github.com/taylorotwell)
-
-## Relevant links
-
-- [`ContainerInterface.php`](https://github.com/container-interop/container-interop/blob/master/src/Interop/Container/ContainerInterface.php)
-- [List of all issues](https://github.com/container-interop/container-interop/issues?labels=ContainerInterface&milestone=&page=1&state=closed)
-- [Vote for the interface name](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote)
diff --git a/server/vendor/container-interop/container-interop/docs/ContainerInterface.md b/server/vendor/container-interop/container-interop/docs/ContainerInterface.md
deleted file mode 100644
index bda973d..0000000
--- a/server/vendor/container-interop/container-interop/docs/ContainerInterface.md
+++ /dev/null
@@ -1,158 +0,0 @@
-Container interface
-===================
-
-This document describes a common interface for dependency injection containers.
-
-The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a
-container to obtain objects and parameters (called *entries* in the rest of this document).
-
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
-"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
-interpreted as described in [RFC 2119][].
-
-The word `implementor` in this document is to be interpreted as someone
-implementing the `ContainerInterface` in a dependency injection-related library or framework.
-Users of dependency injections containers (DIC) are referred to as `user`.
-
-[RFC 2119]: http://tools.ietf.org/html/rfc2119
-
-1. Specification
------------------
-
-### 1.1 Basics
-
-- The `Interop\Container\ContainerInterface` exposes two methods : `get` and `has`.
-
-- `get` takes one mandatory parameter: an entry identifier. It MUST be a string.
- A call to `get` can return anything (a *mixed* value), or throws an exception if the identifier
- is not known to the container. Two successive calls to `get` with the same
- identifier SHOULD return the same value. However, depending on the `implementor`
- design and/or `user` configuration, different values might be returned, so
- `user` SHOULD NOT rely on getting the same value on 2 successive calls.
- While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations
- MAY accept additional optional parameters.
-
-- `has` takes one unique parameter: an entry identifier. It MUST return `true`
- if an entry identifier is known to the container and `false` if it is not.
- `has($id)` returning true does not mean that `get($id)` will not throw an exception.
- It does however mean that `get($id)` will not throw a `NotFoundException`.
-
-### 1.2 Exceptions
-
-Exceptions directly thrown by the container MUST implement the
-[`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php).
-
-A call to the `get` method with a non-existing id SHOULD throw a
-[`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php).
-
-### 1.3 Additional features
-
-This section describes additional features that MAY be added to a container. Containers are not
-required to implement these features to respect the ContainerInterface.
-
-#### 1.3.1 Delegate lookup feature
-
-The goal of the *delegate lookup* feature is to allow several containers to share entries.
-Containers implementing this feature can perform dependency lookups in other containers.
-
-Containers implementing this feature will offer a greater lever of interoperability
-with other containers. Implementation of this feature is therefore RECOMMENDED.
-
-A container implementing this feature:
-
-- MUST implement the `ContainerInterface`
-- MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
- or any possible way). The delegate container MUST implement the `ContainerInterface`.
-
-When a container is configured to use a delegate container for dependencies:
-
-- Calls to the `get` method should only return an entry if the entry is part of the container.
- If the entry is not part of the container, an exception should be thrown
- (as requested by the `ContainerInterface`).
-- Calls to the `has` method should only return `true` if the entry is part of the container.
- If the entry is not part of the container, `false` should be returned.
-- If the fetched entry has dependencies, **instead** of performing
- the dependency lookup in the container, the lookup is performed on the *delegate container*.
-
-Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself.
-
-It is however allowed for containers to provide exception cases for special entries, and a way to lookup
-into the same container (or another container) instead of the delegate container.
-
-2. Package
-----------
-
-The interfaces and classes described as well as relevant exception are provided as part of the
-[container-interop/container-interop](https://packagist.org/packages/container-interop/container-interop) package.
-
-3. `Interop\Container\ContainerInterface`
------------------------------------------
-
-```php
-<?php
-namespace Interop\Container;
-
-use Interop\Container\Exception\ContainerException;
-use Interop\Container\Exception\NotFoundException;
-
-/**
- * Describes the interface of a container that exposes methods to read its entries.
- */
-interface ContainerInterface
-{
- /**
- * Finds an entry of the container by its identifier and returns it.
- *
- * @param string $id Identifier of the entry to look for.
- *
- * @throws NotFoundException No entry was found for this identifier.
- * @throws ContainerException Error while retrieving the entry.
- *
- * @return mixed Entry.
- */
- public function get($id);
-
- /**
- * Returns true if the container can return an entry for the given identifier.
- * Returns false otherwise.
- *
- * `has($id)` returning true does not mean that `get($id)` will not throw an exception.
- * It does however mean that `get($id)` will not throw a `NotFoundException`.
- *
- * @param string $id Identifier of the entry to look for.
- *
- * @return boolean
- */
- public function has($id);
-}
-```
-
-4. `Interop\Container\Exception\ContainerException`
----------------------------------------------------
-
-```php
-<?php
-namespace Interop\Container\Exception;
-
-/**
- * Base interface representing a generic exception in a container.
- */
-interface ContainerException
-{
-}
-```
-
-5. `Interop\Container\Exception\NotFoundException`
----------------------------------------------------
-
-```php
-<?php
-namespace Interop\Container\Exception;
-
-/**
- * No entry was found in the container.
- */
-interface NotFoundException extends ContainerException
-{
-}
-```
diff --git a/server/vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md b/server/vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md
deleted file mode 100644
index 6048b73..0000000
--- a/server/vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md
+++ /dev/null
@@ -1,259 +0,0 @@
-Delegate lookup feature Meta Document
-=====================================
-
-1. Summary
-----------
-
-This document describes the *delegate lookup feature*.
-Containers are not required to implement this feature to respect the `ContainerInterface`.
-However, containers implementing this feature will offer a greater lever of interoperability
-with other containers, allowing multiple containers to share entries in the same application.
-Implementation of this feature is therefore recommanded.
-
-2. Why Bother?
---------------
-
-The [`ContainerInterface`](../src/Interop/Container/ContainerInterface.php) ([meta doc](ContainerInterface.md))
-standardizes how frameworks and libraries make use of a container to obtain objects and parameters.
-
-By standardizing such a behavior, frameworks and libraries relying on the `ContainerInterface`
-could work with any compatible container.
-That would allow end users to choose their own container based on their own preferences.
-
-The `ContainerInterface` is also enough if we want to have several containers side-by-side in the same
-application. For instance, this is what the [CompositeContainer](https://github.com/jeremeamia/acclimate-container/blob/master/src/CompositeContainer.php)
-class of [Acclimate](https://github.com/jeremeamia/acclimate-container) is designed for:
-
-![Side by side containers](images/side_by_side_containers.png)
-
-However, an instance in container 1 cannot reference an instance in container 2.
-
-It would be better if an instance of container 1 could reference an instance in container 2,
-and the opposite should be true.
-
-![Interoperating containers](images/interoperating_containers.png)
-
-In the sample above, entry 1 in container 1 is referencing entry 3 in container 2.
-
-3. Scope
---------
-
-### 3.1 Goals
-
-The goal of the *delegate lookup* feature is to allow several containers to share entries.
-
-4. Approaches
--------------
-
-### 4.1 Chosen Approach
-
-Containers implementing this feature can perform dependency lookups in other containers.
-
-A container implementing this feature:
-
-- must implement the `ContainerInterface`
-- must provide a way to register a *delegate container* (using a constructor parameter, or a setter, or any
-possible way). The *delegate container* must implement the `ContainerInterface`.
-
-When a *delegate container* is configured on a container:
-
-- Calls to the `get` method should only return an entry if the entry is part of the container.
-If the entry is not part of the container, an exception should be thrown (as required in the `ContainerInterface`).
-- Calls to the `has` method should only return *true* if the entry is part of the container.
-If the entry is not part of the container, *false* should be returned.
- - Finally, the important part: if the entry we are fetching has dependencies,
-**instead** of perfoming the dependency lookup in the container, the lookup is performed on the *delegate container*.
-
-Important! By default, the lookup should be performed on the delegate container **only**, not on the container itself.
-
-It is however allowed for containers to provide exception cases for special entries, and a way to lookup into
-the same container (or another container) instead of the delegate container.
-
-### 4.2 Typical usage
-
-The *delegate container* will usually be a composite container. A composite container is a container that
-contains several other containers. When performing a lookup on a composite container, the inner containers are
-queried until one container returns an entry.
-An inner container implementing the *delegate lookup feature* will return entries it contains, but if these
-entries have dependencies, the dependencies lookup calls will be performed on the composite container, giving
-a chance to all containers to answer.
-
-Interestingly enough, the order in which containers are added in the composite container matters. Indeed,
-the first containers to be added in the composite container can "override" the entries of containers with
-lower priority.
-
-![Containers priority](images/priority.png)
-
-In the example above, "container 2" contains a controller "myController" and the controller is referencing an
-"entityManager" entry. "Container 1" contains also an entry named "entityManager".
-Without the *delegate lookup* feature, when requesting the "myController" instance to container 2, it would take
-in charge the instanciation of both entries.
-
-However, using the *delegate lookup* feature, here is what happens when we ask the composite container for the
-"myController" instance:
-
-- The composite container asks container 1 if if contains the "myController" instance. The answer is no.
-- The composite container asks container 2 if if contains the "myController" instance. The answer is yes.
-- The composite container performs a `get` call on container 2 for the "myController" instance.
-- Container 2 sees that "myController" has a dependency on "entityManager".
-- Container 2 delegates the lookup of "entityManager" to the composite container.
-- The composite container asks container 1 if if contains the "entityManager" instance. The answer is yes.
-- The composite container performs a `get` call on container 1 for the "entityManager" instance.
-
-In the end, we get a controller instanciated by container 2 that references an entityManager instanciated
-by container 1.
-
-### 4.3 Alternative: the fallback strategy
-
-The first proposed approach we tried was to perform all the lookups in the "local" container,
-and if a lookup fails in the container, to use the delegate container. In this scenario, the
-delegate container is used in "fallback" mode.
-
-This strategy has been described in @moufmouf blog post: http://mouf-php.com/container-interop-whats-next (solution 1).
-It was also discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-33570697) and
-[here](https://github.com/container-interop/container-interop/pull/20#issuecomment-56599631).
-
-Problems with this strategy:
-
-- Heavy problem regarding infinite loops
-- Unable to overload a container entry with the delegate container entry
-
-### 4.4 Alternative: force implementing an interface
-
-The first proposed approach was to develop a `ParentAwareContainerInterface` interface.
-It was proposed here: https://github.com/container-interop/container-interop/pull/8
-
-The interface would have had the behaviour of the delegate lookup feature but would have forced the addition of
-a `setParentContainter` method:
-
-```php
-interface ParentAwareContainerInterface extends ReadableContainerInterface {
- /**
- * Sets the parent container associated to that container. This container will call
- * the parent container to fetch dependencies.
- *
- * @param ContainerInterface $container
- */
- public function setParentContainer(ContainerInterface $container);
-}
-```
-
-The interface idea was first questioned by @Ocramius [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777).
-@Ocramius expressed the idea that an interface should not contain setters, otherwise, it is forcing implementation
-details on the class implementing the interface.
-Then @mnapoli made a proposal for a "convention" [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51841079),
-this idea was further discussed until all participants in the discussion agreed to remove the interface idea
-and replace it with a "standard" feature.
-
-**Pros:**
-
-If we had had an interface, we could have delegated the registration of the delegate/composite container to the
-the delegate/composite container itself.
-For instance:
-
-```php
-$containerA = new ContainerA();
-$containerB = new ContainerB();
-
-$compositeContainer = new CompositeContainer([$containerA, $containerB]);
-
-// The call to 'setParentContainer' is delegated to the CompositeContainer
-// It is not the responsibility of the user anymore.
-class CompositeContainer {
- ...
-
- public function __construct($containers) {
- foreach ($containers as $container) {
- if ($container instanceof ParentAwareContainerInterface) {
- $container->setParentContainer($this);
- }
- }
- ...
- }
-}
-
-```
-
-**Cons:**
-
-Cons have been extensively discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777).
-Basically, forcing a setter into an interface is a bad idea. Setters are similar to constructor arguments,
-and it's a bad idea to standardize a constructor: how the delegate container is configured into a container is an implementation detail. This outweights the benefits of the interface.
-
-### 4.4 Alternative: no exception case for delegate lookups
-
-Originally, the proposed wording for delegate lookup calls was:
-
-> Important! The lookup MUST be performed on the delegate container **only**, not on the container itself.
-
-This was later replaced by:
-
-> Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself.
->
-> It is however allowed for containers to provide exception cases for special entries, and a way to lookup
-> into the same container (or another container) instead of the delegate container.
-
-Exception cases have been allowed to avoid breaking dependencies with some services that must be provided
-by the container (on @njasm proposal). This was proposed here: https://github.com/container-interop/container-interop/pull/20#issuecomment-56597235
-
-### 4.5 Alternative: having one of the containers act as the composite container
-
-In real-life scenarios, we usually have a big framework (Symfony 2, Zend Framework 2, etc...) and we want to
-add another DI container to this container. Most of the time, the "big" framework will be responsible for
-creating the controller's instances, using it's own DI container. Until *container-interop* is fully adopted,
-the "big" framework will not be aware of the existence of a composite container that it should use instead
-of its own container.
-
-For this real-life use cases, @mnapoli and @moufmouf proposed to extend the "big" framework's DI container
-to make it act as a composite container.
-
-This has been discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-40367194)
-and [here](http://mouf-php.com/container-interop-whats-next#solution4).
-
-This was implemented in Symfony 2 using:
-
-- [interop.symfony.di](https://github.com/thecodingmachine/interop.symfony.di/tree/v0.1.0)
-- [framework interop](https://github.com/mnapoli/framework-interop/)
-
-This was implemented in Silex using:
-
-- [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di)
-
-Having a container act as the composite container is not part of the delegate lookup standard because it is
-simply a temporary design pattern used to make existing frameworks that do not support yet ContainerInterop
-play nice with other DI containers.
-
-
-5. Implementations
-------------------
-
-The following projects already implement the delegate lookup feature:
-
-- [Mouf](http://mouf-php.com), through the [`setDelegateLookupContainer` method](https://github.com/thecodingmachine/mouf/blob/2.0/src/Mouf/MoufManager.php#L2120)
-- [PHP-DI](http://php-di.org/), through the [`$wrapperContainer` parameter of the constructor](https://github.com/mnapoli/PHP-DI/blob/master/src/DI/Container.php#L72)
-- [pimple-interop](https://github.com/moufmouf/pimple-interop), through the [`$container` parameter of the constructor](https://github.com/moufmouf/pimple-interop/blob/master/src/Interop/Container/Pimple/PimpleInterop.php#L62)
-
-6. People
----------
-
-Are listed here all people that contributed in the discussions, by alphabetical order:
-
-- [Alexandru Pătrănescu](https://github.com/drealecs)
-- [Ben Peachey](https://github.com/potherca)
-- [David Négrier](https://github.com/moufmouf)
-- [Jeremy Lindblom](https://github.com/jeremeamia)
-- [Marco Pivetta](https://github.com/Ocramius)
-- [Matthieu Napoli](https://github.com/mnapoli)
-- [Nelson J Morais](https://github.com/njasm)
-- [Phil Sturgeon](https://github.com/philsturgeon)
-- [Stephan Hochdörfer](https://github.com/shochdoerfer)
-
-7. Relevant Links
------------------
-
-_**Note:** Order descending chronologically._
-
-- [Pull request on the delegate lookup feature](https://github.com/container-interop/container-interop/pull/20)
-- [Pull request on the interface idea](https://github.com/container-interop/container-interop/pull/8)
-- [Original article exposing the delegate lookup idea along many others](http://mouf-php.com/container-interop-whats-next)
-
diff --git a/server/vendor/container-interop/container-interop/docs/Delegate-lookup.md b/server/vendor/container-interop/container-interop/docs/Delegate-lookup.md
deleted file mode 100644
index f64a8f7..0000000
--- a/server/vendor/container-interop/container-interop/docs/Delegate-lookup.md
+++ /dev/null
@@ -1,60 +0,0 @@
-Delegate lookup feature
-=======================
-
-This document describes a standard for dependency injection containers.
-
-The goal set by the *delegate lookup* feature is to allow several containers to share entries.
-Containers implementing this feature can perform dependency lookups in other containers.
-
-Containers implementing this feature will offer a greater lever of interoperability
-with other containers. Implementation of this feature is therefore RECOMMENDED.
-
-The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
-"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
-interpreted as described in [RFC 2119][].
-
-The word `implementor` in this document is to be interpreted as someone
-implementing the delegate lookup feature in a dependency injection-related library or framework.
-Users of dependency injections containers (DIC) are referred to as `user`.
-
-[RFC 2119]: http://tools.ietf.org/html/rfc2119
-
-1. Vocabulary
--------------
-
-In a dependency injection container, the container is used to fetch entries.
-Entries can have dependencies on other entries. Usually, these other entries are fetched by the container.
-
-The *delegate lookup* feature is the ability for a container to fetch dependencies in
-another container. In the rest of the document, the word "container" will reference the container
-implemented by the implementor. The word "delegate container" will reference the container we are
-fetching the dependencies from.
-
-2. Specification
-----------------
-
-A container implementing the *delegate lookup* feature:
-
-- MUST implement the [`ContainerInterface`](ContainerInterface.md)
-- MUST provide a way to register a delegate container (using a constructor parameter, or a setter,
- or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md).
-
-When a container is configured to use a delegate container for dependencies:
-
-- Calls to the `get` method should only return an entry if the entry is part of the container.
- If the entry is not part of the container, an exception should be thrown
- (as requested by the [`ContainerInterface`](ContainerInterface.md)).
-- Calls to the `has` method should only return `true` if the entry is part of the container.
- If the entry is not part of the container, `false` should be returned.
-- If the fetched entry has dependencies, **instead** of performing
- the dependency lookup in the container, the lookup is performed on the *delegate container*.
-
-Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself.
-
-It is however allowed for containers to provide exception cases for special entries, and a way to lookup
-into the same container (or another container) instead of the delegate container.
-
-3. Package / Interface
-----------------------
-
-This feature is not tied to any code, interface or package.
diff --git a/server/vendor/container-interop/container-interop/docs/images/interoperating_containers.png b/server/vendor/container-interop/container-interop/docs/images/interoperating_containers.png
deleted file mode 100644
index 1d3fdd0..0000000
--- a/server/vendor/container-interop/container-interop/docs/images/interoperating_containers.png
+++ /dev/null
Binary files differ
diff --git a/server/vendor/container-interop/container-interop/docs/images/priority.png b/server/vendor/container-interop/container-interop/docs/images/priority.png
deleted file mode 100644
index d02cb7d..0000000
--- a/server/vendor/container-interop/container-interop/docs/images/priority.png
+++ /dev/null
Binary files differ
diff --git a/server/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png b/server/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png
deleted file mode 100644
index 87884bc..0000000
--- a/server/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png
+++ /dev/null
Binary files differ
diff --git a/server/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php b/server/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php
deleted file mode 100644
index a75468f..0000000
--- a/server/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
- */
-
-namespace Interop\Container;
-
-use Psr\Container\ContainerInterface as PsrContainerInterface;
-
-/**
- * Describes the interface of a container that exposes methods to read its entries.
- */
-interface ContainerInterface extends PsrContainerInterface
-{
-}
diff --git a/server/vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php b/server/vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php
deleted file mode 100644
index 3964061..0000000
--- a/server/vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
- */
-
-namespace Interop\Container\Exception;
-
-use Psr\Container\ContainerExceptionInterface as PsrContainerException;
-
-/**
- * Base interface representing a generic exception in a container.
- */
-interface ContainerException extends PsrContainerException
-{
-}
diff --git a/server/vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php b/server/vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php
deleted file mode 100644
index 031b3ab..0000000
--- a/server/vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
- */
-
-namespace Interop\Container\Exception;
-
-use Psr\Container\NotFoundExceptionInterface as PsrNotFoundException;
-
-/**
- * No entry was found in the container.
- */
-interface NotFoundException extends ContainerException, PsrNotFoundException
-{
-}
diff --git a/server/vendor/guzzlehttp/guzzle/.travis.yml b/server/vendor/guzzlehttp/guzzle/.travis.yml
deleted file mode 100644
index e2f4f70..0000000
--- a/server/vendor/guzzlehttp/guzzle/.travis.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-language: php
-
-sudo: false
-
-php:
- - 5.5
- - 5.6
- - 7.0
- - 7.1
- - hhvm
-
-before_script:
- - curl --version
- - composer install --no-interaction --prefer-source --dev
- - ~/.nvm/nvm.sh install v0.6.14
- - ~/.nvm/nvm.sh run v0.6.14
- - '[ "$TRAVIS_PHP_VERSION" != "7.0" ] || echo "xdebug.overload_var_dump = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini'
-
-script: make test
-
-matrix:
- allow_failures:
- - php: hhvm
- fast_finish: true
-
-before_deploy:
- - rvm 1.9.3 do gem install mime-types -v 2.6.2
- - make package
-
-deploy:
- provider: releases
- api_key:
- secure: UpypqlYgsU68QT/x40YzhHXvzWjFwCNo9d+G8KAdm7U9+blFfcWhV1aMdzugvPMl6woXgvJj7qHq5tAL4v6oswCORhpSBfLgOQVFaica5LiHsvWlAedOhxGmnJqMTwuepjBCxXhs3+I8Kof1n4oUL9gKytXjOVCX/f7XU1HiinU=
- file:
- - build/artifacts/guzzle.phar
- - build/artifacts/guzzle.zip
- on:
- repo: guzzle/guzzle
- tags: true
- all_branches: true
- php: 5.5
diff --git a/server/vendor/guzzlehttp/guzzle/CHANGELOG.md b/server/vendor/guzzlehttp/guzzle/CHANGELOG.md
deleted file mode 100644
index dbce4ac..0000000
--- a/server/vendor/guzzlehttp/guzzle/CHANGELOG.md
+++ /dev/null
@@ -1,1243 +0,0 @@
-# CHANGELOG
-
-## 6.2.3 - 2017-02-28
-
-* Fix deprecations with guzzle/psr7 version 1.4
-
-## 6.2.2 - 2016-10-08
-
-* Allow to pass nullable Response to delay callable
-* Only add scheme when host is present
-* Fix drain case where content-length is the literal string zero
-* Obfuscate in-URL credentials in exceptions
-
-## 6.2.1 - 2016-07-18
-
-* Address HTTP_PROXY security vulnerability, CVE-2016-5385:
- https://httpoxy.org/
-* Fixing timeout bug with StreamHandler:
- https://github.com/guzzle/guzzle/pull/1488
-* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when
- a server does not honor `Connection: close`.
-* Ignore URI fragment when sending requests.
-
-## 6.2.0 - 2016-03-21
-
-* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`.
- https://github.com/guzzle/guzzle/pull/1389
-* Bug fix: Fix sleep calculation when waiting for delayed requests.
- https://github.com/guzzle/guzzle/pull/1324
-* Feature: More flexible history containers.
- https://github.com/guzzle/guzzle/pull/1373
-* Bug fix: defer sink stream opening in StreamHandler.
- https://github.com/guzzle/guzzle/pull/1377
-* Bug fix: do not attempt to escape cookie values.
- https://github.com/guzzle/guzzle/pull/1406
-* Feature: report original content encoding and length on decoded responses.
- https://github.com/guzzle/guzzle/pull/1409
-* Bug fix: rewind seekable request bodies before dispatching to cURL.
- https://github.com/guzzle/guzzle/pull/1422
-* Bug fix: provide an empty string to `http_build_query` for HHVM workaround.
- https://github.com/guzzle/guzzle/pull/1367
-
-## 6.1.1 - 2015-11-22
-
-* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler
- https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4
-* Feature: HandlerStack is now more generic.
- https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e
-* Bug fix: setting verify to false in the StreamHandler now disables peer
- verification. https://github.com/guzzle/guzzle/issues/1256
-* Feature: Middleware now uses an exception factory, including more error
- context. https://github.com/guzzle/guzzle/pull/1282
-* Feature: better support for disabled functions.
- https://github.com/guzzle/guzzle/pull/1287
-* Bug fix: fixed regression where MockHandler was not using `sink`.
- https://github.com/guzzle/guzzle/pull/1292
-
-## 6.1.0 - 2015-09-08
-
-* Feature: Added the `on_stats` request option to provide access to transfer
- statistics for requests. https://github.com/guzzle/guzzle/pull/1202
-* Feature: Added the ability to persist session cookies in CookieJars.
- https://github.com/guzzle/guzzle/pull/1195
-* Feature: Some compatibility updates for Google APP Engine
- https://github.com/guzzle/guzzle/pull/1216
-* Feature: Added support for NO_PROXY to prevent the use of a proxy based on
- a simple set of rules. https://github.com/guzzle/guzzle/pull/1197
-* Feature: Cookies can now contain square brackets.
- https://github.com/guzzle/guzzle/pull/1237
-* Bug fix: Now correctly parsing `=` inside of quotes in Cookies.
- https://github.com/guzzle/guzzle/pull/1232
-* Bug fix: Cusotm cURL options now correctly override curl options of the
- same name. https://github.com/guzzle/guzzle/pull/1221
-* Bug fix: Content-Type header is now added when using an explicitly provided
- multipart body. https://github.com/guzzle/guzzle/pull/1218
-* Bug fix: Now ignoring Set-Cookie headers that have no name.
-* Bug fix: Reason phrase is no longer cast to an int in some cases in the
- cURL handler. https://github.com/guzzle/guzzle/pull/1187
-* Bug fix: Remove the Authorization header when redirecting if the Host
- header changes. https://github.com/guzzle/guzzle/pull/1207
-* Bug fix: Cookie path matching fixes
- https://github.com/guzzle/guzzle/issues/1129
-* Bug fix: Fixing the cURL `body_as_string` setting
- https://github.com/guzzle/guzzle/pull/1201
-* Bug fix: quotes are no longer stripped when parsing cookies.
- https://github.com/guzzle/guzzle/issues/1172
-* Bug fix: `form_params` and `query` now always uses the `&` separator.
- https://github.com/guzzle/guzzle/pull/1163
-* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.
- https://github.com/guzzle/guzzle/pull/1189
-
-## 6.0.2 - 2015-07-04
-
-* Fixed a memory leak in the curl handlers in which references to callbacks
- were not being removed by `curl_reset`.
-* Cookies are now extracted properly before redirects.
-* Cookies now allow more character ranges.
-* Decoded Content-Encoding responses are now modified to correctly reflect
- their state if the encoding was automatically removed by a handler. This
- means that the `Content-Encoding` header may be removed an the
- `Content-Length` modified to reflect the message size after removing the
- encoding.
-* Added a more explicit error message when trying to use `form_params` and
- `multipart` in the same request.
-* Several fixes for HHVM support.
-* Functions are now conditionally required using an additional level of
- indirection to help with global Composer installations.
-
-## 6.0.1 - 2015-05-27
-
-* Fixed a bug with serializing the `query` request option where the `&`
- separator was missing.
-* Added a better error message for when `body` is provided as an array. Please
- use `form_params` or `multipart` instead.
-* Various doc fixes.
-
-## 6.0.0 - 2015-05-26
-
-* See the UPGRADING.md document for more information.
-* Added `multipart` and `form_params` request options.
-* Added `synchronous` request option.
-* Added the `on_headers` request option.
-* Fixed `expect` handling.
-* No longer adding default middlewares in the client ctor. These need to be
- present on the provided handler in order to work.
-* Requests are no longer initiated when sending async requests with the
- CurlMultiHandler. This prevents unexpected recursion from requests completing
- while ticking the cURL loop.
-* Removed the semantics of setting `default` to `true`. This is no longer
- required now that the cURL loop is not ticked for async requests.
-* Added request and response logging middleware.
-* No longer allowing self signed certificates when using the StreamHandler.
-* Ensuring that `sink` is valid if saving to a file.
-* Request exceptions now include a "handler context" which provides handler
- specific contextual information.
-* Added `GuzzleHttp\RequestOptions` to allow request options to be applied
- using constants.
-* `$maxHandles` has been removed from CurlMultiHandler.
-* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.
-
-## 5.3.0 - 2015-05-19
-
-* Mock now supports `save_to`
-* Marked `AbstractRequestEvent::getTransaction()` as public.
-* Fixed a bug in which multiple headers using different casing would overwrite
- previous headers in the associative array.
-* Added `Utils::getDefaultHandler()`
-* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated.
-* URL scheme is now always lowercased.
-
-## 6.0.0-beta.1
-
-* Requires PHP >= 5.5
-* Updated to use PSR-7
- * Requires immutable messages, which basically means an event based system
- owned by a request instance is no longer possible.
- * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).
- * Removed the dependency on `guzzlehttp/streams`. These stream abstractions
- are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7`
- namespace.
-* Added middleware and handler system
- * Replaced the Guzzle event and subscriber system with a middleware system.
- * No longer depends on RingPHP, but rather places the HTTP handlers directly
- in Guzzle, operating on PSR-7 messages.
- * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which
- means the `guzzlehttp/retry-subscriber` is now obsolete.
- * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`.
-* Asynchronous responses
- * No longer supports the `future` request option to send an async request.
- Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,
- `getAsync`, etc.).
- * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid
- recursion required by chaining and forwarding react promises. See
- https://github.com/guzzle/promises
- * Added `requestAsync` and `sendAsync` to send request asynchronously.
- * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests
- asynchronously.
-* Request options
- * POST and form updates
- * Added the `form_fields` and `form_files` request options.
- * Removed the `GuzzleHttp\Post` namespace.
- * The `body` request option no longer accepts an array for POST requests.
- * The `exceptions` request option has been deprecated in favor of the
- `http_errors` request options.
- * The `save_to` request option has been deprecated in favor of `sink` request
- option.
-* Clients no longer accept an array of URI template string and variables for
- URI variables. You will need to expand URI templates before passing them
- into a client constructor or request method.
-* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are
- now magic methods that will send synchronous requests.
-* Replaced `Utils.php` with plain functions in `functions.php`.
-* Removed `GuzzleHttp\Collection`.
-* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as
- an array.
-* Removed `GuzzleHttp\Query`. Query string handling is now handled using an
- associative array passed into the `query` request option. The query string
- is serialized using PHP's `http_build_query`. If you need more control, you
- can pass the query string in as a string.
-* `GuzzleHttp\QueryParser` has been replaced with the
- `GuzzleHttp\Psr7\parse_query`.
-
-## 5.2.0 - 2015-01-27
-
-* Added `AppliesHeadersInterface` to make applying headers to a request based
- on the body more generic and not specific to `PostBodyInterface`.
-* Reduced the number of stack frames needed to send requests.
-* Nested futures are now resolved in the client rather than the RequestFsm
-* Finishing state transitions is now handled in the RequestFsm rather than the
- RingBridge.
-* Added a guard in the Pool class to not use recursion for request retries.
-
-## 5.1.0 - 2014-12-19
-
-* Pool class no longer uses recursion when a request is intercepted.
-* The size of a Pool can now be dynamically adjusted using a callback.
- See https://github.com/guzzle/guzzle/pull/943.
-* Setting a request option to `null` when creating a request with a client will
- ensure that the option is not set. This allows you to overwrite default
- request options on a per-request basis.
- See https://github.com/guzzle/guzzle/pull/937.
-* Added the ability to limit which protocols are allowed for redirects by
- specifying a `protocols` array in the `allow_redirects` request option.
-* Nested futures due to retries are now resolved when waiting for synchronous
- responses. See https://github.com/guzzle/guzzle/pull/947.
-* `"0"` is now an allowed URI path. See
- https://github.com/guzzle/guzzle/pull/935.
-* `Query` no longer typehints on the `$query` argument in the constructor,
- allowing for strings and arrays.
-* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle
- specific exceptions if necessary.
-
-## 5.0.3 - 2014-11-03
-
-This change updates query strings so that they are treated as un-encoded values
-by default where the value represents an un-encoded value to send over the
-wire. A Query object then encodes the value before sending over the wire. This
-means that even value query string values (e.g., ":") are url encoded. This
-makes the Query class match PHP's http_build_query function. However, if you
-want to send requests over the wire using valid query string characters that do
-not need to be encoded, then you can provide a string to Url::setQuery() and
-pass true as the second argument to specify that the query string is a raw
-string that should not be parsed or encoded (unless a call to getQuery() is
-subsequently made, forcing the query-string to be converted into a Query
-object).
-
-## 5.0.2 - 2014-10-30
-
-* Added a trailing `\r\n` to multipart/form-data payloads. See
- https://github.com/guzzle/guzzle/pull/871
-* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs.
-* Status codes are now returned as integers. See
- https://github.com/guzzle/guzzle/issues/881
-* No longer overwriting an existing `application/x-www-form-urlencoded` header
- when sending POST requests, allowing for customized headers. See
- https://github.com/guzzle/guzzle/issues/877
-* Improved path URL serialization.
-
- * No longer double percent-encoding characters in the path or query string if
- they are already encoded.
- * Now properly encoding the supplied path to a URL object, instead of only
- encoding ' ' and '?'.
- * Note: This has been changed in 5.0.3 to now encode query string values by
- default unless the `rawString` argument is provided when setting the query
- string on a URL: Now allowing many more characters to be present in the
- query string without being percent encoded. See http://tools.ietf.org/html/rfc3986#appendix-A
-
-## 5.0.1 - 2014-10-16
-
-Bugfix release.
-
-* Fixed an issue where connection errors still returned response object in
- error and end events event though the response is unusable. This has been
- corrected so that a response is not returned in the `getResponse` method of
- these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867
-* Fixed an issue where transfer statistics were not being populated in the
- RingBridge. https://github.com/guzzle/guzzle/issues/866
-
-## 5.0.0 - 2014-10-12
-
-Adding support for non-blocking responses and some minor API cleanup.
-
-### New Features
-
-* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.
-* Added a public API for creating a default HTTP adapter.
-* Updated the redirect plugin to be non-blocking so that redirects are sent
- concurrently. Other plugins like this can now be updated to be non-blocking.
-* Added a "progress" event so that you can get upload and download progress
- events.
-* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers
- requests concurrently using a capped pool size as efficiently as possible.
-* Added `hasListeners()` to EmitterInterface.
-* Removed `GuzzleHttp\ClientInterface::sendAll` and marked
- `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the
- recommended way).
-
-### Breaking changes
-
-The breaking changes in this release are relatively minor. The biggest thing to
-look out for is that request and response objects no longer implement fluent
-interfaces.
-
-* Removed the fluent interfaces (i.e., `return $this`) from requests,
- responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`,
- `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and
- `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of
- why I did this: http://ocramius.github.io/blog/fluent-interfaces-are-evil/.
- This also makes the Guzzle message interfaces compatible with the current
- PSR-7 message proposal.
-* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except
- for the HTTP request functions from function.php, these functions are now
- implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode`
- moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to
- `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to
- `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be
- `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php
- caused problems for many users: they aren't PSR-4 compliant, require an
- explicit include, and needed an if-guard to ensure that the functions are not
- declared multiple times.
-* Rewrote adapter layer.
- * Removing all classes from `GuzzleHttp\Adapter`, these are now
- implemented as callables that are stored in `GuzzleHttp\Ring\Client`.
- * Removed the concept of "parallel adapters". Sending requests serially or
- concurrently is now handled using a single adapter.
- * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The
- Transaction object now exposes the request, response, and client as public
- properties. The getters and setters have been removed.
-* Removed the "headers" event. This event was only useful for changing the
- body a response once the headers of the response were known. You can implement
- a similar behavior in a number of ways. One example might be to use a
- FnStream that has access to the transaction being sent. For example, when the
- first byte is written, you could check if the response headers match your
- expectations, and if so, change the actual stream body that is being
- written to.
-* Removed the `asArray` parameter from
- `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
- value as an array, then use the newly added `getHeaderAsArray()` method of
- `MessageInterface`. This change makes the Guzzle interfaces compatible with
- the PSR-7 interfaces.
-* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add
- custom request options using double-dispatch (this was an implementation
- detail). Instead, you should now provide an associative array to the
- constructor which is a mapping of the request option name mapping to a
- function that applies the option value to a request.
-* Removed the concept of "throwImmediately" from exceptions and error events.
- This control mechanism was used to stop a transfer of concurrent requests
- from completing. This can now be handled by throwing the exception or by
- cancelling a pool of requests or each outstanding future request individually.
-* Updated to "GuzzleHttp\Streams" 3.0.
- * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a
- `maxLen` parameter. This update makes the Guzzle streams project
- compatible with the current PSR-7 proposal.
- * `GuzzleHttp\Stream\Stream::__construct`,
- `GuzzleHttp\Stream\Stream::factory`, and
- `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second
- argument. They now accept an associative array of options, including the
- "size" key and "metadata" key which can be used to provide custom metadata.
-
-## 4.2.2 - 2014-09-08
-
-* Fixed a memory leak in the CurlAdapter when reusing cURL handles.
-* No longer using `request_fulluri` in stream adapter proxies.
-* Relative redirects are now based on the last response, not the first response.
-
-## 4.2.1 - 2014-08-19
-
-* Ensuring that the StreamAdapter does not always add a Content-Type header
-* Adding automated github releases with a phar and zip
-
-## 4.2.0 - 2014-08-17
-
-* Now merging in default options using a case-insensitive comparison.
- Closes https://github.com/guzzle/guzzle/issues/767
-* Added the ability to automatically decode `Content-Encoding` response bodies
- using the `decode_content` request option. This is set to `true` by default
- to decode the response body if it comes over the wire with a
- `Content-Encoding`. Set this value to `false` to disable decoding the
- response content, and pass a string to provide a request `Accept-Encoding`
- header and turn on automatic response decoding. This feature now allows you
- to pass an `Accept-Encoding` header in the headers of a request but still
- disable automatic response decoding.
- Closes https://github.com/guzzle/guzzle/issues/764
-* Added the ability to throw an exception immediately when transferring
- requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760
-* Updating guzzlehttp/streams dependency to ~2.1
-* No longer utilizing the now deprecated namespaced methods from the stream
- package.
-
-## 4.1.8 - 2014-08-14
-
-* Fixed an issue in the CurlFactory that caused setting the `stream=false`
- request option to throw an exception.
- See: https://github.com/guzzle/guzzle/issues/769
-* TransactionIterator now calls rewind on the inner iterator.
- See: https://github.com/guzzle/guzzle/pull/765
-* You can now set the `Content-Type` header to `multipart/form-data`
- when creating POST requests to force multipart bodies.
- See https://github.com/guzzle/guzzle/issues/768
-
-## 4.1.7 - 2014-08-07
-
-* Fixed an error in the HistoryPlugin that caused the same request and response
- to be logged multiple times when an HTTP protocol error occurs.
-* Ensuring that cURL does not add a default Content-Type when no Content-Type
- has been supplied by the user. This prevents the adapter layer from modifying
- the request that is sent over the wire after any listeners may have already
- put the request in a desired state (e.g., signed the request).
-* Throwing an exception when you attempt to send requests that have the
- "stream" set to true in parallel using the MultiAdapter.
-* Only calling curl_multi_select when there are active cURL handles. This was
- previously changed and caused performance problems on some systems due to PHP
- always selecting until the maximum select timeout.
-* Fixed a bug where multipart/form-data POST fields were not correctly
- aggregated (e.g., values with "&").
-
-## 4.1.6 - 2014-08-03
-
-* Added helper methods to make it easier to represent messages as strings,
- including getting the start line and getting headers as a string.
-
-## 4.1.5 - 2014-08-02
-
-* Automatically retrying cURL "Connection died, retrying a fresh connect"
- errors when possible.
-* cURL implementation cleanup
-* Allowing multiple event subscriber listeners to be registered per event by
- passing an array of arrays of listener configuration.
-
-## 4.1.4 - 2014-07-22
-
-* Fixed a bug that caused multi-part POST requests with more than one field to
- serialize incorrectly.
-* Paths can now be set to "0"
-* `ResponseInterface::xml` now accepts a `libxml_options` option and added a
- missing default argument that was required when parsing XML response bodies.
-* A `save_to` stream is now created lazily, which means that files are not
- created on disk unless a request succeeds.
-
-## 4.1.3 - 2014-07-15
-
-* Various fixes to multipart/form-data POST uploads
-* Wrapping function.php in an if-statement to ensure Guzzle can be used
- globally and in a Composer install
-* Fixed an issue with generating and merging in events to an event array
-* POST headers are only applied before sending a request to allow you to change
- the query aggregator used before uploading
-* Added much more robust query string parsing
-* Fixed various parsing and normalization issues with URLs
-* Fixing an issue where multi-valued headers were not being utilized correctly
- in the StreamAdapter
-
-## 4.1.2 - 2014-06-18
-
-* Added support for sending payloads with GET requests
-
-## 4.1.1 - 2014-06-08
-
-* Fixed an issue related to using custom message factory options in subclasses
-* Fixed an issue with nested form fields in a multi-part POST
-* Fixed an issue with using the `json` request option for POST requests
-* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar`
-
-## 4.1.0 - 2014-05-27
-
-* Added a `json` request option to easily serialize JSON payloads.
-* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON.
-* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`.
-* Added the ability to provide an emitter to a client in the client constructor.
-* Added the ability to persist a cookie session using $_SESSION.
-* Added a trait that can be used to add event listeners to an iterator.
-* Removed request method constants from RequestInterface.
-* Fixed warning when invalid request start-lines are received.
-* Updated MessageFactory to work with custom request option methods.
-* Updated cacert bundle to latest build.
-
-4.0.2 (2014-04-16)
-------------------
-
-* Proxy requests using the StreamAdapter now properly use request_fulluri (#632)
-* Added the ability to set scalars as POST fields (#628)
-
-## 4.0.1 - 2014-04-04
-
-* The HTTP status code of a response is now set as the exception code of
- RequestException objects.
-* 303 redirects will now correctly switch from POST to GET requests.
-* The default parallel adapter of a client now correctly uses the MultiAdapter.
-* HasDataTrait now initializes the internal data array as an empty array so
- that the toArray() method always returns an array.
-
-## 4.0.0 - 2014-03-29
-
-* For more information on the 4.0 transition, see:
- http://mtdowling.com/blog/2014/03/15/guzzle-4-rc/
-* For information on changes and upgrading, see:
- https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
-* Added `GuzzleHttp\batch()` as a convenience function for sending requests in
- parallel without needing to write asynchronous code.
-* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`.
- You can now pass a callable or an array of associative arrays where each
- associative array contains the "fn", "priority", and "once" keys.
-
-## 4.0.0.rc-2 - 2014-03-25
-
-* Removed `getConfig()` and `setConfig()` from clients to avoid confusion
- around whether things like base_url, message_factory, etc. should be able to
- be retrieved or modified.
-* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface
-* functions.php functions were renamed using snake_case to match PHP idioms
-* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and
- `GUZZLE_CURL_SELECT_TIMEOUT` environment variables
-* Added the ability to specify custom `sendAll()` event priorities
-* Added the ability to specify custom stream context options to the stream
- adapter.
-* Added a functions.php function for `get_path()` and `set_path()`
-* CurlAdapter and MultiAdapter now use a callable to generate curl resources
-* MockAdapter now properly reads a body and emits a `headers` event
-* Updated Url class to check if a scheme and host are set before adding ":"
- and "//". This allows empty Url (e.g., "") to be serialized as "".
-* Parsing invalid XML no longer emits warnings
-* Curl classes now properly throw AdapterExceptions
-* Various performance optimizations
-* Streams are created with the faster `Stream\create()` function
-* Marked deprecation_proxy() as internal
-* Test server is now a collection of static methods on a class
-
-## 4.0.0-rc.1 - 2014-03-15
-
-* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40
-
-## 3.8.1 - 2014-01-28
-
-* Bug: Always using GET requests when redirecting from a 303 response
-* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in
- `Guzzle\Http\ClientInterface::setSslVerification()`
-* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL
-* Bug: The body of a request can now be set to `"0"`
-* Sending PHP stream requests no longer forces `HTTP/1.0`
-* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of
- each sub-exception
-* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than
- clobbering everything).
-* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)
-* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.
- For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.
-* Now properly escaping the regular expression delimiter when matching Cookie domains.
-* Network access is now disabled when loading XML documents
-
-## 3.8.0 - 2013-12-05
-
-* Added the ability to define a POST name for a file
-* JSON response parsing now properly walks additionalProperties
-* cURL error code 18 is now retried automatically in the BackoffPlugin
-* Fixed a cURL error when URLs contain fragments
-* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were
- CurlExceptions
-* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)
-* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`
-* Fixed a bug that was encountered when parsing empty header parameters
-* UriTemplate now has a `setRegex()` method to match the docs
-* The `debug` request parameter now checks if it is truthy rather than if it exists
-* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin
-* Added the ability to combine URLs using strict RFC 3986 compliance
-* Command objects can now return the validation errors encountered by the command
-* Various fixes to cache revalidation (#437 and 29797e5)
-* Various fixes to the AsyncPlugin
-* Cleaned up build scripts
-
-## 3.7.4 - 2013-10-02
-
-* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)
-* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp
- (see https://github.com/aws/aws-sdk-php/issues/147)
-* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots
-* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)
-* Updated the bundled cacert.pem (#419)
-* OauthPlugin now supports adding authentication to headers or query string (#425)
-
-## 3.7.3 - 2013-09-08
-
-* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and
- `CommandTransferException`.
-* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description
-* Schemas are only injected into response models when explicitly configured.
-* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of
- an EntityBody.
-* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator.
-* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`.
-* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()
-* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin
-* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests
-* Bug fix: Properly parsing headers that contain commas contained in quotes
-* Bug fix: mimetype guessing based on a filename is now case-insensitive
-
-## 3.7.2 - 2013-08-02
-
-* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander
- See https://github.com/guzzle/guzzle/issues/371
-* Bug fix: Cookie domains are now matched correctly according to RFC 6265
- See https://github.com/guzzle/guzzle/issues/377
-* Bug fix: GET parameters are now used when calculating an OAuth signature
-* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted
-* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched
-* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.
- See https://github.com/guzzle/guzzle/issues/379
-* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See
- https://github.com/guzzle/guzzle/pull/380
-* cURL multi cleanup and optimizations
-
-## 3.7.1 - 2013-07-05
-
-* Bug fix: Setting default options on a client now works
-* Bug fix: Setting options on HEAD requests now works. See #352
-* Bug fix: Moving stream factory before send event to before building the stream. See #353
-* Bug fix: Cookies no longer match on IP addresses per RFC 6265
-* Bug fix: Correctly parsing header parameters that are in `<>` and quotes
-* Added `cert` and `ssl_key` as request options
-* `Host` header can now diverge from the host part of a URL if the header is set manually
-* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter
-* OAuth parameters are only added via the plugin if they aren't already set
-* Exceptions are now thrown when a URL cannot be parsed
-* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails
-* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin
-
-## 3.7.0 - 2013-06-10
-
-* See UPGRADING.md for more information on how to upgrade.
-* Requests now support the ability to specify an array of $options when creating a request to more easily modify a
- request. You can pass a 'request.options' configuration setting to a client to apply default request options to
- every request created by a client (e.g. default query string variables, headers, curl options, etc.).
-* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`.
- See `Guzzle\Http\StaticClient::mount`.
-* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests
- created by a command (e.g. custom headers, query string variables, timeout settings, etc.).
-* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the
- headers of a response
-* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key
- (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)
-* ServiceBuilders now support storing and retrieving arbitrary data
-* CachePlugin can now purge all resources for a given URI
-* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource
-* CachePlugin now uses the Vary header to determine if a resource is a cache hit
-* `Guzzle\Http\Message\Response` now implements `\Serializable`
-* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters
-* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable
-* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()`
-* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size
-* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message
-* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older
- Symfony users can still use the old version of Monolog.
-* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`.
- Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.
-* Several performance improvements to `Guzzle\Common\Collection`
-* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
- createRequest, head, delete, put, patch, post, options, prepareRequest
-* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
-* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
-* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
- `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
- resource, string, or EntityBody into the $options parameter to specify the download location of the response.
-* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
- default `array()`
-* Added `Guzzle\Stream\StreamInterface::isRepeatable`
-* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
- $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
- $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.
-* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.
-* Removed `Guzzle\Http\ClientInterface::expandTemplate()`
-* Removed `Guzzle\Http\ClientInterface::setRequestFactory()`
-* Removed `Guzzle\Http\ClientInterface::getCurlMulti()`
-* Removed `Guzzle\Http\Message\RequestInterface::canCache`
-* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`
-* Removed `Guzzle\Http\Message\RequestInterface::isRedirect`
-* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
-* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting
- `Guzzle\Common\Version::$emitWarnings` to true.
-* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use
- `$request->getResponseBody()->isRepeatable()` instead.
-* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
- `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
-* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use
- `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
-* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
-* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
-* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
-* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.
- These will work through Guzzle 4.0
-* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params].
-* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
-* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.
-* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.
-* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
-* Marked `Guzzle\Common\Collection::inject()` as deprecated.
-* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`
-* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
- CacheStorageInterface. These two objects and interface will be removed in a future version.
-* Always setting X-cache headers on cached responses
-* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
-* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
- $request, Response $response);`
-* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
-* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
-* Added `CacheStorageInterface::purge($url)`
-* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
- $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
- CanCacheStrategyInterface $canCache = null)`
-* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
-
-## 3.6.0 - 2013-05-29
-
-* ServiceDescription now implements ToArrayInterface
-* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters
-* Guzzle can now correctly parse incomplete URLs
-* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
-* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
-* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
-* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
- HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
- CacheControl header implementation.
-* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
-* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
-* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
- Guzzle\Http\Curl\RequestMediator
-* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
-* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
-* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
-* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
-* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
-* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
-* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle
- directly via interfaces
-* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
- but are a no-op until removed.
-* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a
- `Guzzle\Service\Command\ArrayCommandInterface`.
-* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
- on a request while the request is still being transferred
-* The ability to case-insensitively search for header values
-* Guzzle\Http\Message\Header::hasExactHeader
-* Guzzle\Http\Message\Header::raw. Use getAll()
-* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
- instead.
-* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
-* Added the ability to cast Model objects to a string to view debug information.
-
-## 3.5.0 - 2013-05-13
-
-* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times
-* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove
- itself from the EventDispatcher)
-* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values
-* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too
-* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a
- non-existent key
-* Bug: All __call() method arguments are now required (helps with mocking frameworks)
-* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference
- to help with refcount based garbage collection of resources created by sending a request
-* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.
-* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the
- HistoryPlugin for a history.
-* Added a `responseBody` alias for the `response_body` location
-* Refactored internals to no longer rely on Response::getRequest()
-* HistoryPlugin can now be cast to a string
-* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests
- and responses that are sent over the wire
-* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects
-
-## 3.4.3 - 2013-04-30
-
-* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response
-* Added a check to re-extract the temp cacert bundle from the phar before sending each request
-
-## 3.4.2 - 2013-04-29
-
-* Bug fix: Stream objects now work correctly with "a" and "a+" modes
-* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present
-* Bug fix: AsyncPlugin no longer forces HEAD requests
-* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter
-* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails
-* Setting a response on a request will write to the custom request body from the response body if one is specified
-* LogPlugin now writes to php://output when STDERR is undefined
-* Added the ability to set multiple POST files for the same key in a single call
-* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default
-* Added the ability to queue CurlExceptions to the MockPlugin
-* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send)
-* Configuration loading now allows remote files
-
-## 3.4.1 - 2013-04-16
-
-* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti
- handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.
-* Exceptions are now properly grouped when sending requests in parallel
-* Redirects are now properly aggregated when a multi transaction fails
-* Redirects now set the response on the original object even in the event of a failure
-* Bug fix: Model names are now properly set even when using $refs
-* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax
-* Added support for oauth_callback in OAuth signatures
-* Added support for oauth_verifier in OAuth signatures
-* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection
-
-## 3.4.0 - 2013-04-11
-
-* Bug fix: URLs are now resolved correctly based on http://tools.ietf.org/html/rfc3986#section-5.2. #289
-* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289
-* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263
-* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.
-* Bug fix: Added `number` type to service descriptions.
-* Bug fix: empty parameters are removed from an OAuth signature
-* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header
-* Bug fix: Fixed "array to string" error when validating a union of types in a service description
-* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream
-* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.
-* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.
-* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.
-* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if
- the Content-Type can be determined based on the entity body or the path of the request.
-* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.
-* Added support for a PSR-3 LogAdapter.
-* Added a `command.after_prepare` event
-* Added `oauth_callback` parameter to the OauthPlugin
-* Added the ability to create a custom stream class when using a stream factory
-* Added a CachingEntityBody decorator
-* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.
-* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.
-* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies
-* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This
- means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use
- POST fields or files (the latter is only used when emulating a form POST in the browser).
-* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest
-
-## 3.3.1 - 2013-03-10
-
-* Added the ability to create PHP streaming responses from HTTP requests
-* Bug fix: Running any filters when parsing response headers with service descriptions
-* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing
-* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across
- response location visitors.
-* Bug fix: Removed the possibility of creating configuration files with circular dependencies
-* RequestFactory::create() now uses the key of a POST file when setting the POST file name
-* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set
-
-## 3.3.0 - 2013-03-03
-
-* A large number of performance optimizations have been made
-* Bug fix: Added 'wb' as a valid write mode for streams
-* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned
-* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()`
-* BC: Removed `Guzzle\Http\Utils` class
-* BC: Setting a service description on a client will no longer modify the client's command factories.
-* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using
- the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
-* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to
- lowercase
-* Operation parameter objects are now lazy loaded internally
-* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses
-* Added support for instantiating responseType=class responseClass classes. Classes must implement
- `Guzzle\Service\Command\ResponseClassInterface`
-* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These
- additional properties also support locations and can be used to parse JSON responses where the outermost part of the
- JSON is an array
-* Added support for nested renaming of JSON models (rename sentAs to name)
-* CachePlugin
- * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error
- * Debug headers can now added to cached response in the CachePlugin
-
-## 3.2.0 - 2013-02-14
-
-* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.
-* URLs with no path no longer contain a "/" by default
-* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url.
-* BadResponseException no longer includes the full request and response message
-* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface
-* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface
-* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription
-* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list
-* xmlEncoding can now be customized for the XML declaration of a XML service description operation
-* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value
- aggregation and no longer uses callbacks
-* The URL encoding implementation of Guzzle\Http\QueryString can now be customized
-* Bug fix: Filters were not always invoked for array service description parameters
-* Bug fix: Redirects now use a target response body rather than a temporary response body
-* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded
-* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives
-
-## 3.1.2 - 2013-01-27
-
-* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the
- response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.
-* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent
-* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)
-* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()
-* Setting default headers on a client after setting the user-agent will not erase the user-agent setting
-
-## 3.1.1 - 2013-01-20
-
-* Adding wildcard support to Guzzle\Common\Collection::getPath()
-* Adding alias support to ServiceBuilder configs
-* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface
-
-## 3.1.0 - 2013-01-12
-
-* BC: CurlException now extends from RequestException rather than BadResponseException
-* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()
-* Added getData to ServiceDescriptionInterface
-* Added context array to RequestInterface::setState()
-* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http
-* Bug: Adding required content-type when JSON request visitor adds JSON to a command
-* Bug: Fixing the serialization of a service description with custom data
-* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing
- an array of successful and failed responses
-* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection
-* Added Guzzle\Http\IoEmittingEntityBody
-* Moved command filtration from validators to location visitors
-* Added `extends` attributes to service description parameters
-* Added getModels to ServiceDescriptionInterface
-
-## 3.0.7 - 2012-12-19
-
-* Fixing phar detection when forcing a cacert to system if null or true
-* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()`
-* Cleaning up `Guzzle\Common\Collection::inject` method
-* Adding a response_body location to service descriptions
-
-## 3.0.6 - 2012-12-09
-
-* CurlMulti performance improvements
-* Adding setErrorResponses() to Operation
-* composer.json tweaks
-
-## 3.0.5 - 2012-11-18
-
-* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin
-* Bug: Response body can now be a string containing "0"
-* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert
-* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs
-* Added support for XML attributes in service description responses
-* DefaultRequestSerializer now supports array URI parameter values for URI template expansion
-* Added better mimetype guessing to requests and post files
-
-## 3.0.4 - 2012-11-11
-
-* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value
-* Bug: Cookies can now be added that have a name, domain, or value set to "0"
-* Bug: Using the system cacert bundle when using the Phar
-* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures
-* Enhanced cookie jar de-duplication
-* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added
-* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies
-* Added the ability to create any sort of hash for a stream rather than just an MD5 hash
-
-## 3.0.3 - 2012-11-04
-
-* Implementing redirects in PHP rather than cURL
-* Added PECL URI template extension and using as default parser if available
-* Bug: Fixed Content-Length parsing of Response factory
-* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.
-* Adding ToArrayInterface throughout library
-* Fixing OauthPlugin to create unique nonce values per request
-
-## 3.0.2 - 2012-10-25
-
-* Magic methods are enabled by default on clients
-* Magic methods return the result of a command
-* Service clients no longer require a base_url option in the factory
-* Bug: Fixed an issue with URI templates where null template variables were being expanded
-
-## 3.0.1 - 2012-10-22
-
-* Models can now be used like regular collection objects by calling filter, map, etc.
-* Models no longer require a Parameter structure or initial data in the constructor
-* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator`
-
-## 3.0.0 - 2012-10-15
-
-* Rewrote service description format to be based on Swagger
- * Now based on JSON schema
- * Added nested input structures and nested response models
- * Support for JSON and XML input and output models
- * Renamed `commands` to `operations`
- * Removed dot class notation
- * Removed custom types
-* Broke the project into smaller top-level namespaces to be more component friendly
-* Removed support for XML configs and descriptions. Use arrays or JSON files.
-* Removed the Validation component and Inspector
-* Moved all cookie code to Guzzle\Plugin\Cookie
-* Magic methods on a Guzzle\Service\Client now return the command un-executed.
-* Calling getResult() or getResponse() on a command will lazily execute the command if needed.
-* Now shipping with cURL's CA certs and using it by default
-* Added previousResponse() method to response objects
-* No longer sending Accept and Accept-Encoding headers on every request
-* Only sending an Expect header by default when a payload is greater than 1MB
-* Added/moved client options:
- * curl.blacklist to curl.option.blacklist
- * Added ssl.certificate_authority
-* Added a Guzzle\Iterator component
-* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin
-* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)
-* Added a more robust caching plugin
-* Added setBody to response objects
-* Updating LogPlugin to use a more flexible MessageFormatter
-* Added a completely revamped build process
-* Cleaning up Collection class and removing default values from the get method
-* Fixed ZF2 cache adapters
-
-## 2.8.8 - 2012-10-15
-
-* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did
-
-## 2.8.7 - 2012-09-30
-
-* Bug: Fixed config file aliases for JSON includes
-* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests
-* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload
-* Bug: Hardening request and response parsing to account for missing parts
-* Bug: Fixed PEAR packaging
-* Bug: Fixed Request::getInfo
-* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail
-* Adding the ability for the namespace Iterator factory to look in multiple directories
-* Added more getters/setters/removers from service descriptions
-* Added the ability to remove POST fields from OAuth signatures
-* OAuth plugin now supports 2-legged OAuth
-
-## 2.8.6 - 2012-09-05
-
-* Added the ability to modify and build service descriptions
-* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command
-* Added a `json` parameter location
-* Now allowing dot notation for classes in the CacheAdapterFactory
-* Using the union of two arrays rather than an array_merge when extending service builder services and service params
-* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references
- in service builder config files.
-* Services defined in two different config files that include one another will by default replace the previously
- defined service, but you can now create services that extend themselves and merge their settings over the previous
-* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like
- '_default' with a default JSON configuration file.
-
-## 2.8.5 - 2012-08-29
-
-* Bug: Suppressed empty arrays from URI templates
-* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching
-* Added support for HTTP responses that do not contain a reason phrase in the start-line
-* AbstractCommand commands are now invokable
-* Added a way to get the data used when signing an Oauth request before a request is sent
-
-## 2.8.4 - 2012-08-15
-
-* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin
-* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.
-* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream
-* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream
-* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())
-* Added additional response status codes
-* Removed SSL information from the default User-Agent header
-* DELETE requests can now send an entity body
-* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries
-* Added the ability of the MockPlugin to consume mocked request bodies
-* LogPlugin now exposes request and response objects in the extras array
-
-## 2.8.3 - 2012-07-30
-
-* Bug: Fixed a case where empty POST requests were sent as GET requests
-* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body
-* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new
-* Added multiple inheritance to service description commands
-* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()`
-* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything
-* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles
-
-## 2.8.2 - 2012-07-24
-
-* Bug: Query string values set to 0 are no longer dropped from the query string
-* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()`
-* Bug: `+` is now treated as an encoded space when parsing query strings
-* QueryString and Collection performance improvements
-* Allowing dot notation for class paths in filters attribute of a service descriptions
-
-## 2.8.1 - 2012-07-16
-
-* Loosening Event Dispatcher dependency
-* POST redirects can now be customized using CURLOPT_POSTREDIR
-
-## 2.8.0 - 2012-07-15
-
-* BC: Guzzle\Http\Query
- * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)
- * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()
- * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)
- * Changed the aggregation functions of QueryString to be static methods
- * Can now use fromString() with querystrings that have a leading ?
-* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters
-* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body
-* Cookies are no longer URL decoded by default
-* Bug: URI template variables set to null are no longer expanded
-
-## 2.7.2 - 2012-07-02
-
-* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser.
-* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty()
-* CachePlugin now allows for a custom request parameter function to check if a request can be cached
-* Bug fix: CachePlugin now only caches GET and HEAD requests by default
-* Bug fix: Using header glue when transferring headers over the wire
-* Allowing deeply nested arrays for composite variables in URI templates
-* Batch divisors can now return iterators or arrays
-
-## 2.7.1 - 2012-06-26
-
-* Minor patch to update version number in UA string
-* Updating build process
-
-## 2.7.0 - 2012-06-25
-
-* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes.
-* BC: Removed magic setX methods from commands
-* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method
-* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.
-* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)
-* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace
-* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin
-* Added the ability to set POST fields and files in a service description
-* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method
-* Adding a command.before_prepare event to clients
-* Added BatchClosureTransfer and BatchClosureDivisor
-* BatchTransferException now includes references to the batch divisor and transfer strategies
-* Fixed some tests so that they pass more reliably
-* Added Guzzle\Common\Log\ArrayLogAdapter
-
-## 2.6.6 - 2012-06-10
-
-* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin
-* BC: Removing Guzzle\Service\Command\CommandSet
-* Adding generic batching system (replaces the batch queue plugin and command set)
-* Updating ZF cache and log adapters and now using ZF's composer repository
-* Bug: Setting the name of each ApiParam when creating through an ApiCommand
-* Adding result_type, result_doc, deprecated, and doc_url to service descriptions
-* Bug: Changed the default cookie header casing back to 'Cookie'
-
-## 2.6.5 - 2012-06-03
-
-* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource()
-* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from
-* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data
-* BC: Renaming methods in the CookieJarInterface
-* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations
-* Making the default glue for HTTP headers ';' instead of ','
-* Adding a removeValue to Guzzle\Http\Message\Header
-* Adding getCookies() to request interface.
-* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()
-
-## 2.6.4 - 2012-05-30
-
-* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.
-* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand
-* Bug: Fixing magic method command calls on clients
-* Bug: Email constraint only validates strings
-* Bug: Aggregate POST fields when POST files are present in curl handle
-* Bug: Fixing default User-Agent header
-* Bug: Only appending or prepending parameters in commands if they are specified
-* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes
-* Allowing the use of dot notation for class namespaces when using instance_of constraint
-* Added any_match validation constraint
-* Added an AsyncPlugin
-* Passing request object to the calculateWait method of the ExponentialBackoffPlugin
-* Allowing the result of a command object to be changed
-* Parsing location and type sub values when instantiating a service description rather than over and over at runtime
-
-## 2.6.3 - 2012-05-23
-
-* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options.
-* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.
-* You can now use an array of data when creating PUT request bodies in the request factory.
-* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.
-* [Http] Adding support for Content-Type in multipart POST uploads per upload
-* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])
-* Adding more POST data operations for easier manipulation of POST data.
-* You can now set empty POST fields.
-* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.
-* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.
-* CS updates
-
-## 2.6.2 - 2012-05-19
-
-* [Http] Better handling of nested scope requests in CurlMulti. Requests are now always prepares in the send() method rather than the addRequest() method.
-
-## 2.6.1 - 2012-05-19
-
-* [BC] Removing 'path' support in service descriptions. Use 'uri'.
-* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.
-* [BC] Removing Guzzle\Common\NullObject. Use https://github.com/mtdowling/NullObject if you need it.
-* [BC] Removing Guzzle\Common\XmlElement.
-* All commands, both dynamic and concrete, have ApiCommand objects.
-* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.
-* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.
-* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible.
-
-## 2.6.0 - 2012-05-15
-
-* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder
-* [BC] Executing a Command returns the result of the command rather than the command
-* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed.
-* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args.
-* [BC] Moving ResourceIterator* to Guzzle\Service\Resource
-* [BC] Completely refactored ResourceIterators to iterate over a cloned command object
-* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate
-* [BC] Guzzle\Guzzle is now deprecated
-* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject
-* Adding Guzzle\Version class to give version information about Guzzle
-* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate()
-* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data
-* ServiceDescription and ServiceBuilder are now cacheable using similar configs
-* Changing the format of XML and JSON service builder configs. Backwards compatible.
-* Cleaned up Cookie parsing
-* Trimming the default Guzzle User-Agent header
-* Adding a setOnComplete() method to Commands that is called when a command completes
-* Keeping track of requests that were mocked in the MockPlugin
-* Fixed a caching bug in the CacheAdapterFactory
-* Inspector objects can be injected into a Command object
-* Refactoring a lot of code and tests to be case insensitive when dealing with headers
-* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL
-* Adding the ability to set global option overrides to service builder configs
-* Adding the ability to include other service builder config files from within XML and JSON files
-* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.
-
-## 2.5.0 - 2012-05-08
-
-* Major performance improvements
-* [BC] Simplifying Guzzle\Common\Collection. Please check to see if you are using features that are now deprecated.
-* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.
-* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates. Use "{}"
-* Added the ability to passed parameters to all requests created by a client
-* Added callback functionality to the ExponentialBackoffPlugin
-* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.
-* Rewinding request stream bodies when retrying requests
-* Exception is thrown when JSON response body cannot be decoded
-* Added configurable magic method calls to clients and commands. This is off by default.
-* Fixed a defect that added a hash to every parsed URL part
-* Fixed duplicate none generation for OauthPlugin.
-* Emitting an event each time a client is generated by a ServiceBuilder
-* Using an ApiParams object instead of a Collection for parameters of an ApiCommand
-* cache.* request parameters should be renamed to params.cache.*
-* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle.
-* Added the ability to disable type validation of service descriptions
-* ServiceDescriptions and ServiceBuilders are now Serializable
diff --git a/server/vendor/guzzlehttp/guzzle/LICENSE b/server/vendor/guzzlehttp/guzzle/LICENSE
deleted file mode 100644
index ea7f07c..0000000
--- a/server/vendor/guzzlehttp/guzzle/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2011-2016 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
-
-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/server/vendor/guzzlehttp/guzzle/README.md b/server/vendor/guzzlehttp/guzzle/README.md
deleted file mode 100644
index 772b18d..0000000
--- a/server/vendor/guzzlehttp/guzzle/README.md
+++ /dev/null
@@ -1,90 +0,0 @@
-Guzzle, PHP HTTP client
-=======================
-
-[![Build Status](https://travis-ci.org/guzzle/guzzle.svg?branch=master)](https://travis-ci.org/guzzle/guzzle)
-
-Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
-trivial to integrate with web services.
-
-- Simple interface for building query strings, POST requests, streaming large
- uploads, streaming large downloads, using HTTP cookies, uploading JSON data,
- etc...
-- Can send both synchronous and asynchronous requests using the same interface.
-- Uses PSR-7 interfaces for requests, responses, and streams. This allows you
- to utilize other PSR-7 compatible libraries with Guzzle.
-- Abstracts away the underlying HTTP transport, allowing you to write
- environment and transport agnostic code; i.e., no hard dependency on cURL,
- PHP streams, sockets, or non-blocking event loops.
-- Middleware system allows you to augment and compose client behavior.
-
-```php
-$client = new \GuzzleHttp\Client();
-$res = $client->request('GET', 'https://api.github.com/user', [
- 'auth' => ['user', 'pass']
-]);
-echo $res->getStatusCode();
-// 200
-echo $res->getHeaderLine('content-type');
-// 'application/json; charset=utf8'
-echo $res->getBody();
-// {"type":"User"...'
-
-// Send an asynchronous request.
-$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
-$promise = $client->sendAsync($request)->then(function ($response) {
- echo 'I completed! ' . $response->getBody();
-});
-$promise->wait();
-```
-
-## Help and docs
-
-- [Documentation](http://guzzlephp.org/)
-- [stackoverflow](http://stackoverflow.com/questions/tagged/guzzle)
-- [Gitter](https://gitter.im/guzzle/guzzle)
-
-
-## Installing Guzzle
-
-The recommended way to install Guzzle is through
-[Composer](http://getcomposer.org).
-
-```bash
-# Install Composer
-curl -sS https://getcomposer.org/installer | php
-```
-
-Next, run the Composer command to install the latest stable version of Guzzle:
-
-```bash
-php composer.phar require guzzlehttp/guzzle
-```
-
-After installing, you need to require Composer's autoloader:
-
-```php
-require 'vendor/autoload.php';
-```
-
-You can then later update Guzzle using composer:
-
- ```bash
-composer.phar update
- ```
-
-
-## Version Guidance
-
-| Version | Status | Packagist | Namespace | Repo | Docs | PSR-7 |
-|---------|-------------|---------------------|--------------|---------------------|---------------------|-------|
-| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No |
-| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | N/A | N/A | No |
-| 5.x | Maintained | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No |
-| 6.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes |
-
-[guzzle-3-repo]: https://github.com/guzzle/guzzle3
-[guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3
-[guzzle-6-repo]: https://github.com/guzzle/guzzle
-[guzzle-3-docs]: http://guzzle3.readthedocs.org/en/latest/
-[guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/
-[guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/
diff --git a/server/vendor/guzzlehttp/guzzle/UPGRADING.md b/server/vendor/guzzlehttp/guzzle/UPGRADING.md
deleted file mode 100644
index 91d1dcc..0000000
--- a/server/vendor/guzzlehttp/guzzle/UPGRADING.md
+++ /dev/null
@@ -1,1203 +0,0 @@
-Guzzle Upgrade Guide
-====================
-
-5.0 to 6.0
-----------
-
-Guzzle now uses [PSR-7](http://www.php-fig.org/psr/psr-7/) for HTTP messages.
-Due to the fact that these messages are immutable, this prompted a refactoring
-of Guzzle to use a middleware based system rather than an event system. Any
-HTTP message interaction (e.g., `GuzzleHttp\Message\Request`) need to be
-updated to work with the new immutable PSR-7 request and response objects. Any
-event listeners or subscribers need to be updated to become middleware
-functions that wrap handlers (or are injected into a
-`GuzzleHttp\HandlerStack`).
-
-- Removed `GuzzleHttp\BatchResults`
-- Removed `GuzzleHttp\Collection`
-- Removed `GuzzleHttp\HasDataTrait`
-- Removed `GuzzleHttp\ToArrayInterface`
-- The `guzzlehttp/streams` dependency has been removed. Stream functionality
- is now present in the `GuzzleHttp\Psr7` namespace provided by the
- `guzzlehttp/psr7` package.
-- Guzzle no longer uses ReactPHP promises and now uses the
- `guzzlehttp/promises` library. We use a custom promise library for three
- significant reasons:
- 1. React promises (at the time of writing this) are recursive. Promise
- chaining and promise resolution will eventually blow the stack. Guzzle
- promises are not recursive as they use a sort of trampolining technique.
- Note: there has been movement in the React project to modify promises to
- no longer utilize recursion.
- 2. Guzzle needs to have the ability to synchronously block on a promise to
- wait for a result. Guzzle promises allows this functionality (and does
- not require the use of recursion).
- 3. Because we need to be able to wait on a result, doing so using React
- promises requires wrapping react promises with RingPHP futures. This
- overhead is no longer needed, reducing stack sizes, reducing complexity,
- and improving performance.
-- `GuzzleHttp\Mimetypes` has been moved to a function in
- `GuzzleHttp\Psr7\mimetype_from_extension` and
- `GuzzleHttp\Psr7\mimetype_from_filename`.
-- `GuzzleHttp\Query` and `GuzzleHttp\QueryParser` have been removed. Query
- strings must now be passed into request objects as strings, or provided to
- the `query` request option when creating requests with clients. The `query`
- option uses PHP's `http_build_query` to convert an array to a string. If you
- need a different serialization technique, you will need to pass the query
- string in as a string. There are a couple helper functions that will make
- working with query strings easier: `GuzzleHttp\Psr7\parse_query` and
- `GuzzleHttp\Psr7\build_query`.
-- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware
- system based on PSR-7, using RingPHP and it's middleware system as well adds
- more complexity than the benefits it provides. All HTTP handlers that were
- present in RingPHP have been modified to work directly with PSR-7 messages
- and placed in the `GuzzleHttp\Handler` namespace. This significantly reduces
- complexity in Guzzle, removes a dependency, and improves performance. RingPHP
- will be maintained for Guzzle 5 support, but will no longer be a part of
- Guzzle 6.
-- As Guzzle now uses a middleware based systems the event system and RingPHP
- integration has been removed. Note: while the event system has been removed,
- it is possible to add your own type of event system that is powered by the
- middleware system.
- - Removed the `Event` namespace.
- - Removed the `Subscriber` namespace.
- - Removed `Transaction` class
- - Removed `RequestFsm`
- - Removed `RingBridge`
- - `GuzzleHttp\Subscriber\Cookie` is now provided by
- `GuzzleHttp\Middleware::cookies`
- - `GuzzleHttp\Subscriber\HttpError` is now provided by
- `GuzzleHttp\Middleware::httpError`
- - `GuzzleHttp\Subscriber\History` is now provided by
- `GuzzleHttp\Middleware::history`
- - `GuzzleHttp\Subscriber\Mock` is now provided by
- `GuzzleHttp\Handler\MockHandler`
- - `GuzzleHttp\Subscriber\Prepare` is now provided by
- `GuzzleHttp\PrepareBodyMiddleware`
- - `GuzzleHttp\Subscriber\Redirect` is now provided by
- `GuzzleHttp\RedirectMiddleware`
-- Guzzle now uses `Psr\Http\Message\UriInterface` (implements in
- `GuzzleHttp\Psr7\Uri`) for URI support. `GuzzleHttp\Url` is now gone.
-- Static functions in `GuzzleHttp\Utils` have been moved to namespaced
- functions under the `GuzzleHttp` namespace. This requires either a Composer
- based autoloader or you to include functions.php.
-- `GuzzleHttp\ClientInterface::getDefaultOption` has been renamed to
- `GuzzleHttp\ClientInterface::getConfig`.
-- `GuzzleHttp\ClientInterface::setDefaultOption` has been removed.
-- The `json` and `xml` methods of response objects has been removed. With the
- migration to strictly adhering to PSR-7 as the interface for Guzzle messages,
- adding methods to message interfaces would actually require Guzzle messages
- to extend from PSR-7 messages rather then work with them directly.
-
-## Migrating to middleware
-
-The change to PSR-7 unfortunately required significant refactoring to Guzzle
-due to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event
-system from plugins. The event system relied on mutability of HTTP messages and
-side effects in order to work. With immutable messages, you have to change your
-workflow to become more about either returning a value (e.g., functional
-middlewares) or setting a value on an object. Guzzle v6 has chosen the
-functional middleware approach.
-
-Instead of using the event system to listen for things like the `before` event,
-you now create a stack based middleware function that intercepts a request on
-the way in and the promise of the response on the way out. This is a much
-simpler and more predictable approach than the event system and works nicely
-with PSR-7 middleware. Due to the use of promises, the middleware system is
-also asynchronous.
-
-v5:
-
-```php
-use GuzzleHttp\Event\BeforeEvent;
-$client = new GuzzleHttp\Client();
-// Get the emitter and listen to the before event.
-$client->getEmitter()->on('before', function (BeforeEvent $e) {
- // Guzzle v5 events relied on mutation
- $e->getRequest()->setHeader('X-Foo', 'Bar');
-});
-```
-
-v6:
-
-In v6, you can modify the request before it is sent using the `mapRequest`
-middleware. The idiomatic way in v6 to modify the request/response lifecycle is
-to setup a handler middleware stack up front and inject the handler into a
-client.
-
-```php
-use GuzzleHttp\Middleware;
-// Create a handler stack that has all of the default middlewares attached
-$handler = GuzzleHttp\HandlerStack::create();
-// Push the handler onto the handler stack
-$handler->push(Middleware::mapRequest(function (RequestInterface $request) {
- // Notice that we have to return a request object
- return $request->withHeader('X-Foo', 'Bar');
-}));
-// Inject the handler into the client
-$client = new GuzzleHttp\Client(['handler' => $handler]);
-```
-
-## POST Requests
-
-This version added the [`form_params`](http://guzzle.readthedocs.org/en/latest/request-options.html#form_params)
-and `multipart` request options. `form_params` is an associative array of
-strings or array of strings and is used to serialize an
-`application/x-www-form-urlencoded` POST request. The
-[`multipart`](http://guzzle.readthedocs.org/en/latest/request-options.html#multipart)
-option is now used to send a multipart/form-data POST request.
-
-`GuzzleHttp\Post\PostFile` has been removed. Use the `multipart` option to add
-POST files to a multipart/form-data request.
-
-The `body` option no longer accepts an array to send POST requests. Please use
-`multipart` or `form_params` instead.
-
-The `base_url` option has been renamed to `base_uri`.
-
-4.x to 5.0
-----------
-
-## Rewritten Adapter Layer
-
-Guzzle now uses [RingPHP](http://ringphp.readthedocs.org/en/latest) to send
-HTTP requests. The `adapter` option in a `GuzzleHttp\Client` constructor
-is still supported, but it has now been renamed to `handler`. Instead of
-passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP
-`callable` that follows the RingPHP specification.
-
-## Removed Fluent Interfaces
-
-[Fluent interfaces were removed](http://ocramius.github.io/blog/fluent-interfaces-are-evil)
-from the following classes:
-
-- `GuzzleHttp\Collection`
-- `GuzzleHttp\Url`
-- `GuzzleHttp\Query`
-- `GuzzleHttp\Post\PostBody`
-- `GuzzleHttp\Cookie\SetCookie`
-
-## Removed functions.php
-
-Removed "functions.php", so that Guzzle is truly PSR-4 compliant. The following
-functions can be used as replacements.
-
-- `GuzzleHttp\json_decode` -> `GuzzleHttp\Utils::jsonDecode`
-- `GuzzleHttp\get_path` -> `GuzzleHttp\Utils::getPath`
-- `GuzzleHttp\Utils::setPath` -> `GuzzleHttp\set_path`
-- `GuzzleHttp\Pool::batch` -> `GuzzleHttp\batch`. This function is, however,
- deprecated in favor of using `GuzzleHttp\Pool::batch()`.
-
-The "procedural" global client has been removed with no replacement (e.g.,
-`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttp\Client`
-object as a replacement.
-
-## `throwImmediately` has been removed
-
-The concept of "throwImmediately" has been removed from exceptions and error
-events. This control mechanism was used to stop a transfer of concurrent
-requests from completing. This can now be handled by throwing the exception or
-by cancelling a pool of requests or each outstanding future request
-individually.
-
-## headers event has been removed
-
-Removed the "headers" event. This event was only useful for changing the
-body a response once the headers of the response were known. You can implement
-a similar behavior in a number of ways. One example might be to use a
-FnStream that has access to the transaction being sent. For example, when the
-first byte is written, you could check if the response headers match your
-expectations, and if so, change the actual stream body that is being
-written to.
-
-## Updates to HTTP Messages
-
-Removed the `asArray` parameter from
-`GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header
-value as an array, then use the newly added `getHeaderAsArray()` method of
-`MessageInterface`. This change makes the Guzzle interfaces compatible with
-the PSR-7 interfaces.
-
-3.x to 4.0
-----------
-
-## Overarching changes:
-
-- Now requires PHP 5.4 or greater.
-- No longer requires cURL to send requests.
-- Guzzle no longer wraps every exception it throws. Only exceptions that are
- recoverable are now wrapped by Guzzle.
-- Various namespaces have been removed or renamed.
-- No longer requiring the Symfony EventDispatcher. A custom event dispatcher
- based on the Symfony EventDispatcher is
- now utilized in `GuzzleHttp\Event\EmitterInterface` (resulting in significant
- speed and functionality improvements).
-
-Changes per Guzzle 3.x namespace are described below.
-
-## Batch
-
-The `Guzzle\Batch` namespace has been removed. This is best left to
-third-parties to implement on top of Guzzle's core HTTP library.
-
-## Cache
-
-The `Guzzle\Cache` namespace has been removed. (Todo: No suitable replacement
-has been implemented yet, but hoping to utilize a PSR cache interface).
-
-## Common
-
-- Removed all of the wrapped exceptions. It's better to use the standard PHP
- library for unrecoverable exceptions.
-- `FromConfigInterface` has been removed.
-- `Guzzle\Common\Version` has been removed. The VERSION constant can be found
- at `GuzzleHttp\ClientInterface::VERSION`.
-
-### Collection
-
-- `getAll` has been removed. Use `toArray` to convert a collection to an array.
-- `inject` has been removed.
-- `keySearch` has been removed.
-- `getPath` no longer supports wildcard expressions. Use something better like
- JMESPath for this.
-- `setPath` now supports appending to an existing array via the `[]` notation.
-
-### Events
-
-Guzzle no longer requires Symfony's EventDispatcher component. Guzzle now uses
-`GuzzleHttp\Event\Emitter`.
-
-- `Symfony\Component\EventDispatcher\EventDispatcherInterface` is replaced by
- `GuzzleHttp\Event\EmitterInterface`.
-- `Symfony\Component\EventDispatcher\EventDispatcher` is replaced by
- `GuzzleHttp\Event\Emitter`.
-- `Symfony\Component\EventDispatcher\Event` is replaced by
- `GuzzleHttp\Event\Event`, and Guzzle now has an EventInterface in
- `GuzzleHttp\Event\EventInterface`.
-- `AbstractHasDispatcher` has moved to a trait, `HasEmitterTrait`, and
- `HasDispatcherInterface` has moved to `HasEmitterInterface`. Retrieving the
- event emitter of a request, client, etc. now uses the `getEmitter` method
- rather than the `getDispatcher` method.
-
-#### Emitter
-
-- Use the `once()` method to add a listener that automatically removes itself
- the first time it is invoked.
-- Use the `listeners()` method to retrieve a list of event listeners rather than
- the `getListeners()` method.
-- Use `emit()` instead of `dispatch()` to emit an event from an emitter.
-- Use `attach()` instead of `addSubscriber()` and `detach()` instead of
- `removeSubscriber()`.
-
-```php
-$mock = new Mock();
-// 3.x
-$request->getEventDispatcher()->addSubscriber($mock);
-$request->getEventDispatcher()->removeSubscriber($mock);
-// 4.x
-$request->getEmitter()->attach($mock);
-$request->getEmitter()->detach($mock);
-```
-
-Use the `on()` method to add a listener rather than the `addListener()` method.
-
-```php
-// 3.x
-$request->getEventDispatcher()->addListener('foo', function (Event $event) { /* ... */ } );
-// 4.x
-$request->getEmitter()->on('foo', function (Event $event, $name) { /* ... */ } );
-```
-
-## Http
-
-### General changes
-
-- The cacert.pem certificate has been moved to `src/cacert.pem`.
-- Added the concept of adapters that are used to transfer requests over the
- wire.
-- Simplified the event system.
-- Sending requests in parallel is still possible, but batching is no longer a
- concept of the HTTP layer. Instead, you must use the `complete` and `error`
- events to asynchronously manage parallel request transfers.
-- `Guzzle\Http\Url` has moved to `GuzzleHttp\Url`.
-- `Guzzle\Http\QueryString` has moved to `GuzzleHttp\Query`.
-- QueryAggregators have been rewritten so that they are simply callable
- functions.
-- `GuzzleHttp\StaticClient` has been removed. Use the functions provided in
- `functions.php` for an easy to use static client instance.
-- Exceptions in `GuzzleHttp\Exception` have been updated to all extend from
- `GuzzleHttp\Exception\TransferException`.
-
-### Client
-
-Calling methods like `get()`, `post()`, `head()`, etc. no longer create and
-return a request, but rather creates a request, sends the request, and returns
-the response.
-
-```php
-// 3.0
-$request = $client->get('/');
-$response = $request->send();
-
-// 4.0
-$response = $client->get('/');
-
-// or, to mirror the previous behavior
-$request = $client->createRequest('GET', '/');
-$response = $client->send($request);
-```
-
-`GuzzleHttp\ClientInterface` has changed.
-
-- The `send` method no longer accepts more than one request. Use `sendAll` to
- send multiple requests in parallel.
-- `setUserAgent()` has been removed. Use a default request option instead. You
- could, for example, do something like:
- `$client->setConfig('defaults/headers/User-Agent', 'Foo/Bar ' . $client::getDefaultUserAgent())`.
-- `setSslVerification()` has been removed. Use default request options instead,
- like `$client->setConfig('defaults/verify', true)`.
-
-`GuzzleHttp\Client` has changed.
-
-- The constructor now accepts only an associative array. You can include a
- `base_url` string or array to use a URI template as the base URL of a client.
- You can also specify a `defaults` key that is an associative array of default
- request options. You can pass an `adapter` to use a custom adapter,
- `batch_adapter` to use a custom adapter for sending requests in parallel, or
- a `message_factory` to change the factory used to create HTTP requests and
- responses.
-- The client no longer emits a `client.create_request` event.
-- Creating requests with a client no longer automatically utilize a URI
- template. You must pass an array into a creational method (e.g.,
- `createRequest`, `get`, `put`, etc.) in order to expand a URI template.
-
-### Messages
-
-Messages no longer have references to their counterparts (i.e., a request no
-longer has a reference to it's response, and a response no loger has a
-reference to its request). This association is now managed through a
-`GuzzleHttp\Adapter\TransactionInterface` object. You can get references to
-these transaction objects using request events that are emitted over the
-lifecycle of a request.
-
-#### Requests with a body
-
-- `GuzzleHttp\Message\EntityEnclosingRequest` and
- `GuzzleHttp\Message\EntityEnclosingRequestInterface` have been removed. The
- separation between requests that contain a body and requests that do not
- contain a body has been removed, and now `GuzzleHttp\Message\RequestInterface`
- handles both use cases.
-- Any method that previously accepts a `GuzzleHttp\Response` object now accept a
- `GuzzleHttp\Message\ResponseInterface`.
-- `GuzzleHttp\Message\RequestFactoryInterface` has been renamed to
- `GuzzleHttp\Message\MessageFactoryInterface`. This interface is used to create
- both requests and responses and is implemented in
- `GuzzleHttp\Message\MessageFactory`.
-- POST field and file methods have been removed from the request object. You
- must now use the methods made available to `GuzzleHttp\Post\PostBodyInterface`
- to control the format of a POST body. Requests that are created using a
- standard `GuzzleHttp\Message\MessageFactoryInterface` will automatically use
- a `GuzzleHttp\Post\PostBody` body if the body was passed as an array or if
- the method is POST and no body is provided.
-
-```php
-$request = $client->createRequest('POST', '/');
-$request->getBody()->setField('foo', 'bar');
-$request->getBody()->addFile(new PostFile('file_key', fopen('/path/to/content', 'r')));
-```
-
-#### Headers
-
-- `GuzzleHttp\Message\Header` has been removed. Header values are now simply
- represented by an array of values or as a string. Header values are returned
- as a string by default when retrieving a header value from a message. You can
- pass an optional argument of `true` to retrieve a header value as an array
- of strings instead of a single concatenated string.
-- `GuzzleHttp\PostFile` and `GuzzleHttp\PostFileInterface` have been moved to
- `GuzzleHttp\Post`. This interface has been simplified and now allows the
- addition of arbitrary headers.
-- Custom headers like `GuzzleHttp\Message\Header\Link` have been removed. Most
- of the custom headers are now handled separately in specific
- subscribers/plugins, and `GuzzleHttp\Message\HeaderValues::parseParams()` has
- been updated to properly handle headers that contain parameters (like the
- `Link` header).
-
-#### Responses
-
-- `GuzzleHttp\Message\Response::getInfo()` and
- `GuzzleHttp\Message\Response::setInfo()` have been removed. Use the event
- system to retrieve this type of information.
-- `GuzzleHttp\Message\Response::getRawHeaders()` has been removed.
-- `GuzzleHttp\Message\Response::getMessage()` has been removed.
-- `GuzzleHttp\Message\Response::calculateAge()` and other cache specific
- methods have moved to the CacheSubscriber.
-- Header specific helper functions like `getContentMd5()` have been removed.
- Just use `getHeader('Content-MD5')` instead.
-- `GuzzleHttp\Message\Response::setRequest()` and
- `GuzzleHttp\Message\Response::getRequest()` have been removed. Use the event
- system to work with request and response objects as a transaction.
-- `GuzzleHttp\Message\Response::getRedirectCount()` has been removed. Use the
- Redirect subscriber instead.
-- `GuzzleHttp\Message\Response::isSuccessful()` and other related methods have
- been removed. Use `getStatusCode()` instead.
-
-#### Streaming responses
-
-Streaming requests can now be created by a client directly, returning a
-`GuzzleHttp\Message\ResponseInterface` object that contains a body stream
-referencing an open PHP HTTP stream.
-
-```php
-// 3.0
-use Guzzle\Stream\PhpStreamRequestFactory;
-$request = $client->get('/');
-$factory = new PhpStreamRequestFactory();
-$stream = $factory->fromRequest($request);
-$data = $stream->read(1024);
-
-// 4.0
-$response = $client->get('/', ['stream' => true]);
-// Read some data off of the stream in the response body
-$data = $response->getBody()->read(1024);
-```
-
-#### Redirects
-
-The `configureRedirects()` method has been removed in favor of a
-`allow_redirects` request option.
-
-```php
-// Standard redirects with a default of a max of 5 redirects
-$request = $client->createRequest('GET', '/', ['allow_redirects' => true]);
-
-// Strict redirects with a custom number of redirects
-$request = $client->createRequest('GET', '/', [
- 'allow_redirects' => ['max' => 5, 'strict' => true]
-]);
-```
-
-#### EntityBody
-
-EntityBody interfaces and classes have been removed or moved to
-`GuzzleHttp\Stream`. All classes and interfaces that once required
-`GuzzleHttp\EntityBodyInterface` now require
-`GuzzleHttp\Stream\StreamInterface`. Creating a new body for a request no
-longer uses `GuzzleHttp\EntityBody::factory` but now uses
-`GuzzleHttp\Stream\Stream::factory` or even better:
-`GuzzleHttp\Stream\create()`.
-
-- `Guzzle\Http\EntityBodyInterface` is now `GuzzleHttp\Stream\StreamInterface`
-- `Guzzle\Http\EntityBody` is now `GuzzleHttp\Stream\Stream`
-- `Guzzle\Http\CachingEntityBody` is now `GuzzleHttp\Stream\CachingStream`
-- `Guzzle\Http\ReadLimitEntityBody` is now `GuzzleHttp\Stream\LimitStream`
-- `Guzzle\Http\IoEmittyinEntityBody` has been removed.
-
-#### Request lifecycle events
-
-Requests previously submitted a large number of requests. The number of events
-emitted over the lifecycle of a request has been significantly reduced to make
-it easier to understand how to extend the behavior of a request. All events
-emitted during the lifecycle of a request now emit a custom
-`GuzzleHttp\Event\EventInterface` object that contains context providing
-methods and a way in which to modify the transaction at that specific point in
-time (e.g., intercept the request and set a response on the transaction).
-
-- `request.before_send` has been renamed to `before` and now emits a
- `GuzzleHttp\Event\BeforeEvent`
-- `request.complete` has been renamed to `complete` and now emits a
- `GuzzleHttp\Event\CompleteEvent`.
-- `request.sent` has been removed. Use `complete`.
-- `request.success` has been removed. Use `complete`.
-- `error` is now an event that emits a `GuzzleHttp\Event\ErrorEvent`.
-- `request.exception` has been removed. Use `error`.
-- `request.receive.status_line` has been removed.
-- `curl.callback.progress` has been removed. Use a custom `StreamInterface` to
- maintain a status update.
-- `curl.callback.write` has been removed. Use a custom `StreamInterface` to
- intercept writes.
-- `curl.callback.read` has been removed. Use a custom `StreamInterface` to
- intercept reads.
-
-`headers` is a new event that is emitted after the response headers of a
-request have been received before the body of the response is downloaded. This
-event emits a `GuzzleHttp\Event\HeadersEvent`.
-
-You can intercept a request and inject a response using the `intercept()` event
-of a `GuzzleHttp\Event\BeforeEvent`, `GuzzleHttp\Event\CompleteEvent`, and
-`GuzzleHttp\Event\ErrorEvent` event.
-
-See: http://docs.guzzlephp.org/en/latest/events.html
-
-## Inflection
-
-The `Guzzle\Inflection` namespace has been removed. This is not a core concern
-of Guzzle.
-
-## Iterator
-
-The `Guzzle\Iterator` namespace has been removed.
-
-- `Guzzle\Iterator\AppendIterator`, `Guzzle\Iterator\ChunkedIterator`, and
- `Guzzle\Iterator\MethodProxyIterator` are nice, but not a core requirement of
- Guzzle itself.
-- `Guzzle\Iterator\FilterIterator` is no longer needed because an equivalent
- class is shipped with PHP 5.4.
-- `Guzzle\Iterator\MapIterator` is not really needed when using PHP 5.5 because
- it's easier to just wrap an iterator in a generator that maps values.
-
-For a replacement of these iterators, see https://github.com/nikic/iter
-
-## Log
-
-The LogPlugin has moved to https://github.com/guzzle/log-subscriber. The
-`Guzzle\Log` namespace has been removed. Guzzle now relies on
-`Psr\Log\LoggerInterface` for all logging. The MessageFormatter class has been
-moved to `GuzzleHttp\Subscriber\Log\Formatter`.
-
-## Parser
-
-The `Guzzle\Parser` namespace has been removed. This was previously used to
-make it possible to plug in custom parsers for cookies, messages, URI
-templates, and URLs; however, this level of complexity is not needed in Guzzle
-so it has been removed.
-
-- Cookie: Cookie parsing logic has been moved to
- `GuzzleHttp\Cookie\SetCookie::fromString`.
-- Message: Message parsing logic for both requests and responses has been moved
- to `GuzzleHttp\Message\MessageFactory::fromMessage`. Message parsing is only
- used in debugging or deserializing messages, so it doesn't make sense for
- Guzzle as a library to add this level of complexity to parsing messages.
-- UriTemplate: URI template parsing has been moved to
- `GuzzleHttp\UriTemplate`. The Guzzle library will automatically use the PECL
- URI template library if it is installed.
-- Url: URL parsing is now performed in `GuzzleHttp\Url::fromString` (previously
- it was `Guzzle\Http\Url::factory()`). If custom URL parsing is necessary,
- then developers are free to subclass `GuzzleHttp\Url`.
-
-## Plugin
-
-The `Guzzle\Plugin` namespace has been renamed to `GuzzleHttp\Subscriber`.
-Several plugins are shipping with the core Guzzle library under this namespace.
-
-- `GuzzleHttp\Subscriber\Cookie`: Replaces the old CookiePlugin. Cookie jar
- code has moved to `GuzzleHttp\Cookie`.
-- `GuzzleHttp\Subscriber\History`: Replaces the old HistoryPlugin.
-- `GuzzleHttp\Subscriber\HttpError`: Throws errors when a bad HTTP response is
- received.
-- `GuzzleHttp\Subscriber\Mock`: Replaces the old MockPlugin.
-- `GuzzleHttp\Subscriber\Prepare`: Prepares the body of a request just before
- sending. This subscriber is attached to all requests by default.
-- `GuzzleHttp\Subscriber\Redirect`: Replaces the RedirectPlugin.
-
-The following plugins have been removed (third-parties are free to re-implement
-these if needed):
-
-- `GuzzleHttp\Plugin\Async` has been removed.
-- `GuzzleHttp\Plugin\CurlAuth` has been removed.
-- `GuzzleHttp\Plugin\ErrorResponse\ErrorResponsePlugin` has been removed. This
- functionality should instead be implemented with event listeners that occur
- after normal response parsing occurs in the guzzle/command package.
-
-The following plugins are not part of the core Guzzle package, but are provided
-in separate repositories:
-
-- `Guzzle\Http\Plugin\BackoffPlugin` has been rewritten to be much simpler
- to build custom retry policies using simple functions rather than various
- chained classes. See: https://github.com/guzzle/retry-subscriber
-- `Guzzle\Http\Plugin\Cache\CachePlugin` has moved to
- https://github.com/guzzle/cache-subscriber
-- `Guzzle\Http\Plugin\Log\LogPlugin` has moved to
- https://github.com/guzzle/log-subscriber
-- `Guzzle\Http\Plugin\Md5\Md5Plugin` has moved to
- https://github.com/guzzle/message-integrity-subscriber
-- `Guzzle\Http\Plugin\Mock\MockPlugin` has moved to
- `GuzzleHttp\Subscriber\MockSubscriber`.
-- `Guzzle\Http\Plugin\Oauth\OauthPlugin` has moved to
- https://github.com/guzzle/oauth-subscriber
-
-## Service
-
-The service description layer of Guzzle has moved into two separate packages:
-
-- http://github.com/guzzle/command Provides a high level abstraction over web
- services by representing web service operations using commands.
-- http://github.com/guzzle/guzzle-services Provides an implementation of
- guzzle/command that provides request serialization and response parsing using
- Guzzle service descriptions.
-
-## Stream
-
-Stream have moved to a separate package available at
-https://github.com/guzzle/streams.
-
-`Guzzle\Stream\StreamInterface` has been given a large update to cleanly take
-on the responsibilities of `Guzzle\Http\EntityBody` and
-`Guzzle\Http\EntityBodyInterface` now that they have been removed. The number
-of methods implemented by the `StreamInterface` has been drastically reduced to
-allow developers to more easily extend and decorate stream behavior.
-
-## Removed methods from StreamInterface
-
-- `getStream` and `setStream` have been removed to better encapsulate streams.
-- `getMetadata` and `setMetadata` have been removed in favor of
- `GuzzleHttp\Stream\MetadataStreamInterface`.
-- `getWrapper`, `getWrapperData`, `getStreamType`, and `getUri` have all been
- removed. This data is accessible when
- using streams that implement `GuzzleHttp\Stream\MetadataStreamInterface`.
-- `rewind` has been removed. Use `seek(0)` for a similar behavior.
-
-## Renamed methods
-
-- `detachStream` has been renamed to `detach`.
-- `feof` has been renamed to `eof`.
-- `ftell` has been renamed to `tell`.
-- `readLine` has moved from an instance method to a static class method of
- `GuzzleHttp\Stream\Stream`.
-
-## Metadata streams
-
-`GuzzleHttp\Stream\MetadataStreamInterface` has been added to denote streams
-that contain additional metadata accessible via `getMetadata()`.
-`GuzzleHttp\Stream\StreamInterface::getMetadata` and
-`GuzzleHttp\Stream\StreamInterface::setMetadata` have been removed.
-
-## StreamRequestFactory
-
-The entire concept of the StreamRequestFactory has been removed. The way this
-was used in Guzzle 3 broke the actual interface of sending streaming requests
-(instead of getting back a Response, you got a StreamInterface). Streaming
-PHP requests are now implemented through the `GuzzleHttp\Adapter\StreamAdapter`.
-
-3.6 to 3.7
-----------
-
-### Deprecations
-
-- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.:
-
-```php
-\Guzzle\Common\Version::$emitWarnings = true;
-```
-
-The following APIs and options have been marked as deprecated:
-
-- Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead.
-- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
-- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead.
-- Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.
-- Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.
-- Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated
-- Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client.
-- Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.
-- Marked `Guzzle\Common\Collection::inject()` as deprecated.
-- Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use
- `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or
- `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));`
-
-3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational
-request methods. When paired with a client's configuration settings, these options allow you to specify default settings
-for various aspects of a request. Because these options make other previous configuration options redundant, several
-configuration options and methods of a client and AbstractCommand have been deprecated.
-
-- Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`.
-- Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`.
-- Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')`
-- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0
-
- $command = $client->getCommand('foo', array(
- 'command.headers' => array('Test' => '123'),
- 'command.response_body' => '/path/to/file'
- ));
-
- // Should be changed to:
-
- $command = $client->getCommand('foo', array(
- 'command.request_options' => array(
- 'headers' => array('Test' => '123'),
- 'save_as' => '/path/to/file'
- )
- ));
-
-### Interface changes
-
-Additions and changes (you will need to update any implementations or subclasses you may have created):
-
-- Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`:
- createRequest, head, delete, put, patch, post, options, prepareRequest
-- Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()`
-- Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface`
-- Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to
- `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a
- resource, string, or EntityBody into the $options parameter to specify the download location of the response.
-- Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a
- default `array()`
-- Added `Guzzle\Stream\StreamInterface::isRepeatable`
-- Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods.
-
-The following methods were removed from interfaces. All of these methods are still available in the concrete classes
-that implement them, but you should update your code to use alternative methods:
-
-- Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use
- `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or
- `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or
- `$client->setDefaultOption('headers/{header_name}', 'value')`. or
- `$client->setDefaultOption('headers', array('header_name' => 'value'))`.
-- Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`.
-- Removed `Guzzle\Http\ClientInterface::expandTemplate()`. This is an implementation detail.
-- Removed `Guzzle\Http\ClientInterface::setRequestFactory()`. This is an implementation detail.
-- Removed `Guzzle\Http\ClientInterface::getCurlMulti()`. This is a very specific implementation detail.
-- Removed `Guzzle\Http\Message\RequestInterface::canCache`. Use the CachePlugin.
-- Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`. Use the HistoryPlugin.
-- Removed `Guzzle\Http\Message\RequestInterface::isRedirect`. Use the HistoryPlugin.
-
-### Cache plugin breaking changes
-
-- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a
- CacheStorageInterface. These two objects and interface will be removed in a future version.
-- Always setting X-cache headers on cached responses
-- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin
-- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface
- $request, Response $response);`
-- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`
-- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`
-- Added `CacheStorageInterface::purge($url)`
-- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin
- $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,
- CanCacheStrategyInterface $canCache = null)`
-- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`
-
-3.5 to 3.6
-----------
-
-* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.
-* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution
-* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().
- For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader().
- Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request.
-* Specific header implementations can be created for complex headers. When a message creates a header, it uses a
- HeaderFactory which can map specific headers to specific header classes. There is now a Link header and
- CacheControl header implementation.
-* Moved getLinks() from Response to just be used on a Link header object.
-
-If you previously relied on Guzzle\Http\Message\Header::raw(), then you will need to update your code to use the
-HeaderInterface (e.g. toArray(), getAll(), etc.).
-
-### Interface changes
-
-* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate
-* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti()
-* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in
- Guzzle\Http\Curl\RequestMediator
-* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.
-* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface
-* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders()
-
-### Removed deprecated functions
-
-* Removed Guzzle\Parser\ParserRegister::get(). Use getParser()
-* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser().
-
-### Deprecations
-
-* The ability to case-insensitively search for header values
-* Guzzle\Http\Message\Header::hasExactHeader
-* Guzzle\Http\Message\Header::raw. Use getAll()
-* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object
- instead.
-
-### Other changes
-
-* All response header helper functions return a string rather than mixing Header objects and strings inconsistently
-* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle
- directly via interfaces
-* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist
- but are a no-op until removed.
-* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a
- `Guzzle\Service\Command\ArrayCommandInterface`.
-* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response
- on a request while the request is still being transferred
-* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess
-
-3.3 to 3.4
-----------
-
-Base URLs of a client now follow the rules of http://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs.
-
-3.2 to 3.3
-----------
-
-### Response::getEtag() quote stripping removed
-
-`Guzzle\Http\Message\Response::getEtag()` no longer strips quotes around the ETag response header
-
-### Removed `Guzzle\Http\Utils`
-
-The `Guzzle\Http\Utils` class was removed. This class was only used for testing.
-
-### Stream wrapper and type
-
-`Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getStreamType()` are no longer converted to lowercase.
-
-### curl.emit_io became emit_io
-
-Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the
-'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'
-
-3.1 to 3.2
-----------
-
-### CurlMulti is no longer reused globally
-
-Before 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added
-to a single client can pollute requests dispatched from other clients.
-
-If you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the
-ServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is
-created.
-
-```php
-$multi = new Guzzle\Http\Curl\CurlMulti();
-$builder = Guzzle\Service\Builder\ServiceBuilder::factory('/path/to/config.json');
-$builder->addListener('service_builder.create_client', function ($event) use ($multi) {
- $event['client']->setCurlMulti($multi);
-}
-});
-```
-
-### No default path
-
-URLs no longer have a default path value of '/' if no path was specified.
-
-Before:
-
-```php
-$request = $client->get('http://www.foo.com');
-echo $request->getUrl();
-// >> http://www.foo.com/
-```
-
-After:
-
-```php
-$request = $client->get('http://www.foo.com');
-echo $request->getUrl();
-// >> http://www.foo.com
-```
-
-### Less verbose BadResponseException
-
-The exception message for `Guzzle\Http\Exception\BadResponseException` no longer contains the full HTTP request and
-response information. You can, however, get access to the request and response object by calling `getRequest()` or
-`getResponse()` on the exception object.
-
-### Query parameter aggregation
-
-Multi-valued query parameters are no longer aggregated using a callback function. `Guzzle\Http\Query` now has a
-setAggregator() method that accepts a `Guzzle\Http\QueryAggregator\QueryAggregatorInterface` object. This object is
-responsible for handling the aggregation of multi-valued query string variables into a flattened hash.
-
-2.8 to 3.x
-----------
-
-### Guzzle\Service\Inspector
-
-Change `\Guzzle\Service\Inspector::fromConfig` to `\Guzzle\Common\Collection::fromConfig`
-
-**Before**
-
-```php
-use Guzzle\Service\Inspector;
-
-class YourClient extends \Guzzle\Service\Client
-{
- public static function factory($config = array())
- {
- $default = array();
- $required = array('base_url', 'username', 'api_key');
- $config = Inspector::fromConfig($config, $default, $required);
-
- $client = new self(
- $config->get('base_url'),
- $config->get('username'),
- $config->get('api_key')
- );
- $client->setConfig($config);
-
- $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));
-
- return $client;
- }
-```
-
-**After**
-
-```php
-use Guzzle\Common\Collection;
-
-class YourClient extends \Guzzle\Service\Client
-{
- public static function factory($config = array())
- {
- $default = array();
- $required = array('base_url', 'username', 'api_key');
- $config = Collection::fromConfig($config, $default, $required);
-
- $client = new self(
- $config->get('base_url'),
- $config->get('username'),
- $config->get('api_key')
- );
- $client->setConfig($config);
-
- $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));
-
- return $client;
- }
-```
-
-### Convert XML Service Descriptions to JSON
-
-**Before**
-
-```xml
-<?xml version="1.0" encoding="UTF-8"?>
-<client>
- <commands>
- <!-- Groups -->
- <command name="list_groups" method="GET" uri="groups.json">
- <doc>Get a list of groups</doc>
- </command>
- <command name="search_groups" method="GET" uri='search.json?query="{{query}} type:group"'>
- <doc>Uses a search query to get a list of groups</doc>
- <param name="query" type="string" required="true" />
- </command>
- <command name="create_group" method="POST" uri="groups.json">
- <doc>Create a group</doc>
- <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
- <param name="Content-Type" location="header" static="application/json"/>
- </command>
- <command name="delete_group" method="DELETE" uri="groups/{{id}}.json">
- <doc>Delete a group by ID</doc>
- <param name="id" type="integer" required="true"/>
- </command>
- <command name="get_group" method="GET" uri="groups/{{id}}.json">
- <param name="id" type="integer" required="true"/>
- </command>
- <command name="update_group" method="PUT" uri="groups/{{id}}.json">
- <doc>Update a group</doc>
- <param name="id" type="integer" required="true"/>
- <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/>
- <param name="Content-Type" location="header" static="application/json"/>
- </command>
- </commands>
-</client>
-```
-
-**After**
-
-```json
-{
- "name": "Zendesk REST API v2",
- "apiVersion": "2012-12-31",
- "description":"Provides access to Zendesk views, groups, tickets, ticket fields, and users",
- "operations": {
- "list_groups": {
- "httpMethod":"GET",
- "uri": "groups.json",
- "summary": "Get a list of groups"
- },
- "search_groups":{
- "httpMethod":"GET",
- "uri": "search.json?query=\"{query} type:group\"",
- "summary": "Uses a search query to get a list of groups",
- "parameters":{
- "query":{
- "location": "uri",
- "description":"Zendesk Search Query",
- "type": "string",
- "required": true
- }
- }
- },
- "create_group": {
- "httpMethod":"POST",
- "uri": "groups.json",
- "summary": "Create a group",
- "parameters":{
- "data": {
- "type": "array",
- "location": "body",
- "description":"Group JSON",
- "filters": "json_encode",
- "required": true
- },
- "Content-Type":{
- "type": "string",
- "location":"header",
- "static": "application/json"
- }
- }
- },
- "delete_group": {
- "httpMethod":"DELETE",
- "uri": "groups/{id}.json",
- "summary": "Delete a group",
- "parameters":{
- "id":{
- "location": "uri",
- "description":"Group to delete by ID",
- "type": "integer",
- "required": true
- }
- }
- },
- "get_group": {
- "httpMethod":"GET",
- "uri": "groups/{id}.json",
- "summary": "Get a ticket",
- "parameters":{
- "id":{
- "location": "uri",
- "description":"Group to get by ID",
- "type": "integer",
- "required": true
- }
- }
- },
- "update_group": {
- "httpMethod":"PUT",
- "uri": "groups/{id}.json",
- "summary": "Update a group",
- "parameters":{
- "id": {
- "location": "uri",
- "description":"Group to update by ID",
- "type": "integer",
- "required": true
- },
- "data": {
- "type": "array",
- "location": "body",
- "description":"Group JSON",
- "filters": "json_encode",
- "required": true
- },
- "Content-Type":{
- "type": "string",
- "location":"header",
- "static": "application/json"
- }
- }
- }
-}
-```
-
-### Guzzle\Service\Description\ServiceDescription
-
-Commands are now called Operations
-
-**Before**
-
-```php
-use Guzzle\Service\Description\ServiceDescription;
-
-$sd = new ServiceDescription();
-$sd->getCommands(); // @returns ApiCommandInterface[]
-$sd->hasCommand($name);
-$sd->getCommand($name); // @returns ApiCommandInterface|null
-$sd->addCommand($command); // @param ApiCommandInterface $command
-```
-
-**After**
-
-```php
-use Guzzle\Service\Description\ServiceDescription;
-
-$sd = new ServiceDescription();
-$sd->getOperations(); // @returns OperationInterface[]
-$sd->hasOperation($name);
-$sd->getOperation($name); // @returns OperationInterface|null
-$sd->addOperation($operation); // @param OperationInterface $operation
-```
-
-### Guzzle\Common\Inflection\Inflector
-
-Namespace is now `Guzzle\Inflection\Inflector`
-
-### Guzzle\Http\Plugin
-
-Namespace is now `Guzzle\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below.
-
-### Guzzle\Http\Plugin\LogPlugin and Guzzle\Common\Log
-
-Now `Guzzle\Plugin\Log\LogPlugin` and `Guzzle\Log` respectively.
-
-**Before**
-
-```php
-use Guzzle\Common\Log\ClosureLogAdapter;
-use Guzzle\Http\Plugin\LogPlugin;
-
-/** @var \Guzzle\Http\Client */
-$client;
-
-// $verbosity is an integer indicating desired message verbosity level
-$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE);
-```
-
-**After**
-
-```php
-use Guzzle\Log\ClosureLogAdapter;
-use Guzzle\Log\MessageFormatter;
-use Guzzle\Plugin\Log\LogPlugin;
-
-/** @var \Guzzle\Http\Client */
-$client;
-
-// $format is a string indicating desired message format -- @see MessageFormatter
-$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT);
-```
-
-### Guzzle\Http\Plugin\CurlAuthPlugin
-
-Now `Guzzle\Plugin\CurlAuth\CurlAuthPlugin`.
-
-### Guzzle\Http\Plugin\ExponentialBackoffPlugin
-
-Now `Guzzle\Plugin\Backoff\BackoffPlugin`, and other changes.
-
-**Before**
-
-```php
-use Guzzle\Http\Plugin\ExponentialBackoffPlugin;
-
-$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge(
- ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429)
- ));
-
-$client->addSubscriber($backoffPlugin);
-```
-
-**After**
-
-```php
-use Guzzle\Plugin\Backoff\BackoffPlugin;
-use Guzzle\Plugin\Backoff\HttpBackoffStrategy;
-
-// Use convenient factory method instead -- see implementation for ideas of what
-// you can do with chaining backoff strategies
-$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge(
- HttpBackoffStrategy::getDefaultFailureCodes(), array(429)
- ));
-$client->addSubscriber($backoffPlugin);
-```
-
-### Known Issues
-
-#### [BUG] Accept-Encoding header behavior changed unintentionally.
-
-(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e)
-
-In version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to
-properly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen.
-See issue #217 for a workaround, or use a version containing the fix.
diff --git a/server/vendor/guzzlehttp/guzzle/composer.json b/server/vendor/guzzlehttp/guzzle/composer.json
deleted file mode 100644
index 0f4f94a..0000000
--- a/server/vendor/guzzlehttp/guzzle/composer.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "name": "guzzlehttp/guzzle",
- "type": "library",
- "description": "Guzzle is a PHP HTTP client library",
- "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"],
- "homepage": "http://guzzlephp.org/",
- "license": "MIT",
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "require": {
- "php": ">=5.5",
- "guzzlehttp/psr7": "^1.4",
- "guzzlehttp/promises": "^1.0"
- },
- "require-dev": {
- "ext-curl": "*",
- "phpunit/phpunit": "^4.0",
- "psr/log": "^1.0"
- },
- "autoload": {
- "files": ["src/functions_include.php"],
- "psr-4": {
- "GuzzleHttp\\": "src/"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "GuzzleHttp\\Tests\\": "tests/"
- }
- },
- "extra": {
- "branch-alias": {
- "dev-master": "6.2-dev"
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Client.php b/server/vendor/guzzlehttp/guzzle/src/Client.php
deleted file mode 100644
index 2e4cead..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Client.php
+++ /dev/null
@@ -1,408 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Cookie\CookieJar;
-use GuzzleHttp\Promise;
-use GuzzleHttp\Psr7;
-use Psr\Http\Message\UriInterface;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * @method ResponseInterface get(string|UriInterface $uri, array $options = [])
- * @method ResponseInterface head(string|UriInterface $uri, array $options = [])
- * @method ResponseInterface put(string|UriInterface $uri, array $options = [])
- * @method ResponseInterface post(string|UriInterface $uri, array $options = [])
- * @method ResponseInterface patch(string|UriInterface $uri, array $options = [])
- * @method ResponseInterface delete(string|UriInterface $uri, array $options = [])
- * @method Promise\PromiseInterface getAsync(string|UriInterface $uri, array $options = [])
- * @method Promise\PromiseInterface headAsync(string|UriInterface $uri, array $options = [])
- * @method Promise\PromiseInterface putAsync(string|UriInterface $uri, array $options = [])
- * @method Promise\PromiseInterface postAsync(string|UriInterface $uri, array $options = [])
- * @method Promise\PromiseInterface patchAsync(string|UriInterface $uri, array $options = [])
- * @method Promise\PromiseInterface deleteAsync(string|UriInterface $uri, array $options = [])
- */
-class Client implements ClientInterface
-{
- /** @var array Default request options */
- private $config;
-
- /**
- * Clients accept an array of constructor parameters.
- *
- * Here's an example of creating a client using a base_uri and an array of
- * default request options to apply to each request:
- *
- * $client = new Client([
- * 'base_uri' => 'http://www.foo.com/1.0/',
- * 'timeout' => 0,
- * 'allow_redirects' => false,
- * 'proxy' => '192.168.16.1:10'
- * ]);
- *
- * Client configuration settings include the following options:
- *
- * - handler: (callable) Function that transfers HTTP requests over the
- * wire. The function is called with a Psr7\Http\Message\RequestInterface
- * and array of transfer options, and must return a
- * GuzzleHttp\Promise\PromiseInterface that is fulfilled with a
- * Psr7\Http\Message\ResponseInterface on success. "handler" is a
- * constructor only option that cannot be overridden in per/request
- * options. If no handler is provided, a default handler will be created
- * that enables all of the request options below by attaching all of the
- * default middleware to the handler.
- * - base_uri: (string|UriInterface) Base URI of the client that is merged
- * into relative URIs. Can be a string or instance of UriInterface.
- * - **: any request option
- *
- * @param array $config Client configuration settings.
- *
- * @see \GuzzleHttp\RequestOptions for a list of available request options.
- */
- public function __construct(array $config = [])
- {
- if (!isset($config['handler'])) {
- $config['handler'] = HandlerStack::create();
- }
-
- // Convert the base_uri to a UriInterface
- if (isset($config['base_uri'])) {
- $config['base_uri'] = Psr7\uri_for($config['base_uri']);
- }
-
- $this->configureDefaults($config);
- }
-
- public function __call($method, $args)
- {
- if (count($args) < 1) {
- throw new \InvalidArgumentException('Magic request methods require a URI and optional options array');
- }
-
- $uri = $args[0];
- $opts = isset($args[1]) ? $args[1] : [];
-
- return substr($method, -5) === 'Async'
- ? $this->requestAsync(substr($method, 0, -5), $uri, $opts)
- : $this->request($method, $uri, $opts);
- }
-
- public function sendAsync(RequestInterface $request, array $options = [])
- {
- // Merge the base URI into the request URI if needed.
- $options = $this->prepareDefaults($options);
-
- return $this->transfer(
- $request->withUri($this->buildUri($request->getUri(), $options), $request->hasHeader('Host')),
- $options
- );
- }
-
- public function send(RequestInterface $request, array $options = [])
- {
- $options[RequestOptions::SYNCHRONOUS] = true;
- return $this->sendAsync($request, $options)->wait();
- }
-
- public function requestAsync($method, $uri = '', array $options = [])
- {
- $options = $this->prepareDefaults($options);
- // Remove request modifying parameter because it can be done up-front.
- $headers = isset($options['headers']) ? $options['headers'] : [];
- $body = isset($options['body']) ? $options['body'] : null;
- $version = isset($options['version']) ? $options['version'] : '1.1';
- // Merge the URI into the base URI.
- $uri = $this->buildUri($uri, $options);
- if (is_array($body)) {
- $this->invalidBody();
- }
- $request = new Psr7\Request($method, $uri, $headers, $body, $version);
- // Remove the option so that they are not doubly-applied.
- unset($options['headers'], $options['body'], $options['version']);
-
- return $this->transfer($request, $options);
- }
-
- public function request($method, $uri = '', array $options = [])
- {
- $options[RequestOptions::SYNCHRONOUS] = true;
- return $this->requestAsync($method, $uri, $options)->wait();
- }
-
- public function getConfig($option = null)
- {
- return $option === null
- ? $this->config
- : (isset($this->config[$option]) ? $this->config[$option] : null);
- }
-
- private function buildUri($uri, array $config)
- {
- // for BC we accept null which would otherwise fail in uri_for
- $uri = Psr7\uri_for($uri === null ? '' : $uri);
-
- if (isset($config['base_uri'])) {
- $uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri);
- }
-
- return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri;
- }
-
- /**
- * Configures the default options for a client.
- *
- * @param array $config
- */
- private function configureDefaults(array $config)
- {
- $defaults = [
- 'allow_redirects' => RedirectMiddleware::$defaultSettings,
- 'http_errors' => true,
- 'decode_content' => true,
- 'verify' => true,
- 'cookies' => false
- ];
-
- // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.
-
- // We can only trust the HTTP_PROXY environment variable in a CLI
- // process due to the fact that PHP has no reliable mechanism to
- // get environment variables that start with "HTTP_".
- if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) {
- $defaults['proxy']['http'] = getenv('HTTP_PROXY');
- }
-
- if ($proxy = getenv('HTTPS_PROXY')) {
- $defaults['proxy']['https'] = $proxy;
- }
-
- if ($noProxy = getenv('NO_PROXY')) {
- $cleanedNoProxy = str_replace(' ', '', $noProxy);
- $defaults['proxy']['no'] = explode(',', $cleanedNoProxy);
- }
-
- $this->config = $config + $defaults;
-
- if (!empty($config['cookies']) && $config['cookies'] === true) {
- $this->config['cookies'] = new CookieJar();
- }
-
- // Add the default user-agent header.
- if (!isset($this->config['headers'])) {
- $this->config['headers'] = ['User-Agent' => default_user_agent()];
- } else {
- // Add the User-Agent header if one was not already set.
- foreach (array_keys($this->config['headers']) as $name) {
- if (strtolower($name) === 'user-agent') {
- return;
- }
- }
- $this->config['headers']['User-Agent'] = default_user_agent();
- }
- }
-
- /**
- * Merges default options into the array.
- *
- * @param array $options Options to modify by reference
- *
- * @return array
- */
- private function prepareDefaults($options)
- {
- $defaults = $this->config;
-
- if (!empty($defaults['headers'])) {
- // Default headers are only added if they are not present.
- $defaults['_conditional'] = $defaults['headers'];
- unset($defaults['headers']);
- }
-
- // Special handling for headers is required as they are added as
- // conditional headers and as headers passed to a request ctor.
- if (array_key_exists('headers', $options)) {
- // Allows default headers to be unset.
- if ($options['headers'] === null) {
- $defaults['_conditional'] = null;
- unset($options['headers']);
- } elseif (!is_array($options['headers'])) {
- throw new \InvalidArgumentException('headers must be an array');
- }
- }
-
- // Shallow merge defaults underneath options.
- $result = $options + $defaults;
-
- // Remove null values.
- foreach ($result as $k => $v) {
- if ($v === null) {
- unset($result[$k]);
- }
- }
-
- return $result;
- }
-
- /**
- * Transfers the given request and applies request options.
- *
- * The URI of the request is not modified and the request options are used
- * as-is without merging in default options.
- *
- * @param RequestInterface $request
- * @param array $options
- *
- * @return Promise\PromiseInterface
- */
- private function transfer(RequestInterface $request, array $options)
- {
- // save_to -> sink
- if (isset($options['save_to'])) {
- $options['sink'] = $options['save_to'];
- unset($options['save_to']);
- }
-
- // exceptions -> http_errors
- if (isset($options['exceptions'])) {
- $options['http_errors'] = $options['exceptions'];
- unset($options['exceptions']);
- }
-
- $request = $this->applyOptions($request, $options);
- $handler = $options['handler'];
-
- try {
- return Promise\promise_for($handler($request, $options));
- } catch (\Exception $e) {
- return Promise\rejection_for($e);
- }
- }
-
- /**
- * Applies the array of request options to a request.
- *
- * @param RequestInterface $request
- * @param array $options
- *
- * @return RequestInterface
- */
- private function applyOptions(RequestInterface $request, array &$options)
- {
- $modify = [];
-
- if (isset($options['form_params'])) {
- if (isset($options['multipart'])) {
- throw new \InvalidArgumentException('You cannot use '
- . 'form_params and multipart at the same time. Use the '
- . 'form_params option if you want to send application/'
- . 'x-www-form-urlencoded requests, and the multipart '
- . 'option to send multipart/form-data requests.');
- }
- $options['body'] = http_build_query($options['form_params'], '', '&');
- unset($options['form_params']);
- $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded';
- }
-
- if (isset($options['multipart'])) {
- $options['body'] = new Psr7\MultipartStream($options['multipart']);
- unset($options['multipart']);
- }
-
- if (isset($options['json'])) {
- $options['body'] = \GuzzleHttp\json_encode($options['json']);
- unset($options['json']);
- $options['_conditional']['Content-Type'] = 'application/json';
- }
-
- if (!empty($options['decode_content'])
- && $options['decode_content'] !== true
- ) {
- $modify['set_headers']['Accept-Encoding'] = $options['decode_content'];
- }
-
- if (isset($options['headers'])) {
- if (isset($modify['set_headers'])) {
- $modify['set_headers'] = $options['headers'] + $modify['set_headers'];
- } else {
- $modify['set_headers'] = $options['headers'];
- }
- unset($options['headers']);
- }
-
- if (isset($options['body'])) {
- if (is_array($options['body'])) {
- $this->invalidBody();
- }
- $modify['body'] = Psr7\stream_for($options['body']);
- unset($options['body']);
- }
-
- if (!empty($options['auth']) && is_array($options['auth'])) {
- $value = $options['auth'];
- $type = isset($value[2]) ? strtolower($value[2]) : 'basic';
- switch ($type) {
- case 'basic':
- $modify['set_headers']['Authorization'] = 'Basic '
- . base64_encode("$value[0]:$value[1]");
- break;
- case 'digest':
- // @todo: Do not rely on curl
- $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_DIGEST;
- $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]";
- break;
- }
- }
-
- if (isset($options['query'])) {
- $value = $options['query'];
- if (is_array($value)) {
- $value = http_build_query($value, null, '&', PHP_QUERY_RFC3986);
- }
- if (!is_string($value)) {
- throw new \InvalidArgumentException('query must be a string or array');
- }
- $modify['query'] = $value;
- unset($options['query']);
- }
-
- // Ensure that sink is not an invalid value.
- if (isset($options['sink'])) {
- // TODO: Add more sink validation?
- if (is_bool($options['sink'])) {
- throw new \InvalidArgumentException('sink must not be a boolean');
- }
- }
-
- $request = Psr7\modify_request($request, $modify);
- if ($request->getBody() instanceof Psr7\MultipartStream) {
- // Use a multipart/form-data POST if a Content-Type is not set.
- $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='
- . $request->getBody()->getBoundary();
- }
-
- // Merge in conditional headers if they are not present.
- if (isset($options['_conditional'])) {
- // Build up the changes so it's in a single clone of the message.
- $modify = [];
- foreach ($options['_conditional'] as $k => $v) {
- if (!$request->hasHeader($k)) {
- $modify['set_headers'][$k] = $v;
- }
- }
- $request = Psr7\modify_request($request, $modify);
- // Don't pass this internal value along to middleware/handlers.
- unset($options['_conditional']);
- }
-
- return $request;
- }
-
- private function invalidBody()
- {
- throw new \InvalidArgumentException('Passing in the "body" request '
- . 'option as an array to send a POST request has been deprecated. '
- . 'Please use the "form_params" request option to send a '
- . 'application/x-www-form-urlencoded request, or a the "multipart" '
- . 'request option to send a multipart/form-data request.');
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/server/vendor/guzzlehttp/guzzle/src/ClientInterface.php
deleted file mode 100644
index 5a67b66..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/ClientInterface.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Promise\PromiseInterface;
-use GuzzleHttp\Exception\GuzzleException;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\UriInterface;
-
-/**
- * Client interface for sending HTTP requests.
- */
-interface ClientInterface
-{
- const VERSION = '6.2.1';
-
- /**
- * Send an HTTP request.
- *
- * @param RequestInterface $request Request to send
- * @param array $options Request options to apply to the given
- * request and to the transfer.
- *
- * @return ResponseInterface
- * @throws GuzzleException
- */
- public function send(RequestInterface $request, array $options = []);
-
- /**
- * Asynchronously send an HTTP request.
- *
- * @param RequestInterface $request Request to send
- * @param array $options Request options to apply to the given
- * request and to the transfer.
- *
- * @return PromiseInterface
- */
- public function sendAsync(RequestInterface $request, array $options = []);
-
- /**
- * Create and send an HTTP request.
- *
- * Use an absolute path to override the base path of the client, or a
- * relative path to append to the base path of the client. The URL can
- * contain the query string as well.
- *
- * @param string $method HTTP method.
- * @param string|UriInterface $uri URI object or string.
- * @param array $options Request options to apply.
- *
- * @return ResponseInterface
- * @throws GuzzleException
- */
- public function request($method, $uri, array $options = []);
-
- /**
- * Create and send an asynchronous HTTP request.
- *
- * Use an absolute path to override the base path of the client, or a
- * relative path to append to the base path of the client. The URL can
- * contain the query string as well. Use an array to provide a URL
- * template and additional variables to use in the URL template expansion.
- *
- * @param string $method HTTP method
- * @param string|UriInterface $uri URI object or string.
- * @param array $options Request options to apply.
- *
- * @return PromiseInterface
- */
- public function requestAsync($method, $uri, array $options = []);
-
- /**
- * Get a client configuration option.
- *
- * These options include default request options of the client, a "handler"
- * (if utilized by the concrete client), and a "base_uri" if utilized by
- * the concrete client.
- *
- * @param string|null $option The config option to retrieve.
- *
- * @return mixed
- */
- public function getConfig($option = null);
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
deleted file mode 100644
index 7fffd30..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
+++ /dev/null
@@ -1,265 +0,0 @@
-<?php
-namespace GuzzleHttp\Cookie;
-
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * Cookie jar that stores cookies as an array
- */
-class CookieJar implements CookieJarInterface
-{
- /** @var SetCookie[] Loaded cookie data */
- private $cookies = [];
-
- /** @var bool */
- private $strictMode;
-
- /**
- * @param bool $strictMode Set to true to throw exceptions when invalid
- * cookies are added to the cookie jar.
- * @param array $cookieArray Array of SetCookie objects or a hash of
- * arrays that can be used with the SetCookie
- * constructor
- */
- public function __construct($strictMode = false, $cookieArray = [])
- {
- $this->strictMode = $strictMode;
-
- foreach ($cookieArray as $cookie) {
- if (!($cookie instanceof SetCookie)) {
- $cookie = new SetCookie($cookie);
- }
- $this->setCookie($cookie);
- }
- }
-
- /**
- * Create a new Cookie jar from an associative array and domain.
- *
- * @param array $cookies Cookies to create the jar from
- * @param string $domain Domain to set the cookies to
- *
- * @return self
- */
- public static function fromArray(array $cookies, $domain)
- {
- $cookieJar = new self();
- foreach ($cookies as $name => $value) {
- $cookieJar->setCookie(new SetCookie([
- 'Domain' => $domain,
- 'Name' => $name,
- 'Value' => $value,
- 'Discard' => true
- ]));
- }
-
- return $cookieJar;
- }
-
- /**
- * @deprecated
- */
- public static function getCookieValue($value)
- {
- return $value;
- }
-
- /**
- * Evaluate if this cookie should be persisted to storage
- * that survives between requests.
- *
- * @param SetCookie $cookie Being evaluated.
- * @param bool $allowSessionCookies If we should persist session cookies
- * @return bool
- */
- public static function shouldPersist(
- SetCookie $cookie,
- $allowSessionCookies = false
- ) {
- if ($cookie->getExpires() || $allowSessionCookies) {
- if (!$cookie->getDiscard()) {
- return true;
- }
- }
-
- return false;
- }
-
- public function toArray()
- {
- return array_map(function (SetCookie $cookie) {
- return $cookie->toArray();
- }, $this->getIterator()->getArrayCopy());
- }
-
- public function clear($domain = null, $path = null, $name = null)
- {
- if (!$domain) {
- $this->cookies = [];
- return;
- } elseif (!$path) {
- $this->cookies = array_filter(
- $this->cookies,
- function (SetCookie $cookie) use ($path, $domain) {
- return !$cookie->matchesDomain($domain);
- }
- );
- } elseif (!$name) {
- $this->cookies = array_filter(
- $this->cookies,
- function (SetCookie $cookie) use ($path, $domain) {
- return !($cookie->matchesPath($path) &&
- $cookie->matchesDomain($domain));
- }
- );
- } else {
- $this->cookies = array_filter(
- $this->cookies,
- function (SetCookie $cookie) use ($path, $domain, $name) {
- return !($cookie->getName() == $name &&
- $cookie->matchesPath($path) &&
- $cookie->matchesDomain($domain));
- }
- );
- }
- }
-
- public function clearSessionCookies()
- {
- $this->cookies = array_filter(
- $this->cookies,
- function (SetCookie $cookie) {
- return !$cookie->getDiscard() && $cookie->getExpires();
- }
- );
- }
-
- public function setCookie(SetCookie $cookie)
- {
- // If the name string is empty (but not 0), ignore the set-cookie
- // string entirely.
- $name = $cookie->getName();
- if (!$name && $name !== '0') {
- return false;
- }
-
- // Only allow cookies with set and valid domain, name, value
- $result = $cookie->validate();
- if ($result !== true) {
- if ($this->strictMode) {
- throw new \RuntimeException('Invalid cookie: ' . $result);
- } else {
- $this->removeCookieIfEmpty($cookie);
- return false;
- }
- }
-
- // Resolve conflicts with previously set cookies
- foreach ($this->cookies as $i => $c) {
-
- // Two cookies are identical, when their path, and domain are
- // identical.
- if ($c->getPath() != $cookie->getPath() ||
- $c->getDomain() != $cookie->getDomain() ||
- $c->getName() != $cookie->getName()
- ) {
- continue;
- }
-
- // The previously set cookie is a discard cookie and this one is
- // not so allow the new cookie to be set
- if (!$cookie->getDiscard() && $c->getDiscard()) {
- unset($this->cookies[$i]);
- continue;
- }
-
- // If the new cookie's expiration is further into the future, then
- // replace the old cookie
- if ($cookie->getExpires() > $c->getExpires()) {
- unset($this->cookies[$i]);
- continue;
- }
-
- // If the value has changed, we better change it
- if ($cookie->getValue() !== $c->getValue()) {
- unset($this->cookies[$i]);
- continue;
- }
-
- // The cookie exists, so no need to continue
- return false;
- }
-
- $this->cookies[] = $cookie;
-
- return true;
- }
-
- public function count()
- {
- return count($this->cookies);
- }
-
- public function getIterator()
- {
- return new \ArrayIterator(array_values($this->cookies));
- }
-
- public function extractCookies(
- RequestInterface $request,
- ResponseInterface $response
- ) {
- if ($cookieHeader = $response->getHeader('Set-Cookie')) {
- foreach ($cookieHeader as $cookie) {
- $sc = SetCookie::fromString($cookie);
- if (!$sc->getDomain()) {
- $sc->setDomain($request->getUri()->getHost());
- }
- $this->setCookie($sc);
- }
- }
- }
-
- public function withCookieHeader(RequestInterface $request)
- {
- $values = [];
- $uri = $request->getUri();
- $scheme = $uri->getScheme();
- $host = $uri->getHost();
- $path = $uri->getPath() ?: '/';
-
- foreach ($this->cookies as $cookie) {
- if ($cookie->matchesPath($path) &&
- $cookie->matchesDomain($host) &&
- !$cookie->isExpired() &&
- (!$cookie->getSecure() || $scheme === 'https')
- ) {
- $values[] = $cookie->getName() . '='
- . $cookie->getValue();
- }
- }
-
- return $values
- ? $request->withHeader('Cookie', implode('; ', $values))
- : $request;
- }
-
- /**
- * If a cookie already exists and the server asks to set it again with a
- * null value, the cookie must be deleted.
- *
- * @param SetCookie $cookie
- */
- private function removeCookieIfEmpty(SetCookie $cookie)
- {
- $cookieValue = $cookie->getValue();
- if ($cookieValue === null || $cookieValue === '') {
- $this->clear(
- $cookie->getDomain(),
- $cookie->getPath(),
- $cookie->getName()
- );
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
deleted file mode 100644
index 2cf298a..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-namespace GuzzleHttp\Cookie;
-
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * Stores HTTP cookies.
- *
- * It extracts cookies from HTTP requests, and returns them in HTTP responses.
- * CookieJarInterface instances automatically expire contained cookies when
- * necessary. Subclasses are also responsible for storing and retrieving
- * cookies from a file, database, etc.
- *
- * @link http://docs.python.org/2/library/cookielib.html Inspiration
- */
-interface CookieJarInterface extends \Countable, \IteratorAggregate
-{
- /**
- * Create a request with added cookie headers.
- *
- * If no matching cookies are found in the cookie jar, then no Cookie
- * header is added to the request and the same request is returned.
- *
- * @param RequestInterface $request Request object to modify.
- *
- * @return RequestInterface returns the modified request.
- */
- public function withCookieHeader(RequestInterface $request);
-
- /**
- * Extract cookies from an HTTP response and store them in the CookieJar.
- *
- * @param RequestInterface $request Request that was sent
- * @param ResponseInterface $response Response that was received
- */
- public function extractCookies(
- RequestInterface $request,
- ResponseInterface $response
- );
-
- /**
- * Sets a cookie in the cookie jar.
- *
- * @param SetCookie $cookie Cookie to set.
- *
- * @return bool Returns true on success or false on failure
- */
- public function setCookie(SetCookie $cookie);
-
- /**
- * Remove cookies currently held in the cookie jar.
- *
- * Invoking this method without arguments will empty the whole cookie jar.
- * If given a $domain argument only cookies belonging to that domain will
- * be removed. If given a $domain and $path argument, cookies belonging to
- * the specified path within that domain are removed. If given all three
- * arguments, then the cookie with the specified name, path and domain is
- * removed.
- *
- * @param string $domain Clears cookies matching a domain
- * @param string $path Clears cookies matching a domain and path
- * @param string $name Clears cookies matching a domain, path, and name
- *
- * @return CookieJarInterface
- */
- public function clear($domain = null, $path = null, $name = null);
-
- /**
- * Discard all sessions cookies.
- *
- * Removes cookies that don't have an expire field or a have a discard
- * field set to true. To be called when the user agent shuts down according
- * to RFC 2965.
- */
- public function clearSessionCookies();
-
- /**
- * Converts the cookie jar to an array.
- *
- * @return array
- */
- public function toArray();
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/server/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
deleted file mode 100644
index 9887c1d..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-namespace GuzzleHttp\Cookie;
-
-/**
- * Persists non-session cookies using a JSON formatted file
- */
-class FileCookieJar extends CookieJar
-{
- /** @var string filename */
- private $filename;
-
- /** @var bool Control whether to persist session cookies or not. */
- private $storeSessionCookies;
-
- /**
- * Create a new FileCookieJar object
- *
- * @param string $cookieFile File to store the cookie data
- * @param bool $storeSessionCookies Set to true to store session cookies
- * in the cookie jar.
- *
- * @throws \RuntimeException if the file cannot be found or created
- */
- public function __construct($cookieFile, $storeSessionCookies = false)
- {
- $this->filename = $cookieFile;
- $this->storeSessionCookies = $storeSessionCookies;
-
- if (file_exists($cookieFile)) {
- $this->load($cookieFile);
- }
- }
-
- /**
- * Saves the file when shutting down
- */
- public function __destruct()
- {
- $this->save($this->filename);
- }
-
- /**
- * Saves the cookies to a file.
- *
- * @param string $filename File to save
- * @throws \RuntimeException if the file cannot be found or created
- */
- public function save($filename)
- {
- $json = [];
- foreach ($this as $cookie) {
- /** @var SetCookie $cookie */
- if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
- $json[] = $cookie->toArray();
- }
- }
-
- $jsonStr = \GuzzleHttp\json_encode($json);
- if (false === file_put_contents($filename, $jsonStr)) {
- throw new \RuntimeException("Unable to save file {$filename}");
- }
- }
-
- /**
- * Load cookies from a JSON formatted file.
- *
- * Old cookies are kept unless overwritten by newly loaded ones.
- *
- * @param string $filename Cookie file to load.
- * @throws \RuntimeException if the file cannot be loaded.
- */
- public function load($filename)
- {
- $json = file_get_contents($filename);
- if (false === $json) {
- throw new \RuntimeException("Unable to load file {$filename}");
- } elseif ($json === '') {
- return;
- }
-
- $data = \GuzzleHttp\json_decode($json, true);
- if (is_array($data)) {
- foreach (json_decode($json, true) as $cookie) {
- $this->setCookie(new SetCookie($cookie));
- }
- } elseif (strlen($data)) {
- throw new \RuntimeException("Invalid cookie file: {$filename}");
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/server/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
deleted file mode 100644
index e4bfafd..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-namespace GuzzleHttp\Cookie;
-
-/**
- * Persists cookies in the client session
- */
-class SessionCookieJar extends CookieJar
-{
- /** @var string session key */
- private $sessionKey;
-
- /** @var bool Control whether to persist session cookies or not. */
- private $storeSessionCookies;
-
- /**
- * Create a new SessionCookieJar object
- *
- * @param string $sessionKey Session key name to store the cookie
- * data in session
- * @param bool $storeSessionCookies Set to true to store session cookies
- * in the cookie jar.
- */
- public function __construct($sessionKey, $storeSessionCookies = false)
- {
- $this->sessionKey = $sessionKey;
- $this->storeSessionCookies = $storeSessionCookies;
- $this->load();
- }
-
- /**
- * Saves cookies to session when shutting down
- */
- public function __destruct()
- {
- $this->save();
- }
-
- /**
- * Save cookies to the client session
- */
- public function save()
- {
- $json = [];
- foreach ($this as $cookie) {
- /** @var SetCookie $cookie */
- if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
- $json[] = $cookie->toArray();
- }
- }
-
- $_SESSION[$this->sessionKey] = json_encode($json);
- }
-
- /**
- * Load the contents of the client session into the data array
- */
- protected function load()
- {
- if (!isset($_SESSION[$this->sessionKey])) {
- return;
- }
- $data = json_decode($_SESSION[$this->sessionKey], true);
- if (is_array($data)) {
- foreach ($data as $cookie) {
- $this->setCookie(new SetCookie($cookie));
- }
- } elseif (strlen($data)) {
- throw new \RuntimeException("Invalid cookie data");
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/server/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
deleted file mode 100644
index c911e2a..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php
+++ /dev/null
@@ -1,404 +0,0 @@
-<?php
-namespace GuzzleHttp\Cookie;
-
-/**
- * Set-Cookie object
- */
-class SetCookie
-{
- /** @var array */
- private static $defaults = [
- 'Name' => null,
- 'Value' => null,
- 'Domain' => null,
- 'Path' => '/',
- 'Max-Age' => null,
- 'Expires' => null,
- 'Secure' => false,
- 'Discard' => false,
- 'HttpOnly' => false
- ];
-
- /** @var array Cookie data */
- private $data;
-
- /**
- * Create a new SetCookie object from a string
- *
- * @param string $cookie Set-Cookie header string
- *
- * @return self
- */
- public static function fromString($cookie)
- {
- // Create the default return array
- $data = self::$defaults;
- // Explode the cookie string using a series of semicolons
- $pieces = array_filter(array_map('trim', explode(';', $cookie)));
- // The name of the cookie (first kvp) must include an equal sign.
- if (empty($pieces) || !strpos($pieces[0], '=')) {
- return new self($data);
- }
-
- // Add the cookie pieces into the parsed data array
- foreach ($pieces as $part) {
-
- $cookieParts = explode('=', $part, 2);
- $key = trim($cookieParts[0]);
- $value = isset($cookieParts[1])
- ? trim($cookieParts[1], " \n\r\t\0\x0B")
- : true;
-
- // Only check for non-cookies when cookies have been found
- if (empty($data['Name'])) {
- $data['Name'] = $key;
- $data['Value'] = $value;
- } else {
- foreach (array_keys(self::$defaults) as $search) {
- if (!strcasecmp($search, $key)) {
- $data[$search] = $value;
- continue 2;
- }
- }
- $data[$key] = $value;
- }
- }
-
- return new self($data);
- }
-
- /**
- * @param array $data Array of cookie data provided by a Cookie parser
- */
- public function __construct(array $data = [])
- {
- $this->data = array_replace(self::$defaults, $data);
- // Extract the Expires value and turn it into a UNIX timestamp if needed
- if (!$this->getExpires() && $this->getMaxAge()) {
- // Calculate the Expires date
- $this->setExpires(time() + $this->getMaxAge());
- } elseif ($this->getExpires() && !is_numeric($this->getExpires())) {
- $this->setExpires($this->getExpires());
- }
- }
-
- public function __toString()
- {
- $str = $this->data['Name'] . '=' . $this->data['Value'] . '; ';
- foreach ($this->data as $k => $v) {
- if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) {
- if ($k === 'Expires') {
- $str .= 'Expires=' . gmdate('D, d M Y H:i:s \G\M\T', $v) . '; ';
- } else {
- $str .= ($v === true ? $k : "{$k}={$v}") . '; ';
- }
- }
- }
-
- return rtrim($str, '; ');
- }
-
- public function toArray()
- {
- return $this->data;
- }
-
- /**
- * Get the cookie name
- *
- * @return string
- */
- public function getName()
- {
- return $this->data['Name'];
- }
-
- /**
- * Set the cookie name
- *
- * @param string $name Cookie name
- */
- public function setName($name)
- {
- $this->data['Name'] = $name;
- }
-
- /**
- * Get the cookie value
- *
- * @return string
- */
- public function getValue()
- {
- return $this->data['Value'];
- }
-
- /**
- * Set the cookie value
- *
- * @param string $value Cookie value
- */
- public function setValue($value)
- {
- $this->data['Value'] = $value;
- }
-
- /**
- * Get the domain
- *
- * @return string|null
- */
- public function getDomain()
- {
- return $this->data['Domain'];
- }
-
- /**
- * Set the domain of the cookie
- *
- * @param string $domain
- */
- public function setDomain($domain)
- {
- $this->data['Domain'] = $domain;
- }
-
- /**
- * Get the path
- *
- * @return string
- */
- public function getPath()
- {
- return $this->data['Path'];
- }
-
- /**
- * Set the path of the cookie
- *
- * @param string $path Path of the cookie
- */
- public function setPath($path)
- {
- $this->data['Path'] = $path;
- }
-
- /**
- * Maximum lifetime of the cookie in seconds
- *
- * @return int|null
- */
- public function getMaxAge()
- {
- return $this->data['Max-Age'];
- }
-
- /**
- * Set the max-age of the cookie
- *
- * @param int $maxAge Max age of the cookie in seconds
- */
- public function setMaxAge($maxAge)
- {
- $this->data['Max-Age'] = $maxAge;
- }
-
- /**
- * The UNIX timestamp when the cookie Expires
- *
- * @return mixed
- */
- public function getExpires()
- {
- return $this->data['Expires'];
- }
-
- /**
- * Set the unix timestamp for which the cookie will expire
- *
- * @param int $timestamp Unix timestamp
- */
- public function setExpires($timestamp)
- {
- $this->data['Expires'] = is_numeric($timestamp)
- ? (int) $timestamp
- : strtotime($timestamp);
- }
-
- /**
- * Get whether or not this is a secure cookie
- *
- * @return null|bool
- */
- public function getSecure()
- {
- return $this->data['Secure'];
- }
-
- /**
- * Set whether or not the cookie is secure
- *
- * @param bool $secure Set to true or false if secure
- */
- public function setSecure($secure)
- {
- $this->data['Secure'] = $secure;
- }
-
- /**
- * Get whether or not this is a session cookie
- *
- * @return null|bool
- */
- public function getDiscard()
- {
- return $this->data['Discard'];
- }
-
- /**
- * Set whether or not this is a session cookie
- *
- * @param bool $discard Set to true or false if this is a session cookie
- */
- public function setDiscard($discard)
- {
- $this->data['Discard'] = $discard;
- }
-
- /**
- * Get whether or not this is an HTTP only cookie
- *
- * @return bool
- */
- public function getHttpOnly()
- {
- return $this->data['HttpOnly'];
- }
-
- /**
- * Set whether or not this is an HTTP only cookie
- *
- * @param bool $httpOnly Set to true or false if this is HTTP only
- */
- public function setHttpOnly($httpOnly)
- {
- $this->data['HttpOnly'] = $httpOnly;
- }
-
- /**
- * Check if the cookie matches a path value.
- *
- * A request-path path-matches a given cookie-path if at least one of
- * the following conditions holds:
- *
- * - The cookie-path and the request-path are identical.
- * - The cookie-path is a prefix of the request-path, and the last
- * character of the cookie-path is %x2F ("/").
- * - The cookie-path is a prefix of the request-path, and the first
- * character of the request-path that is not included in the cookie-
- * path is a %x2F ("/") character.
- *
- * @param string $requestPath Path to check against
- *
- * @return bool
- */
- public function matchesPath($requestPath)
- {
- $cookiePath = $this->getPath();
-
- // Match on exact matches or when path is the default empty "/"
- if ($cookiePath === '/' || $cookiePath == $requestPath) {
- return true;
- }
-
- // Ensure that the cookie-path is a prefix of the request path.
- if (0 !== strpos($requestPath, $cookiePath)) {
- return false;
- }
-
- // Match if the last character of the cookie-path is "/"
- if (substr($cookiePath, -1, 1) === '/') {
- return true;
- }
-
- // Match if the first character not included in cookie path is "/"
- return substr($requestPath, strlen($cookiePath), 1) === '/';
- }
-
- /**
- * Check if the cookie matches a domain value
- *
- * @param string $domain Domain to check against
- *
- * @return bool
- */
- public function matchesDomain($domain)
- {
- // Remove the leading '.' as per spec in RFC 6265.
- // http://tools.ietf.org/html/rfc6265#section-5.2.3
- $cookieDomain = ltrim($this->getDomain(), '.');
-
- // Domain not set or exact match.
- if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) {
- return true;
- }
-
- // Matching the subdomain according to RFC 6265.
- // http://tools.ietf.org/html/rfc6265#section-5.1.3
- if (filter_var($domain, FILTER_VALIDATE_IP)) {
- return false;
- }
-
- return (bool) preg_match('/\.' . preg_quote($cookieDomain) . '$/', $domain);
- }
-
- /**
- * Check if the cookie is expired
- *
- * @return bool
- */
- public function isExpired()
- {
- return $this->getExpires() && time() > $this->getExpires();
- }
-
- /**
- * Check if the cookie is valid according to RFC 6265
- *
- * @return bool|string Returns true if valid or an error message if invalid
- */
- public function validate()
- {
- // Names must not be empty, but can be 0
- $name = $this->getName();
- if (empty($name) && !is_numeric($name)) {
- return 'The cookie name must not be empty';
- }
-
- // Check if any of the invalid characters are present in the cookie name
- if (preg_match(
- '/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/',
- $name)
- ) {
- return 'Cookie name must not contain invalid characters: ASCII '
- . 'Control characters (0-31;127), space, tab and the '
- . 'following characters: ()<>@,;:\"/?={}';
- }
-
- // Value must not be empty, but can be 0
- $value = $this->getValue();
- if (empty($value) && !is_numeric($value)) {
- return 'The cookie value must not be empty';
- }
-
- // Domains must not be empty, but can be 0
- // A "0" is not a valid internet domain, but may be used as server name
- // in a private network.
- $domain = $this->getDomain();
- if (empty($domain) && !is_numeric($domain)) {
- return 'The cookie domain must not be empty';
- }
-
- return true;
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
deleted file mode 100644
index fd78431..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-/**
- * Exception when an HTTP error occurs (4xx or 5xx error)
- */
-class BadResponseException extends RequestException {}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
deleted file mode 100644
index f95c09f..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-/**
- * Exception when a client error is encountered (4xx codes)
- */
-class ClientException extends BadResponseException {}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
deleted file mode 100644
index d33b0cc..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-use Psr\Http\Message\RequestInterface;
-
-/**
- * Exception thrown when a connection cannot be established.
- *
- * Note that no response is present for a ConnectException
- */
-class ConnectException extends RequestException
-{
- public function __construct(
- $message,
- RequestInterface $request,
- \Exception $previous = null,
- array $handlerContext = []
- ) {
- parent::__construct($message, $request, null, $previous, $handlerContext);
- }
-
- /**
- * @return null
- */
- public function getResponse()
- {
- return null;
- }
-
- /**
- * @return bool
- */
- public function hasResponse()
- {
- return false;
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
deleted file mode 100644
index c82998e..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-interface GuzzleException {}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
deleted file mode 100644
index 3fd72fa..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use GuzzleHttp\Promise\PromiseInterface;
-use Psr\Http\Message\UriInterface;
-
-/**
- * HTTP Request exception
- */
-class RequestException extends TransferException
-{
- /** @var RequestInterface */
- private $request;
-
- /** @var ResponseInterface */
- private $response;
-
- /** @var array */
- private $handlerContext;
-
- public function __construct(
- $message,
- RequestInterface $request,
- ResponseInterface $response = null,
- \Exception $previous = null,
- array $handlerContext = []
- ) {
- // Set the code of the exception if the response is set and not future.
- $code = $response && !($response instanceof PromiseInterface)
- ? $response->getStatusCode()
- : 0;
- parent::__construct($message, $code, $previous);
- $this->request = $request;
- $this->response = $response;
- $this->handlerContext = $handlerContext;
- }
-
- /**
- * Wrap non-RequestExceptions with a RequestException
- *
- * @param RequestInterface $request
- * @param \Exception $e
- *
- * @return RequestException
- */
- public static function wrapException(RequestInterface $request, \Exception $e)
- {
- return $e instanceof RequestException
- ? $e
- : new RequestException($e->getMessage(), $request, null, $e);
- }
-
- /**
- * Factory method to create a new exception with a normalized error message
- *
- * @param RequestInterface $request Request
- * @param ResponseInterface $response Response received
- * @param \Exception $previous Previous exception
- * @param array $ctx Optional handler context.
- *
- * @return self
- */
- public static function create(
- RequestInterface $request,
- ResponseInterface $response = null,
- \Exception $previous = null,
- array $ctx = []
- ) {
- if (!$response) {
- return new self(
- 'Error completing request',
- $request,
- null,
- $previous,
- $ctx
- );
- }
-
- $level = (int) floor($response->getStatusCode() / 100);
- if ($level === 4) {
- $label = 'Client error';
- $className = __NAMESPACE__ . '\\ClientException';
- } elseif ($level === 5) {
- $label = 'Server error';
- $className = __NAMESPACE__ . '\\ServerException';
- } else {
- $label = 'Unsuccessful request';
- $className = __CLASS__;
- }
-
- $uri = $request->getUri();
- $uri = static::obfuscateUri($uri);
-
- // Server Error: `GET /` resulted in a `404 Not Found` response:
- // <html> ... (truncated)
- $message = sprintf(
- '%s: `%s` resulted in a `%s` response',
- $label,
- $request->getMethod() . ' ' . $uri,
- $response->getStatusCode() . ' ' . $response->getReasonPhrase()
- );
-
- $summary = static::getResponseBodySummary($response);
-
- if ($summary !== null) {
- $message .= ":\n{$summary}\n";
- }
-
- return new $className($message, $request, $response, $previous, $ctx);
- }
-
- /**
- * Get a short summary of the response
- *
- * Will return `null` if the response is not printable.
- *
- * @param ResponseInterface $response
- *
- * @return string|null
- */
- public static function getResponseBodySummary(ResponseInterface $response)
- {
- $body = $response->getBody();
-
- if (!$body->isSeekable()) {
- return null;
- }
-
- $size = $body->getSize();
- $summary = $body->read(120);
- $body->rewind();
-
- if ($size > 120) {
- $summary .= ' (truncated...)';
- }
-
- // Matches any printable character, including unicode characters:
- // letters, marks, numbers, punctuation, spacing, and separators.
- if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) {
- return null;
- }
-
- return $summary;
- }
-
- /**
- * Obfuscates URI if there is an username and a password present
- *
- * @param UriInterface $uri
- *
- * @return UriInterface
- */
- private static function obfuscateUri($uri)
- {
- $userInfo = $uri->getUserInfo();
-
- if (false !== ($pos = strpos($userInfo, ':'))) {
- return $uri->withUserInfo(substr($userInfo, 0, $pos), '***');
- }
-
- return $uri;
- }
-
- /**
- * Get the request that caused the exception
- *
- * @return RequestInterface
- */
- public function getRequest()
- {
- return $this->request;
- }
-
- /**
- * Get the associated response
- *
- * @return ResponseInterface|null
- */
- public function getResponse()
- {
- return $this->response;
- }
-
- /**
- * Check if a response was received
- *
- * @return bool
- */
- public function hasResponse()
- {
- return $this->response !== null;
- }
-
- /**
- * Get contextual information about the error from the underlying handler.
- *
- * The contents of this array will vary depending on which handler you are
- * using. It may also be just an empty array. Relying on this data will
- * couple you to a specific handler, but can give more debug information
- * when needed.
- *
- * @return array
- */
- public function getHandlerContext()
- {
- return $this->handlerContext;
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php
deleted file mode 100644
index a77c289..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Exception thrown when a seek fails on a stream.
- */
-class SeekException extends \RuntimeException implements GuzzleException
-{
- private $stream;
-
- public function __construct(StreamInterface $stream, $pos = 0, $msg = '')
- {
- $this->stream = $stream;
- $msg = $msg ?: 'Could not seek the stream to position ' . $pos;
- parent::__construct($msg);
- }
-
- /**
- * @return StreamInterface
- */
- public function getStream()
- {
- return $this->stream;
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
deleted file mode 100644
index 7cdd340..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-/**
- * Exception when a server error is encountered (5xx codes)
- */
-class ServerException extends BadResponseException {}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
deleted file mode 100644
index b60a967..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-class TooManyRedirectsException extends RequestException {}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/server/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
deleted file mode 100644
index b92071c..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-namespace GuzzleHttp\Exception;
-
-class TransferException extends \RuntimeException implements GuzzleException {}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
deleted file mode 100644
index 9f75745..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
+++ /dev/null
@@ -1,536 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Exception\ConnectException;
-use GuzzleHttp\Promise\FulfilledPromise;
-use GuzzleHttp\Promise\RejectedPromise;
-use GuzzleHttp\Psr7;
-use GuzzleHttp\Psr7\LazyOpenStream;
-use GuzzleHttp\TransferStats;
-use Psr\Http\Message\RequestInterface;
-
-/**
- * Creates curl resources from a request
- */
-class CurlFactory implements CurlFactoryInterface
-{
- /** @var array */
- private $handles;
-
- /** @var int Total number of idle handles to keep in cache */
- private $maxHandles;
-
- /**
- * @param int $maxHandles Maximum number of idle handles.
- */
- public function __construct($maxHandles)
- {
- $this->maxHandles = $maxHandles;
- }
-
- public function create(RequestInterface $request, array $options)
- {
- if (isset($options['curl']['body_as_string'])) {
- $options['_body_as_string'] = $options['curl']['body_as_string'];
- unset($options['curl']['body_as_string']);
- }
-
- $easy = new EasyHandle;
- $easy->request = $request;
- $easy->options = $options;
- $conf = $this->getDefaultConf($easy);
- $this->applyMethod($easy, $conf);
- $this->applyHandlerOptions($easy, $conf);
- $this->applyHeaders($easy, $conf);
- unset($conf['_headers']);
-
- // Add handler options from the request configuration options
- if (isset($options['curl'])) {
- $conf = array_replace($conf, $options['curl']);
- }
-
- $conf[CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy);
- $easy->handle = $this->handles
- ? array_pop($this->handles)
- : curl_init();
- curl_setopt_array($easy->handle, $conf);
-
- return $easy;
- }
-
- public function release(EasyHandle $easy)
- {
- $resource = $easy->handle;
- unset($easy->handle);
-
- if (count($this->handles) >= $this->maxHandles) {
- curl_close($resource);
- } else {
- // Remove all callback functions as they can hold onto references
- // and are not cleaned up by curl_reset. Using curl_setopt_array
- // does not work for some reason, so removing each one
- // individually.
- curl_setopt($resource, CURLOPT_HEADERFUNCTION, null);
- curl_setopt($resource, CURLOPT_READFUNCTION, null);
- curl_setopt($resource, CURLOPT_WRITEFUNCTION, null);
- curl_setopt($resource, CURLOPT_PROGRESSFUNCTION, null);
- curl_reset($resource);
- $this->handles[] = $resource;
- }
- }
-
- /**
- * Completes a cURL transaction, either returning a response promise or a
- * rejected promise.
- *
- * @param callable $handler
- * @param EasyHandle $easy
- * @param CurlFactoryInterface $factory Dictates how the handle is released
- *
- * @return \GuzzleHttp\Promise\PromiseInterface
- */
- public static function finish(
- callable $handler,
- EasyHandle $easy,
- CurlFactoryInterface $factory
- ) {
- if (isset($easy->options['on_stats'])) {
- self::invokeStats($easy);
- }
-
- if (!$easy->response || $easy->errno) {
- return self::finishError($handler, $easy, $factory);
- }
-
- // Return the response if it is present and there is no error.
- $factory->release($easy);
-
- // Rewind the body of the response if possible.
- $body = $easy->response->getBody();
- if ($body->isSeekable()) {
- $body->rewind();
- }
-
- return new FulfilledPromise($easy->response);
- }
-
- private static function invokeStats(EasyHandle $easy)
- {
- $curlStats = curl_getinfo($easy->handle);
- $stats = new TransferStats(
- $easy->request,
- $easy->response,
- $curlStats['total_time'],
- $easy->errno,
- $curlStats
- );
- call_user_func($easy->options['on_stats'], $stats);
- }
-
- private static function finishError(
- callable $handler,
- EasyHandle $easy,
- CurlFactoryInterface $factory
- ) {
- // Get error information and release the handle to the factory.
- $ctx = [
- 'errno' => $easy->errno,
- 'error' => curl_error($easy->handle),
- ] + curl_getinfo($easy->handle);
- $factory->release($easy);
-
- // Retry when nothing is present or when curl failed to rewind.
- if (empty($easy->options['_err_message'])
- && (!$easy->errno || $easy->errno == 65)
- ) {
- return self::retryFailedRewind($handler, $easy, $ctx);
- }
-
- return self::createRejection($easy, $ctx);
- }
-
- private static function createRejection(EasyHandle $easy, array $ctx)
- {
- static $connectionErrors = [
- CURLE_OPERATION_TIMEOUTED => true,
- CURLE_COULDNT_RESOLVE_HOST => true,
- CURLE_COULDNT_CONNECT => true,
- CURLE_SSL_CONNECT_ERROR => true,
- CURLE_GOT_NOTHING => true,
- ];
-
- // If an exception was encountered during the onHeaders event, then
- // return a rejected promise that wraps that exception.
- if ($easy->onHeadersException) {
- return new RejectedPromise(
- new RequestException(
- 'An error was encountered during the on_headers event',
- $easy->request,
- $easy->response,
- $easy->onHeadersException,
- $ctx
- )
- );
- }
-
- $message = sprintf(
- 'cURL error %s: %s (%s)',
- $ctx['errno'],
- $ctx['error'],
- 'see http://curl.haxx.se/libcurl/c/libcurl-errors.html'
- );
-
- // Create a connection exception if it was a specific error code.
- $error = isset($connectionErrors[$easy->errno])
- ? new ConnectException($message, $easy->request, null, $ctx)
- : new RequestException($message, $easy->request, $easy->response, null, $ctx);
-
- return new RejectedPromise($error);
- }
-
- private function getDefaultConf(EasyHandle $easy)
- {
- $conf = [
- '_headers' => $easy->request->getHeaders(),
- CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(),
- CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''),
- CURLOPT_RETURNTRANSFER => false,
- CURLOPT_HEADER => false,
- CURLOPT_CONNECTTIMEOUT => 150,
- ];
-
- if (defined('CURLOPT_PROTOCOLS')) {
- $conf[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS;
- }
-
- $version = $easy->request->getProtocolVersion();
- if ($version == 1.1) {
- $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1;
- } elseif ($version == 2.0) {
- $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2_0;
- } else {
- $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0;
- }
-
- return $conf;
- }
-
- private function applyMethod(EasyHandle $easy, array &$conf)
- {
- $body = $easy->request->getBody();
- $size = $body->getSize();
-
- if ($size === null || $size > 0) {
- $this->applyBody($easy->request, $easy->options, $conf);
- return;
- }
-
- $method = $easy->request->getMethod();
- if ($method === 'PUT' || $method === 'POST') {
- // See http://tools.ietf.org/html/rfc7230#section-3.3.2
- if (!$easy->request->hasHeader('Content-Length')) {
- $conf[CURLOPT_HTTPHEADER][] = 'Content-Length: 0';
- }
- } elseif ($method === 'HEAD') {
- $conf[CURLOPT_NOBODY] = true;
- unset(
- $conf[CURLOPT_WRITEFUNCTION],
- $conf[CURLOPT_READFUNCTION],
- $conf[CURLOPT_FILE],
- $conf[CURLOPT_INFILE]
- );
- }
- }
-
- private function applyBody(RequestInterface $request, array $options, array &$conf)
- {
- $size = $request->hasHeader('Content-Length')
- ? (int) $request->getHeaderLine('Content-Length')
- : null;
-
- // Send the body as a string if the size is less than 1MB OR if the
- // [curl][body_as_string] request value is set.
- if (($size !== null && $size < 1000000) ||
- !empty($options['_body_as_string'])
- ) {
- $conf[CURLOPT_POSTFIELDS] = (string) $request->getBody();
- // Don't duplicate the Content-Length header
- $this->removeHeader('Content-Length', $conf);
- $this->removeHeader('Transfer-Encoding', $conf);
- } else {
- $conf[CURLOPT_UPLOAD] = true;
- if ($size !== null) {
- $conf[CURLOPT_INFILESIZE] = $size;
- $this->removeHeader('Content-Length', $conf);
- }
- $body = $request->getBody();
- if ($body->isSeekable()) {
- $body->rewind();
- }
- $conf[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) {
- return $body->read($length);
- };
- }
-
- // If the Expect header is not present, prevent curl from adding it
- if (!$request->hasHeader('Expect')) {
- $conf[CURLOPT_HTTPHEADER][] = 'Expect:';
- }
-
- // cURL sometimes adds a content-type by default. Prevent this.
- if (!$request->hasHeader('Content-Type')) {
- $conf[CURLOPT_HTTPHEADER][] = 'Content-Type:';
- }
- }
-
- private function applyHeaders(EasyHandle $easy, array &$conf)
- {
- foreach ($conf['_headers'] as $name => $values) {
- foreach ($values as $value) {
- $conf[CURLOPT_HTTPHEADER][] = "$name: $value";
- }
- }
-
- // Remove the Accept header if one was not set
- if (!$easy->request->hasHeader('Accept')) {
- $conf[CURLOPT_HTTPHEADER][] = 'Accept:';
- }
- }
-
- /**
- * Remove a header from the options array.
- *
- * @param string $name Case-insensitive header to remove
- * @param array $options Array of options to modify
- */
- private function removeHeader($name, array &$options)
- {
- foreach (array_keys($options['_headers']) as $key) {
- if (!strcasecmp($key, $name)) {
- unset($options['_headers'][$key]);
- return;
- }
- }
- }
-
- private function applyHandlerOptions(EasyHandle $easy, array &$conf)
- {
- $options = $easy->options;
- if (isset($options['verify'])) {
- if ($options['verify'] === false) {
- unset($conf[CURLOPT_CAINFO]);
- $conf[CURLOPT_SSL_VERIFYHOST] = 0;
- $conf[CURLOPT_SSL_VERIFYPEER] = false;
- } else {
- $conf[CURLOPT_SSL_VERIFYHOST] = 2;
- $conf[CURLOPT_SSL_VERIFYPEER] = true;
- if (is_string($options['verify'])) {
- $conf[CURLOPT_CAINFO] = $options['verify'];
- if (!file_exists($options['verify'])) {
- throw new \InvalidArgumentException(
- "SSL CA bundle not found: {$options['verify']}"
- );
- }
- }
- }
- }
-
- if (!empty($options['decode_content'])) {
- $accept = $easy->request->getHeaderLine('Accept-Encoding');
- if ($accept) {
- $conf[CURLOPT_ENCODING] = $accept;
- } else {
- $conf[CURLOPT_ENCODING] = '';
- // Don't let curl send the header over the wire
- $conf[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
- }
- }
-
- if (isset($options['sink'])) {
- $sink = $options['sink'];
- if (!is_string($sink)) {
- $sink = \GuzzleHttp\Psr7\stream_for($sink);
- } elseif (!is_dir(dirname($sink))) {
- // Ensure that the directory exists before failing in curl.
- throw new \RuntimeException(sprintf(
- 'Directory %s does not exist for sink value of %s',
- dirname($sink),
- $sink
- ));
- } else {
- $sink = new LazyOpenStream($sink, 'w+');
- }
- $easy->sink = $sink;
- $conf[CURLOPT_WRITEFUNCTION] = function ($ch, $write) use ($sink) {
- return $sink->write($write);
- };
- } else {
- // Use a default temp stream if no sink was set.
- $conf[CURLOPT_FILE] = fopen('php://temp', 'w+');
- $easy->sink = Psr7\stream_for($conf[CURLOPT_FILE]);
- }
-
- if (isset($options['timeout'])) {
- $conf[CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000;
- }
-
- if (isset($options['connect_timeout'])) {
- $conf[CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000;
- }
-
- if (isset($options['proxy'])) {
- if (!is_array($options['proxy'])) {
- $conf[CURLOPT_PROXY] = $options['proxy'];
- } else {
- $scheme = $easy->request->getUri()->getScheme();
- if (isset($options['proxy'][$scheme])) {
- $host = $easy->request->getUri()->getHost();
- if (!isset($options['proxy']['no']) ||
- !\GuzzleHttp\is_host_in_noproxy($host, $options['proxy']['no'])
- ) {
- $conf[CURLOPT_PROXY] = $options['proxy'][$scheme];
- }
- }
- }
- }
-
- if (isset($options['cert'])) {
- $cert = $options['cert'];
- if (is_array($cert)) {
- $conf[CURLOPT_SSLCERTPASSWD] = $cert[1];
- $cert = $cert[0];
- }
- if (!file_exists($cert)) {
- throw new \InvalidArgumentException(
- "SSL certificate not found: {$cert}"
- );
- }
- $conf[CURLOPT_SSLCERT] = $cert;
- }
-
- if (isset($options['ssl_key'])) {
- $sslKey = $options['ssl_key'];
- if (is_array($sslKey)) {
- $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1];
- $sslKey = $sslKey[0];
- }
- if (!file_exists($sslKey)) {
- throw new \InvalidArgumentException(
- "SSL private key not found: {$sslKey}"
- );
- }
- $conf[CURLOPT_SSLKEY] = $sslKey;
- }
-
- if (isset($options['progress'])) {
- $progress = $options['progress'];
- if (!is_callable($progress)) {
- throw new \InvalidArgumentException(
- 'progress client option must be callable'
- );
- }
- $conf[CURLOPT_NOPROGRESS] = false;
- $conf[CURLOPT_PROGRESSFUNCTION] = function () use ($progress) {
- $args = func_get_args();
- // PHP 5.5 pushed the handle onto the start of the args
- if (is_resource($args[0])) {
- array_shift($args);
- }
- call_user_func_array($progress, $args);
- };
- }
-
- if (!empty($options['debug'])) {
- $conf[CURLOPT_STDERR] = \GuzzleHttp\debug_resource($options['debug']);
- $conf[CURLOPT_VERBOSE] = true;
- }
- }
-
- /**
- * This function ensures that a response was set on a transaction. If one
- * was not set, then the request is retried if possible. This error
- * typically means you are sending a payload, curl encountered a
- * "Connection died, retrying a fresh connect" error, tried to rewind the
- * stream, and then encountered a "necessary data rewind wasn't possible"
- * error, causing the request to be sent through curl_multi_info_read()
- * without an error status.
- */
- private static function retryFailedRewind(
- callable $handler,
- EasyHandle $easy,
- array $ctx
- ) {
- try {
- // Only rewind if the body has been read from.
- $body = $easy->request->getBody();
- if ($body->tell() > 0) {
- $body->rewind();
- }
- } catch (\RuntimeException $e) {
- $ctx['error'] = 'The connection unexpectedly failed without '
- . 'providing an error. The request would have been retried, '
- . 'but attempting to rewind the request body failed. '
- . 'Exception: ' . $e;
- return self::createRejection($easy, $ctx);
- }
-
- // Retry no more than 3 times before giving up.
- if (!isset($easy->options['_curl_retries'])) {
- $easy->options['_curl_retries'] = 1;
- } elseif ($easy->options['_curl_retries'] == 2) {
- $ctx['error'] = 'The cURL request was retried 3 times '
- . 'and did not succeed. The most likely reason for the failure '
- . 'is that cURL was unable to rewind the body of the request '
- . 'and subsequent retries resulted in the same error. Turn on '
- . 'the debug option to see what went wrong. See '
- . 'https://bugs.php.net/bug.php?id=47204 for more information.';
- return self::createRejection($easy, $ctx);
- } else {
- $easy->options['_curl_retries']++;
- }
-
- return $handler($easy->request, $easy->options);
- }
-
- private function createHeaderFn(EasyHandle $easy)
- {
- if (isset($easy->options['on_headers'])) {
- $onHeaders = $easy->options['on_headers'];
-
- if (!is_callable($onHeaders)) {
- throw new \InvalidArgumentException('on_headers must be callable');
- }
- } else {
- $onHeaders = null;
- }
-
- return function ($ch, $h) use (
- $onHeaders,
- $easy,
- &$startingResponse
- ) {
- $value = trim($h);
- if ($value === '') {
- $startingResponse = true;
- $easy->createResponse();
- if ($onHeaders !== null) {
- try {
- $onHeaders($easy->response);
- } catch (\Exception $e) {
- // Associate the exception with the handle and trigger
- // a curl header write error by returning 0.
- $easy->onHeadersException = $e;
- return -1;
- }
- }
- } elseif ($startingResponse) {
- $startingResponse = false;
- $easy->headers = [$value];
- } else {
- $easy->headers[] = $value;
- }
- return strlen($h);
- };
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php
deleted file mode 100644
index b0fc236..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use Psr\Http\Message\RequestInterface;
-
-interface CurlFactoryInterface
-{
- /**
- * Creates a cURL handle resource.
- *
- * @param RequestInterface $request Request
- * @param array $options Transfer options
- *
- * @return EasyHandle
- * @throws \RuntimeException when an option cannot be applied
- */
- public function create(RequestInterface $request, array $options);
-
- /**
- * Release an easy handle, allowing it to be reused or closed.
- *
- * This function must call unset on the easy handle's "handle" property.
- *
- * @param EasyHandle $easy
- */
- public function release(EasyHandle $easy);
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php b/server/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php
deleted file mode 100644
index 43577da..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use GuzzleHttp\Psr7;
-use Psr\Http\Message\RequestInterface;
-
-/**
- * HTTP handler that uses cURL easy handles as a transport layer.
- *
- * When using the CurlHandler, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of the "client" key of the request.
- */
-class CurlHandler
-{
- /** @var CurlFactoryInterface */
- private $factory;
-
- /**
- * Accepts an associative array of options:
- *
- * - factory: Optional curl factory used to create cURL handles.
- *
- * @param array $options Array of options to use with the handler
- */
- public function __construct(array $options = [])
- {
- $this->factory = isset($options['handle_factory'])
- ? $options['handle_factory']
- : new CurlFactory(3);
- }
-
- public function __invoke(RequestInterface $request, array $options)
- {
- if (isset($options['delay'])) {
- usleep($options['delay'] * 1000);
- }
-
- $easy = $this->factory->create($request, $options);
- curl_exec($easy->handle);
- $easy->errno = curl_errno($easy->handle);
-
- return CurlFactory::finish($this, $easy, $this->factory);
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/server/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
deleted file mode 100644
index 945d06e..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use GuzzleHttp\Promise as P;
-use GuzzleHttp\Promise\Promise;
-use GuzzleHttp\Psr7;
-use Psr\Http\Message\RequestInterface;
-
-/**
- * Returns an asynchronous response using curl_multi_* functions.
- *
- * When using the CurlMultiHandler, custom curl options can be specified as an
- * associative array of curl option constants mapping to values in the
- * **curl** key of the provided request options.
- *
- * @property resource $_mh Internal use only. Lazy loaded multi-handle.
- */
-class CurlMultiHandler
-{
- /** @var CurlFactoryInterface */
- private $factory;
- private $selectTimeout;
- private $active;
- private $handles = [];
- private $delays = [];
-
- /**
- * This handler accepts the following options:
- *
- * - handle_factory: An optional factory used to create curl handles
- * - select_timeout: Optional timeout (in seconds) to block before timing
- * out while selecting curl handles. Defaults to 1 second.
- *
- * @param array $options
- */
- public function __construct(array $options = [])
- {
- $this->factory = isset($options['handle_factory'])
- ? $options['handle_factory'] : new CurlFactory(50);
- $this->selectTimeout = isset($options['select_timeout'])
- ? $options['select_timeout'] : 1;
- }
-
- public function __get($name)
- {
- if ($name === '_mh') {
- return $this->_mh = curl_multi_init();
- }
-
- throw new \BadMethodCallException();
- }
-
- public function __destruct()
- {
- if (isset($this->_mh)) {
- curl_multi_close($this->_mh);
- unset($this->_mh);
- }
- }
-
- public function __invoke(RequestInterface $request, array $options)
- {
- $easy = $this->factory->create($request, $options);
- $id = (int) $easy->handle;
-
- $promise = new Promise(
- [$this, 'execute'],
- function () use ($id) { return $this->cancel($id); }
- );
-
- $this->addRequest(['easy' => $easy, 'deferred' => $promise]);
-
- return $promise;
- }
-
- /**
- * Ticks the curl event loop.
- */
- public function tick()
- {
- // Add any delayed handles if needed.
- if ($this->delays) {
- $currentTime = microtime(true);
- foreach ($this->delays as $id => $delay) {
- if ($currentTime >= $delay) {
- unset($this->delays[$id]);
- curl_multi_add_handle(
- $this->_mh,
- $this->handles[$id]['easy']->handle
- );
- }
- }
- }
-
- // Step through the task queue which may add additional requests.
- P\queue()->run();
-
- if ($this->active &&
- curl_multi_select($this->_mh, $this->selectTimeout) === -1
- ) {
- // Perform a usleep if a select returns -1.
- // See: https://bugs.php.net/bug.php?id=61141
- usleep(250);
- }
-
- while (curl_multi_exec($this->_mh, $this->active) === CURLM_CALL_MULTI_PERFORM);
-
- $this->processMessages();
- }
-
- /**
- * Runs until all outstanding connections have completed.
- */
- public function execute()
- {
- $queue = P\queue();
-
- while ($this->handles || !$queue->isEmpty()) {
- // If there are no transfers, then sleep for the next delay
- if (!$this->active && $this->delays) {
- usleep($this->timeToNext());
- }
- $this->tick();
- }
- }
-
- private function addRequest(array $entry)
- {
- $easy = $entry['easy'];
- $id = (int) $easy->handle;
- $this->handles[$id] = $entry;
- if (empty($easy->options['delay'])) {
- curl_multi_add_handle($this->_mh, $easy->handle);
- } else {
- $this->delays[$id] = microtime(true) + ($easy->options['delay'] / 1000);
- }
- }
-
- /**
- * Cancels a handle from sending and removes references to it.
- *
- * @param int $id Handle ID to cancel and remove.
- *
- * @return bool True on success, false on failure.
- */
- private function cancel($id)
- {
- // Cannot cancel if it has been processed.
- if (!isset($this->handles[$id])) {
- return false;
- }
-
- $handle = $this->handles[$id]['easy']->handle;
- unset($this->delays[$id], $this->handles[$id]);
- curl_multi_remove_handle($this->_mh, $handle);
- curl_close($handle);
-
- return true;
- }
-
- private function processMessages()
- {
- while ($done = curl_multi_info_read($this->_mh)) {
- $id = (int) $done['handle'];
- curl_multi_remove_handle($this->_mh, $done['handle']);
-
- if (!isset($this->handles[$id])) {
- // Probably was cancelled.
- continue;
- }
-
- $entry = $this->handles[$id];
- unset($this->handles[$id], $this->delays[$id]);
- $entry['easy']->errno = $done['result'];
- $entry['deferred']->resolve(
- CurlFactory::finish(
- $this,
- $entry['easy'],
- $this->factory
- )
- );
- }
- }
-
- private function timeToNext()
- {
- $currentTime = microtime(true);
- $nextTime = PHP_INT_MAX;
- foreach ($this->delays as $time) {
- if ($time < $nextTime) {
- $nextTime = $time;
- }
- }
-
- return max(0, $nextTime - $currentTime) * 1000000;
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/server/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php
deleted file mode 100644
index 7754e91..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use GuzzleHttp\Psr7\Response;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Represents a cURL easy handle and the data it populates.
- *
- * @internal
- */
-final class EasyHandle
-{
- /** @var resource cURL resource */
- public $handle;
-
- /** @var StreamInterface Where data is being written */
- public $sink;
-
- /** @var array Received HTTP headers so far */
- public $headers = [];
-
- /** @var ResponseInterface Received response (if any) */
- public $response;
-
- /** @var RequestInterface Request being sent */
- public $request;
-
- /** @var array Request options */
- public $options = [];
-
- /** @var int cURL error number (if any) */
- public $errno = 0;
-
- /** @var \Exception Exception during on_headers (if any) */
- public $onHeadersException;
-
- /**
- * Attach a response to the easy handle based on the received headers.
- *
- * @throws \RuntimeException if no headers have been received.
- */
- public function createResponse()
- {
- if (empty($this->headers)) {
- throw new \RuntimeException('No headers have been received');
- }
-
- // HTTP-version SP status-code SP reason-phrase
- $startLine = explode(' ', array_shift($this->headers), 3);
- $headers = \GuzzleHttp\headers_from_lines($this->headers);
- $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers);
-
- if (!empty($this->options['decode_content'])
- && isset($normalizedKeys['content-encoding'])
- ) {
- $headers['x-encoded-content-encoding']
- = $headers[$normalizedKeys['content-encoding']];
- unset($headers[$normalizedKeys['content-encoding']]);
- if (isset($normalizedKeys['content-length'])) {
- $headers['x-encoded-content-length']
- = $headers[$normalizedKeys['content-length']];
-
- $bodyLength = (int) $this->sink->getSize();
- if ($bodyLength) {
- $headers[$normalizedKeys['content-length']] = $bodyLength;
- } else {
- unset($headers[$normalizedKeys['content-length']]);
- }
- }
- }
-
- // Attach a response to the easy handle with the parsed headers.
- $this->response = new Response(
- $startLine[1],
- $headers,
- $this->sink,
- substr($startLine[0], 5),
- isset($startLine[2]) ? (string) $startLine[2] : null
- );
- }
-
- public function __get($name)
- {
- $msg = $name === 'handle'
- ? 'The EasyHandle has been released'
- : 'Invalid property: ' . $name;
- throw new \BadMethodCallException($msg);
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/server/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
deleted file mode 100644
index 7bbe735..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use GuzzleHttp\HandlerStack;
-use GuzzleHttp\Promise\PromiseInterface;
-use GuzzleHttp\Promise\RejectedPromise;
-use GuzzleHttp\TransferStats;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * Handler that returns responses or throw exceptions from a queue.
- */
-class MockHandler implements \Countable
-{
- private $queue;
- private $lastRequest;
- private $lastOptions;
- private $onFulfilled;
- private $onRejected;
-
- /**
- * Creates a new MockHandler that uses the default handler stack list of
- * middlewares.
- *
- * @param array $queue Array of responses, callables, or exceptions.
- * @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
- * @param callable $onRejected Callback to invoke when the return value is rejected.
- *
- * @return HandlerStack
- */
- public static function createWithMiddleware(
- array $queue = null,
- callable $onFulfilled = null,
- callable $onRejected = null
- ) {
- return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));
- }
-
- /**
- * The passed in value must be an array of
- * {@see Psr7\Http\Message\ResponseInterface} objects, Exceptions,
- * callables, or Promises.
- *
- * @param array $queue
- * @param callable $onFulfilled Callback to invoke when the return value is fulfilled.
- * @param callable $onRejected Callback to invoke when the return value is rejected.
- */
- public function __construct(
- array $queue = null,
- callable $onFulfilled = null,
- callable $onRejected = null
- ) {
- $this->onFulfilled = $onFulfilled;
- $this->onRejected = $onRejected;
-
- if ($queue) {
- call_user_func_array([$this, 'append'], $queue);
- }
- }
-
- public function __invoke(RequestInterface $request, array $options)
- {
- if (!$this->queue) {
- throw new \OutOfBoundsException('Mock queue is empty');
- }
-
- if (isset($options['delay'])) {
- usleep($options['delay'] * 1000);
- }
-
- $this->lastRequest = $request;
- $this->lastOptions = $options;
- $response = array_shift($this->queue);
-
- if (is_callable($response)) {
- $response = call_user_func($response, $request, $options);
- }
-
- $response = $response instanceof \Exception
- ? new RejectedPromise($response)
- : \GuzzleHttp\Promise\promise_for($response);
-
- return $response->then(
- function ($value) use ($request, $options) {
- $this->invokeStats($request, $options, $value);
- if ($this->onFulfilled) {
- call_user_func($this->onFulfilled, $value);
- }
- if (isset($options['sink'])) {
- $contents = (string) $value->getBody();
- $sink = $options['sink'];
-
- if (is_resource($sink)) {
- fwrite($sink, $contents);
- } elseif (is_string($sink)) {
- file_put_contents($sink, $contents);
- } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) {
- $sink->write($contents);
- }
- }
-
- return $value;
- },
- function ($reason) use ($request, $options) {
- $this->invokeStats($request, $options, null, $reason);
- if ($this->onRejected) {
- call_user_func($this->onRejected, $reason);
- }
- return new RejectedPromise($reason);
- }
- );
- }
-
- /**
- * Adds one or more variadic requests, exceptions, callables, or promises
- * to the queue.
- */
- public function append()
- {
- foreach (func_get_args() as $value) {
- if ($value instanceof ResponseInterface
- || $value instanceof \Exception
- || $value instanceof PromiseInterface
- || is_callable($value)
- ) {
- $this->queue[] = $value;
- } else {
- throw new \InvalidArgumentException('Expected a response or '
- . 'exception. Found ' . \GuzzleHttp\describe_type($value));
- }
- }
- }
-
- /**
- * Get the last received request.
- *
- * @return RequestInterface
- */
- public function getLastRequest()
- {
- return $this->lastRequest;
- }
-
- /**
- * Get the last received request options.
- *
- * @return RequestInterface
- */
- public function getLastOptions()
- {
- return $this->lastOptions;
- }
-
- /**
- * Returns the number of remaining items in the queue.
- *
- * @return int
- */
- public function count()
- {
- return count($this->queue);
- }
-
- private function invokeStats(
- RequestInterface $request,
- array $options,
- ResponseInterface $response = null,
- $reason = null
- ) {
- if (isset($options['on_stats'])) {
- $stats = new TransferStats($request, $response, 0, $reason);
- call_user_func($options['on_stats'], $stats);
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php b/server/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php
deleted file mode 100644
index f8b00be..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use GuzzleHttp\RequestOptions;
-use Psr\Http\Message\RequestInterface;
-
-/**
- * Provides basic proxies for handlers.
- */
-class Proxy
-{
- /**
- * Sends synchronous requests to a specific handler while sending all other
- * requests to another handler.
- *
- * @param callable $default Handler used for normal responses
- * @param callable $sync Handler used for synchronous responses.
- *
- * @return callable Returns the composed handler.
- */
- public static function wrapSync(
- callable $default,
- callable $sync
- ) {
- return function (RequestInterface $request, array $options) use ($default, $sync) {
- return empty($options[RequestOptions::SYNCHRONOUS])
- ? $default($request, $options)
- : $sync($request, $options);
- };
- }
-
- /**
- * Sends streaming requests to a streaming compatible handler while sending
- * all other requests to a default handler.
- *
- * This, for example, could be useful for taking advantage of the
- * performance benefits of curl while still supporting true streaming
- * through the StreamHandler.
- *
- * @param callable $default Handler used for non-streaming responses
- * @param callable $streaming Handler used for streaming responses
- *
- * @return callable Returns the composed handler.
- */
- public static function wrapStreaming(
- callable $default,
- callable $streaming
- ) {
- return function (RequestInterface $request, array $options) use ($default, $streaming) {
- return empty($options['stream'])
- ? $default($request, $options)
- : $streaming($request, $options);
- };
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/server/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
deleted file mode 100644
index 4972f54..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
+++ /dev/null
@@ -1,490 +0,0 @@
-<?php
-namespace GuzzleHttp\Handler;
-
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Exception\ConnectException;
-use GuzzleHttp\Promise\FulfilledPromise;
-use GuzzleHttp\Promise\RejectedPromise;
-use GuzzleHttp\Promise\PromiseInterface;
-use GuzzleHttp\Psr7;
-use GuzzleHttp\TransferStats;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\StreamInterface;
-
-/**
- * HTTP handler that uses PHP's HTTP stream wrapper.
- */
-class StreamHandler
-{
- private $lastHeaders = [];
-
- /**
- * Sends an HTTP request.
- *
- * @param RequestInterface $request Request to send.
- * @param array $options Request transfer options.
- *
- * @return PromiseInterface
- */
- public function __invoke(RequestInterface $request, array $options)
- {
- // Sleep if there is a delay specified.
- if (isset($options['delay'])) {
- usleep($options['delay'] * 1000);
- }
-
- $startTime = isset($options['on_stats']) ? microtime(true) : null;
-
- try {
- // Does not support the expect header.
- $request = $request->withoutHeader('Expect');
-
- // Append a content-length header if body size is zero to match
- // cURL's behavior.
- if (0 === $request->getBody()->getSize()) {
- $request = $request->withHeader('Content-Length', 0);
- }
-
- return $this->createResponse(
- $request,
- $options,
- $this->createStream($request, $options),
- $startTime
- );
- } catch (\InvalidArgumentException $e) {
- throw $e;
- } catch (\Exception $e) {
- // Determine if the error was a networking error.
- $message = $e->getMessage();
- // This list can probably get more comprehensive.
- if (strpos($message, 'getaddrinfo') // DNS lookup failed
- || strpos($message, 'Connection refused')
- || strpos($message, "couldn't connect to host") // error on HHVM
- ) {
- $e = new ConnectException($e->getMessage(), $request, $e);
- }
- $e = RequestException::wrapException($request, $e);
- $this->invokeStats($options, $request, $startTime, null, $e);
-
- return new RejectedPromise($e);
- }
- }
-
- private function invokeStats(
- array $options,
- RequestInterface $request,
- $startTime,
- ResponseInterface $response = null,
- $error = null
- ) {
- if (isset($options['on_stats'])) {
- $stats = new TransferStats(
- $request,
- $response,
- microtime(true) - $startTime,
- $error,
- []
- );
- call_user_func($options['on_stats'], $stats);
- }
- }
-
- private function createResponse(
- RequestInterface $request,
- array $options,
- $stream,
- $startTime
- ) {
- $hdrs = $this->lastHeaders;
- $this->lastHeaders = [];
- $parts = explode(' ', array_shift($hdrs), 3);
- $ver = explode('/', $parts[0])[1];
- $status = $parts[1];
- $reason = isset($parts[2]) ? $parts[2] : null;
- $headers = \GuzzleHttp\headers_from_lines($hdrs);
- list ($stream, $headers) = $this->checkDecode($options, $headers, $stream);
- $stream = Psr7\stream_for($stream);
- $sink = $stream;
-
- if (strcasecmp('HEAD', $request->getMethod())) {
- $sink = $this->createSink($stream, $options);
- }
-
- $response = new Psr7\Response($status, $headers, $sink, $ver, $reason);
-
- if (isset($options['on_headers'])) {
- try {
- $options['on_headers']($response);
- } catch (\Exception $e) {
- $msg = 'An error was encountered during the on_headers event';
- $ex = new RequestException($msg, $request, $response, $e);
- return new RejectedPromise($ex);
- }
- }
-
- // Do not drain when the request is a HEAD request because they have
- // no body.
- if ($sink !== $stream) {
- $this->drain(
- $stream,
- $sink,
- $response->getHeaderLine('Content-Length')
- );
- }
-
- $this->invokeStats($options, $request, $startTime, $response, null);
-
- return new FulfilledPromise($response);
- }
-
- private function createSink(StreamInterface $stream, array $options)
- {
- if (!empty($options['stream'])) {
- return $stream;
- }
-
- $sink = isset($options['sink'])
- ? $options['sink']
- : fopen('php://temp', 'r+');
-
- return is_string($sink)
- ? new Psr7\LazyOpenStream($sink, 'w+')
- : Psr7\stream_for($sink);
- }
-
- private function checkDecode(array $options, array $headers, $stream)
- {
- // Automatically decode responses when instructed.
- if (!empty($options['decode_content'])) {
- $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers);
- if (isset($normalizedKeys['content-encoding'])) {
- $encoding = $headers[$normalizedKeys['content-encoding']];
- if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') {
- $stream = new Psr7\InflateStream(
- Psr7\stream_for($stream)
- );
- $headers['x-encoded-content-encoding']
- = $headers[$normalizedKeys['content-encoding']];
- // Remove content-encoding header
- unset($headers[$normalizedKeys['content-encoding']]);
- // Fix content-length header
- if (isset($normalizedKeys['content-length'])) {
- $headers['x-encoded-content-length']
- = $headers[$normalizedKeys['content-length']];
-
- $length = (int) $stream->getSize();
- if ($length === 0) {
- unset($headers[$normalizedKeys['content-length']]);
- } else {
- $headers[$normalizedKeys['content-length']] = [$length];
- }
- }
- }
- }
- }
-
- return [$stream, $headers];
- }
-
- /**
- * Drains the source stream into the "sink" client option.
- *
- * @param StreamInterface $source
- * @param StreamInterface $sink
- * @param string $contentLength Header specifying the amount of
- * data to read.
- *
- * @return StreamInterface
- * @throws \RuntimeException when the sink option is invalid.
- */
- private function drain(
- StreamInterface $source,
- StreamInterface $sink,
- $contentLength
- ) {
- // If a content-length header is provided, then stop reading once
- // that number of bytes has been read. This can prevent infinitely
- // reading from a stream when dealing with servers that do not honor
- // Connection: Close headers.
- Psr7\copy_to_stream(
- $source,
- $sink,
- (strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1
- );
-
- $sink->seek(0);
- $source->close();
-
- return $sink;
- }
-
- /**
- * Create a resource and check to ensure it was created successfully
- *
- * @param callable $callback Callable that returns stream resource
- *
- * @return resource
- * @throws \RuntimeException on error
- */
- private function createResource(callable $callback)
- {
- $errors = null;
- set_error_handler(function ($_, $msg, $file, $line) use (&$errors) {
- $errors[] = [
- 'message' => $msg,
- 'file' => $file,
- 'line' => $line
- ];
- return true;
- });
-
- $resource = $callback();
- restore_error_handler();
-
- if (!$resource) {
- $message = 'Error creating resource: ';
- foreach ($errors as $err) {
- foreach ($err as $key => $value) {
- $message .= "[$key] $value" . PHP_EOL;
- }
- }
- throw new \RuntimeException(trim($message));
- }
-
- return $resource;
- }
-
- private function createStream(RequestInterface $request, array $options)
- {
- static $methods;
- if (!$methods) {
- $methods = array_flip(get_class_methods(__CLASS__));
- }
-
- // HTTP/1.1 streams using the PHP stream wrapper require a
- // Connection: close header
- if ($request->getProtocolVersion() == '1.1'
- && !$request->hasHeader('Connection')
- ) {
- $request = $request->withHeader('Connection', 'close');
- }
-
- // Ensure SSL is verified by default
- if (!isset($options['verify'])) {
- $options['verify'] = true;
- }
-
- $params = [];
- $context = $this->getDefaultContext($request, $options);
-
- if (isset($options['on_headers']) && !is_callable($options['on_headers'])) {
- throw new \InvalidArgumentException('on_headers must be callable');
- }
-
- if (!empty($options)) {
- foreach ($options as $key => $value) {
- $method = "add_{$key}";
- if (isset($methods[$method])) {
- $this->{$method}($request, $context, $value, $params);
- }
- }
- }
-
- if (isset($options['stream_context'])) {
- if (!is_array($options['stream_context'])) {
- throw new \InvalidArgumentException('stream_context must be an array');
- }
- $context = array_replace_recursive(
- $context,
- $options['stream_context']
- );
- }
-
- $context = $this->createResource(
- function () use ($context, $params) {
- return stream_context_create($context, $params);
- }
- );
-
- return $this->createResource(
- function () use ($request, &$http_response_header, $context) {
- $resource = fopen((string) $request->getUri()->withFragment(''), 'r', null, $context);
- $this->lastHeaders = $http_response_header;
- return $resource;
- }
- );
- }
-
- private function getDefaultContext(RequestInterface $request)
- {
- $headers = '';
- foreach ($request->getHeaders() as $name => $value) {
- foreach ($value as $val) {
- $headers .= "$name: $val\r\n";
- }
- }
-
- $context = [
- 'http' => [
- 'method' => $request->getMethod(),
- 'header' => $headers,
- 'protocol_version' => $request->getProtocolVersion(),
- 'ignore_errors' => true,
- 'follow_location' => 0,
- ],
- ];
-
- $body = (string) $request->getBody();
-
- if (!empty($body)) {
- $context['http']['content'] = $body;
- // Prevent the HTTP handler from adding a Content-Type header.
- if (!$request->hasHeader('Content-Type')) {
- $context['http']['header'] .= "Content-Type:\r\n";
- }
- }
-
- $context['http']['header'] = rtrim($context['http']['header']);
-
- return $context;
- }
-
- private function add_proxy(RequestInterface $request, &$options, $value, &$params)
- {
- if (!is_array($value)) {
- $options['http']['proxy'] = $value;
- } else {
- $scheme = $request->getUri()->getScheme();
- if (isset($value[$scheme])) {
- if (!isset($value['no'])
- || !\GuzzleHttp\is_host_in_noproxy(
- $request->getUri()->getHost(),
- $value['no']
- )
- ) {
- $options['http']['proxy'] = $value[$scheme];
- }
- }
- }
- }
-
- private function add_timeout(RequestInterface $request, &$options, $value, &$params)
- {
- if ($value > 0) {
- $options['http']['timeout'] = $value;
- }
- }
-
- private function add_verify(RequestInterface $request, &$options, $value, &$params)
- {
- if ($value === true) {
- // PHP 5.6 or greater will find the system cert by default. When
- // < 5.6, use the Guzzle bundled cacert.
- if (PHP_VERSION_ID < 50600) {
- $options['ssl']['cafile'] = \GuzzleHttp\default_ca_bundle();
- }
- } elseif (is_string($value)) {
- $options['ssl']['cafile'] = $value;
- if (!file_exists($value)) {
- throw new \RuntimeException("SSL CA bundle not found: $value");
- }
- } elseif ($value === false) {
- $options['ssl']['verify_peer'] = false;
- $options['ssl']['verify_peer_name'] = false;
- return;
- } else {
- throw new \InvalidArgumentException('Invalid verify request option');
- }
-
- $options['ssl']['verify_peer'] = true;
- $options['ssl']['verify_peer_name'] = true;
- $options['ssl']['allow_self_signed'] = false;
- }
-
- private function add_cert(RequestInterface $request, &$options, $value, &$params)
- {
- if (is_array($value)) {
- $options['ssl']['passphrase'] = $value[1];
- $value = $value[0];
- }
-
- if (!file_exists($value)) {
- throw new \RuntimeException("SSL certificate not found: {$value}");
- }
-
- $options['ssl']['local_cert'] = $value;
- }
-
- private function add_progress(RequestInterface $request, &$options, $value, &$params)
- {
- $this->addNotification(
- $params,
- function ($code, $a, $b, $c, $transferred, $total) use ($value) {
- if ($code == STREAM_NOTIFY_PROGRESS) {
- $value($total, $transferred, null, null);
- }
- }
- );
- }
-
- private function add_debug(RequestInterface $request, &$options, $value, &$params)
- {
- if ($value === false) {
- return;
- }
-
- static $map = [
- STREAM_NOTIFY_CONNECT => 'CONNECT',
- STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',
- STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT',
- STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS',
- STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS',
- STREAM_NOTIFY_REDIRECTED => 'REDIRECTED',
- STREAM_NOTIFY_PROGRESS => 'PROGRESS',
- STREAM_NOTIFY_FAILURE => 'FAILURE',
- STREAM_NOTIFY_COMPLETED => 'COMPLETED',
- STREAM_NOTIFY_RESOLVE => 'RESOLVE',
- ];
- static $args = ['severity', 'message', 'message_code',
- 'bytes_transferred', 'bytes_max'];
-
- $value = \GuzzleHttp\debug_resource($value);
- $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment('');
- $this->addNotification(
- $params,
- function () use ($ident, $value, $map, $args) {
- $passed = func_get_args();
- $code = array_shift($passed);
- fprintf($value, '<%s> [%s] ', $ident, $map[$code]);
- foreach (array_filter($passed) as $i => $v) {
- fwrite($value, $args[$i] . ': "' . $v . '" ');
- }
- fwrite($value, "\n");
- }
- );
- }
-
- private function addNotification(array &$params, callable $notify)
- {
- // Wrap the existing function if needed.
- if (!isset($params['notification'])) {
- $params['notification'] = $notify;
- } else {
- $params['notification'] = $this->callArray([
- $params['notification'],
- $notify
- ]);
- }
- }
-
- private function callArray(array $functions)
- {
- return function () use ($functions) {
- $args = func_get_args();
- foreach ($functions as $fn) {
- call_user_func_array($fn, $args);
- }
- };
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/server/vendor/guzzlehttp/guzzle/src/HandlerStack.php
deleted file mode 100644
index a72e38a..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/HandlerStack.php
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use Psr\Http\Message\RequestInterface;
-
-/**
- * Creates a composed Guzzle handler function by stacking middlewares on top of
- * an HTTP handler function.
- */
-class HandlerStack
-{
- /** @var callable */
- private $handler;
-
- /** @var array */
- private $stack = [];
-
- /** @var callable|null */
- private $cached;
-
- /**
- * Creates a default handler stack that can be used by clients.
- *
- * The returned handler will wrap the provided handler or use the most
- * appropriate default handler for you system. The returned HandlerStack has
- * support for cookies, redirects, HTTP error exceptions, and preparing a body
- * before sending.
- *
- * The returned handler stack can be passed to a client in the "handler"
- * option.
- *
- * @param callable $handler HTTP handler function to use with the stack. If no
- * handler is provided, the best handler for your
- * system will be utilized.
- *
- * @return HandlerStack
- */
- public static function create(callable $handler = null)
- {
- $stack = new self($handler ?: choose_handler());
- $stack->push(Middleware::httpErrors(), 'http_errors');
- $stack->push(Middleware::redirect(), 'allow_redirects');
- $stack->push(Middleware::cookies(), 'cookies');
- $stack->push(Middleware::prepareBody(), 'prepare_body');
-
- return $stack;
- }
-
- /**
- * @param callable $handler Underlying HTTP handler.
- */
- public function __construct(callable $handler = null)
- {
- $this->handler = $handler;
- }
-
- /**
- * Invokes the handler stack as a composed handler
- *
- * @param RequestInterface $request
- * @param array $options
- */
- public function __invoke(RequestInterface $request, array $options)
- {
- $handler = $this->resolve();
-
- return $handler($request, $options);
- }
-
- /**
- * Dumps a string representation of the stack.
- *
- * @return string
- */
- public function __toString()
- {
- $depth = 0;
- $stack = [];
- if ($this->handler) {
- $stack[] = "0) Handler: " . $this->debugCallable($this->handler);
- }
-
- $result = '';
- foreach (array_reverse($this->stack) as $tuple) {
- $depth++;
- $str = "{$depth}) Name: '{$tuple[1]}', ";
- $str .= "Function: " . $this->debugCallable($tuple[0]);
- $result = "> {$str}\n{$result}";
- $stack[] = $str;
- }
-
- foreach (array_keys($stack) as $k) {
- $result .= "< {$stack[$k]}\n";
- }
-
- return $result;
- }
-
- /**
- * Set the HTTP handler that actually returns a promise.
- *
- * @param callable $handler Accepts a request and array of options and
- * returns a Promise.
- */
- public function setHandler(callable $handler)
- {
- $this->handler = $handler;
- $this->cached = null;
- }
-
- /**
- * Returns true if the builder has a handler.
- *
- * @return bool
- */
- public function hasHandler()
- {
- return (bool) $this->handler;
- }
-
- /**
- * Unshift a middleware to the bottom of the stack.
- *
- * @param callable $middleware Middleware function
- * @param string $name Name to register for this middleware.
- */
- public function unshift(callable $middleware, $name = null)
- {
- array_unshift($this->stack, [$middleware, $name]);
- $this->cached = null;
- }
-
- /**
- * Push a middleware to the top of the stack.
- *
- * @param callable $middleware Middleware function
- * @param string $name Name to register for this middleware.
- */
- public function push(callable $middleware, $name = '')
- {
- $this->stack[] = [$middleware, $name];
- $this->cached = null;
- }
-
- /**
- * Add a middleware before another middleware by name.
- *
- * @param string $findName Middleware to find
- * @param callable $middleware Middleware function
- * @param string $withName Name to register for this middleware.
- */
- public function before($findName, callable $middleware, $withName = '')
- {
- $this->splice($findName, $withName, $middleware, true);
- }
-
- /**
- * Add a middleware after another middleware by name.
- *
- * @param string $findName Middleware to find
- * @param callable $middleware Middleware function
- * @param string $withName Name to register for this middleware.
- */
- public function after($findName, callable $middleware, $withName = '')
- {
- $this->splice($findName, $withName, $middleware, false);
- }
-
- /**
- * Remove a middleware by instance or name from the stack.
- *
- * @param callable|string $remove Middleware to remove by instance or name.
- */
- public function remove($remove)
- {
- $this->cached = null;
- $idx = is_callable($remove) ? 0 : 1;
- $this->stack = array_values(array_filter(
- $this->stack,
- function ($tuple) use ($idx, $remove) {
- return $tuple[$idx] !== $remove;
- }
- ));
- }
-
- /**
- * Compose the middleware and handler into a single callable function.
- *
- * @return callable
- */
- public function resolve()
- {
- if (!$this->cached) {
- if (!($prev = $this->handler)) {
- throw new \LogicException('No handler has been specified');
- }
-
- foreach (array_reverse($this->stack) as $fn) {
- $prev = $fn[0]($prev);
- }
-
- $this->cached = $prev;
- }
-
- return $this->cached;
- }
-
- /**
- * @param $name
- * @return int
- */
- private function findByName($name)
- {
- foreach ($this->stack as $k => $v) {
- if ($v[1] === $name) {
- return $k;
- }
- }
-
- throw new \InvalidArgumentException("Middleware not found: $name");
- }
-
- /**
- * Splices a function into the middleware list at a specific position.
- *
- * @param $findName
- * @param $withName
- * @param callable $middleware
- * @param $before
- */
- private function splice($findName, $withName, callable $middleware, $before)
- {
- $this->cached = null;
- $idx = $this->findByName($findName);
- $tuple = [$middleware, $withName];
-
- if ($before) {
- if ($idx === 0) {
- array_unshift($this->stack, $tuple);
- } else {
- $replacement = [$tuple, $this->stack[$idx]];
- array_splice($this->stack, $idx, 1, $replacement);
- }
- } elseif ($idx === count($this->stack) - 1) {
- $this->stack[] = $tuple;
- } else {
- $replacement = [$this->stack[$idx], $tuple];
- array_splice($this->stack, $idx, 1, $replacement);
- }
- }
-
- /**
- * Provides a debug string for a given callable.
- *
- * @param array|callable $fn Function to write as a string.
- *
- * @return string
- */
- private function debugCallable($fn)
- {
- if (is_string($fn)) {
- return "callable({$fn})";
- }
-
- if (is_array($fn)) {
- return is_string($fn[0])
- ? "callable({$fn[0]}::{$fn[1]})"
- : "callable(['" . get_class($fn[0]) . "', '{$fn[1]}'])";
- }
-
- return 'callable(' . spl_object_hash($fn) . ')';
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/server/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
deleted file mode 100644
index 6b090a9..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/MessageFormatter.php
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use Psr\Http\Message\MessageInterface;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * Formats log messages using variable substitutions for requests, responses,
- * and other transactional data.
- *
- * The following variable substitutions are supported:
- *
- * - {request}: Full HTTP request message
- * - {response}: Full HTTP response message
- * - {ts}: ISO 8601 date in GMT
- * - {date_iso_8601} ISO 8601 date in GMT
- * - {date_common_log} Apache common log date using the configured timezone.
- * - {host}: Host of the request
- * - {method}: Method of the request
- * - {uri}: URI of the request
- * - {host}: Host of the request
- * - {version}: Protocol version
- * - {target}: Request target of the request (path + query + fragment)
- * - {hostname}: Hostname of the machine that sent the request
- * - {code}: Status code of the response (if available)
- * - {phrase}: Reason phrase of the response (if available)
- * - {error}: Any error messages (if available)
- * - {req_header_*}: Replace `*` with the lowercased name of a request header to add to the message
- * - {res_header_*}: Replace `*` with the lowercased name of a response header to add to the message
- * - {req_headers}: Request headers
- * - {res_headers}: Response headers
- * - {req_body}: Request body
- * - {res_body}: Response body
- */
-class MessageFormatter
-{
- /**
- * Apache Common Log Format.
- * @link http://httpd.apache.org/docs/2.4/logs.html#common
- * @var string
- */
- const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}";
- const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}";
- const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}';
-
- /** @var string Template used to format log messages */
- private $template;
-
- /**
- * @param string $template Log message template
- */
- public function __construct($template = self::CLF)
- {
- $this->template = $template ?: self::CLF;
- }
-
- /**
- * Returns a formatted message string.
- *
- * @param RequestInterface $request Request that was sent
- * @param ResponseInterface $response Response that was received
- * @param \Exception $error Exception that was received
- *
- * @return string
- */
- public function format(
- RequestInterface $request,
- ResponseInterface $response = null,
- \Exception $error = null
- ) {
- $cache = [];
-
- return preg_replace_callback(
- '/{\s*([A-Za-z_\-\.0-9]+)\s*}/',
- function (array $matches) use ($request, $response, $error, &$cache) {
-
- if (isset($cache[$matches[1]])) {
- return $cache[$matches[1]];
- }
-
- $result = '';
- switch ($matches[1]) {
- case 'request':
- $result = Psr7\str($request);
- break;
- case 'response':
- $result = $response ? Psr7\str($response) : '';
- break;
- case 'req_headers':
- $result = trim($request->getMethod()
- . ' ' . $request->getRequestTarget())
- . ' HTTP/' . $request->getProtocolVersion() . "\r\n"
- . $this->headers($request);
- break;
- case 'res_headers':
- $result = $response ?
- sprintf(
- 'HTTP/%s %d %s',
- $response->getProtocolVersion(),
- $response->getStatusCode(),
- $response->getReasonPhrase()
- ) . "\r\n" . $this->headers($response)
- : 'NULL';
- break;
- case 'req_body':
- $result = $request->getBody();
- break;
- case 'res_body':
- $result = $response ? $response->getBody() : 'NULL';
- break;
- case 'ts':
- case 'date_iso_8601':
- $result = gmdate('c');
- break;
- case 'date_common_log':
- $result = date('d/M/Y:H:i:s O');
- break;
- case 'method':
- $result = $request->getMethod();
- break;
- case 'version':
- $result = $request->getProtocolVersion();
- break;
- case 'uri':
- case 'url':
- $result = $request->getUri();
- break;
- case 'target':
- $result = $request->getRequestTarget();
- break;
- case 'req_version':
- $result = $request->getProtocolVersion();
- break;
- case 'res_version':
- $result = $response
- ? $response->getProtocolVersion()
- : 'NULL';
- break;
- case 'host':
- $result = $request->getHeaderLine('Host');
- break;
- case 'hostname':
- $result = gethostname();
- break;
- case 'code':
- $result = $response ? $response->getStatusCode() : 'NULL';
- break;
- case 'phrase':
- $result = $response ? $response->getReasonPhrase() : 'NULL';
- break;
- case 'error':
- $result = $error ? $error->getMessage() : 'NULL';
- break;
- default:
- // handle prefixed dynamic headers
- if (strpos($matches[1], 'req_header_') === 0) {
- $result = $request->getHeaderLine(substr($matches[1], 11));
- } elseif (strpos($matches[1], 'res_header_') === 0) {
- $result = $response
- ? $response->getHeaderLine(substr($matches[1], 11))
- : 'NULL';
- }
- }
-
- $cache[$matches[1]] = $result;
- return $result;
- },
- $this->template
- );
- }
-
- private function headers(MessageInterface $message)
- {
- $result = '';
- foreach ($message->getHeaders() as $name => $values) {
- $result .= $name . ': ' . implode(', ', $values) . "\r\n";
- }
-
- return trim($result);
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Middleware.php b/server/vendor/guzzlehttp/guzzle/src/Middleware.php
deleted file mode 100644
index 449ab4b..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Middleware.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Cookie\CookieJarInterface;
-use GuzzleHttp\Exception\RequestException;
-use GuzzleHttp\Promise\RejectedPromise;
-use GuzzleHttp\Psr7;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Log\LoggerInterface;
-use Psr\Log\LogLevel;
-
-/**
- * Functions used to create and wrap handlers with handler middleware.
- */
-final class Middleware
-{
- /**
- * Middleware that adds cookies to requests.
- *
- * The options array must be set to a CookieJarInterface in order to use
- * cookies. This is typically handled for you by a client.
- *
- * @return callable Returns a function that accepts the next handler.
- */
- public static function cookies()
- {
- return function (callable $handler) {
- return function ($request, array $options) use ($handler) {
- if (empty($options['cookies'])) {
- return $handler($request, $options);
- } elseif (!($options['cookies'] instanceof CookieJarInterface)) {
- throw new \InvalidArgumentException('cookies must be an instance of GuzzleHttp\Cookie\CookieJarInterface');
- }
- $cookieJar = $options['cookies'];
- $request = $cookieJar->withCookieHeader($request);
- return $handler($request, $options)
- ->then(function ($response) use ($cookieJar, $request) {
- $cookieJar->extractCookies($request, $response);
- return $response;
- }
- );
- };
- };
- }
-
- /**
- * Middleware that throws exceptions for 4xx or 5xx responses when the
- * "http_error" request option is set to true.
- *
- * @return callable Returns a function that accepts the next handler.
- */
- public static function httpErrors()
- {
- return function (callable $handler) {
- return function ($request, array $options) use ($handler) {
- if (empty($options['http_errors'])) {
- return $handler($request, $options);
- }
- return $handler($request, $options)->then(
- function (ResponseInterface $response) use ($request, $handler) {
- $code = $response->getStatusCode();
- if ($code < 400) {
- return $response;
- }
- throw RequestException::create($request, $response);
- }
- );
- };
- };
- }
-
- /**
- * Middleware that pushes history data to an ArrayAccess container.
- *
- * @param array $container Container to hold the history (by reference).
- *
- * @return callable Returns a function that accepts the next handler.
- * @throws \InvalidArgumentException if container is not an array or ArrayAccess.
- */
- public static function history(&$container)
- {
- if (!is_array($container) && !$container instanceof \ArrayAccess) {
- throw new \InvalidArgumentException('history container must be an array or object implementing ArrayAccess');
- }
-
- return function (callable $handler) use (&$container) {
- return function ($request, array $options) use ($handler, &$container) {
- return $handler($request, $options)->then(
- function ($value) use ($request, &$container, $options) {
- $container[] = [
- 'request' => $request,
- 'response' => $value,
- 'error' => null,
- 'options' => $options
- ];
- return $value;
- },
- function ($reason) use ($request, &$container, $options) {
- $container[] = [
- 'request' => $request,
- 'response' => null,
- 'error' => $reason,
- 'options' => $options
- ];
- return new RejectedPromise($reason);
- }
- );
- };
- };
- }
-
- /**
- * Middleware that invokes a callback before and after sending a request.
- *
- * The provided listener cannot modify or alter the response. It simply
- * "taps" into the chain to be notified before returning the promise. The
- * before listener accepts a request and options array, and the after
- * listener accepts a request, options array, and response promise.
- *
- * @param callable $before Function to invoke before forwarding the request.
- * @param callable $after Function invoked after forwarding.
- *
- * @return callable Returns a function that accepts the next handler.
- */
- public static function tap(callable $before = null, callable $after = null)
- {
- return function (callable $handler) use ($before, $after) {
- return function ($request, array $options) use ($handler, $before, $after) {
- if ($before) {
- $before($request, $options);
- }
- $response = $handler($request, $options);
- if ($after) {
- $after($request, $options, $response);
- }
- return $response;
- };
- };
- }
-
- /**
- * Middleware that handles request redirects.
- *
- * @return callable Returns a function that accepts the next handler.
- */
- public static function redirect()
- {
- return function (callable $handler) {
- return new RedirectMiddleware($handler);
- };
- }
-
- /**
- * Middleware that retries requests based on the boolean result of
- * invoking the provided "decider" function.
- *
- * If no delay function is provided, a simple implementation of exponential
- * backoff will be utilized.
- *
- * @param callable $decider Function that accepts the number of retries,
- * a request, [response], and [exception] and
- * returns true if the request is to be retried.
- * @param callable $delay Function that accepts the number of retries and
- * returns the number of milliseconds to delay.
- *
- * @return callable Returns a function that accepts the next handler.
- */
- public static function retry(callable $decider, callable $delay = null)
- {
- return function (callable $handler) use ($decider, $delay) {
- return new RetryMiddleware($decider, $handler, $delay);
- };
- }
-
- /**
- * Middleware that logs requests, responses, and errors using a message
- * formatter.
- *
- * @param LoggerInterface $logger Logs messages.
- * @param MessageFormatter $formatter Formatter used to create message strings.
- * @param string $logLevel Level at which to log requests.
- *
- * @return callable Returns a function that accepts the next handler.
- */
- public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = LogLevel::INFO)
- {
- return function (callable $handler) use ($logger, $formatter, $logLevel) {
- return function ($request, array $options) use ($handler, $logger, $formatter, $logLevel) {
- return $handler($request, $options)->then(
- function ($response) use ($logger, $request, $formatter, $logLevel) {
- $message = $formatter->format($request, $response);
- $logger->log($logLevel, $message);
- return $response;
- },
- function ($reason) use ($logger, $request, $formatter) {
- $response = $reason instanceof RequestException
- ? $reason->getResponse()
- : null;
- $message = $formatter->format($request, $response, $reason);
- $logger->notice($message);
- return \GuzzleHttp\Promise\rejection_for($reason);
- }
- );
- };
- };
- }
-
- /**
- * This middleware adds a default content-type if possible, a default
- * content-length or transfer-encoding header, and the expect header.
- *
- * @return callable
- */
- public static function prepareBody()
- {
- return function (callable $handler) {
- return new PrepareBodyMiddleware($handler);
- };
- }
-
- /**
- * Middleware that applies a map function to the request before passing to
- * the next handler.
- *
- * @param callable $fn Function that accepts a RequestInterface and returns
- * a RequestInterface.
- * @return callable
- */
- public static function mapRequest(callable $fn)
- {
- return function (callable $handler) use ($fn) {
- return function ($request, array $options) use ($handler, $fn) {
- return $handler($fn($request), $options);
- };
- };
- }
-
- /**
- * Middleware that applies a map function to the resolved promise's
- * response.
- *
- * @param callable $fn Function that accepts a ResponseInterface and
- * returns a ResponseInterface.
- * @return callable
- */
- public static function mapResponse(callable $fn)
- {
- return function (callable $handler) use ($fn) {
- return function ($request, array $options) use ($handler, $fn) {
- return $handler($request, $options)->then($fn);
- };
- };
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/Pool.php b/server/vendor/guzzlehttp/guzzle/src/Pool.php
deleted file mode 100644
index 8f1be33..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/Pool.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Promise\PromisorInterface;
-use Psr\Http\Message\RequestInterface;
-use GuzzleHttp\Promise\EachPromise;
-
-/**
- * Sends and iterator of requests concurrently using a capped pool size.
- *
- * The pool will read from an iterator until it is cancelled or until the
- * iterator is consumed. When a request is yielded, the request is sent after
- * applying the "request_options" request options (if provided in the ctor).
- *
- * When a function is yielded by the iterator, the function is provided the
- * "request_options" array that should be merged on top of any existing
- * options, and the function MUST then return a wait-able promise.
- */
-class Pool implements PromisorInterface
-{
- /** @var EachPromise */
- private $each;
-
- /**
- * @param ClientInterface $client Client used to send the requests.
- * @param array|\Iterator $requests Requests or functions that return
- * requests to send concurrently.
- * @param array $config Associative array of options
- * - concurrency: (int) Maximum number of requests to send concurrently
- * - options: Array of request options to apply to each request.
- * - fulfilled: (callable) Function to invoke when a request completes.
- * - rejected: (callable) Function to invoke when a request is rejected.
- */
- public function __construct(
- ClientInterface $client,
- $requests,
- array $config = []
- ) {
- // Backwards compatibility.
- if (isset($config['pool_size'])) {
- $config['concurrency'] = $config['pool_size'];
- } elseif (!isset($config['concurrency'])) {
- $config['concurrency'] = 25;
- }
-
- if (isset($config['options'])) {
- $opts = $config['options'];
- unset($config['options']);
- } else {
- $opts = [];
- }
-
- $iterable = \GuzzleHttp\Promise\iter_for($requests);
- $requests = function () use ($iterable, $client, $opts) {
- foreach ($iterable as $key => $rfn) {
- if ($rfn instanceof RequestInterface) {
- yield $key => $client->sendAsync($rfn, $opts);
- } elseif (is_callable($rfn)) {
- yield $key => $rfn($opts);
- } else {
- throw new \InvalidArgumentException('Each value yielded by '
- . 'the iterator must be a Psr7\Http\Message\RequestInterface '
- . 'or a callable that returns a promise that fulfills '
- . 'with a Psr7\Message\Http\ResponseInterface object.');
- }
- }
- };
-
- $this->each = new EachPromise($requests(), $config);
- }
-
- public function promise()
- {
- return $this->each->promise();
- }
-
- /**
- * Sends multiple requests concurrently and returns an array of responses
- * and exceptions that uses the same ordering as the provided requests.
- *
- * IMPORTANT: This method keeps every request and response in memory, and
- * as such, is NOT recommended when sending a large number or an
- * indeterminate number of requests concurrently.
- *
- * @param ClientInterface $client Client used to send the requests
- * @param array|\Iterator $requests Requests to send concurrently.
- * @param array $options Passes through the options available in
- * {@see GuzzleHttp\Pool::__construct}
- *
- * @return array Returns an array containing the response or an exception
- * in the same order that the requests were sent.
- * @throws \InvalidArgumentException if the event format is incorrect.
- */
- public static function batch(
- ClientInterface $client,
- $requests,
- array $options = []
- ) {
- $res = [];
- self::cmpCallback($options, 'fulfilled', $res);
- self::cmpCallback($options, 'rejected', $res);
- $pool = new static($client, $requests, $options);
- $pool->promise()->wait();
- ksort($res);
-
- return $res;
- }
-
- private static function cmpCallback(array &$options, $name, array &$results)
- {
- if (!isset($options[$name])) {
- $options[$name] = function ($v, $k) use (&$results) {
- $results[$k] = $v;
- };
- } else {
- $currentFn = $options[$name];
- $options[$name] = function ($v, $k) use (&$results, $currentFn) {
- $currentFn($v, $k);
- $results[$k] = $v;
- };
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/server/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
deleted file mode 100644
index e6d176b..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Promise\PromiseInterface;
-use GuzzleHttp\Psr7;
-use Psr\Http\Message\RequestInterface;
-
-/**
- * Prepares requests that contain a body, adding the Content-Length,
- * Content-Type, and Expect headers.
- */
-class PrepareBodyMiddleware
-{
- /** @var callable */
- private $nextHandler;
-
- /** @var array */
- private static $skipMethods = ['GET' => true, 'HEAD' => true];
-
- /**
- * @param callable $nextHandler Next handler to invoke.
- */
- public function __construct(callable $nextHandler)
- {
- $this->nextHandler = $nextHandler;
- }
-
- /**
- * @param RequestInterface $request
- * @param array $options
- *
- * @return PromiseInterface
- */
- public function __invoke(RequestInterface $request, array $options)
- {
- $fn = $this->nextHandler;
-
- // Don't do anything if the request has no body.
- if (isset(self::$skipMethods[$request->getMethod()])
- || $request->getBody()->getSize() === 0
- ) {
- return $fn($request, $options);
- }
-
- $modify = [];
-
- // Add a default content-type if possible.
- if (!$request->hasHeader('Content-Type')) {
- if ($uri = $request->getBody()->getMetadata('uri')) {
- if ($type = Psr7\mimetype_from_filename($uri)) {
- $modify['set_headers']['Content-Type'] = $type;
- }
- }
- }
-
- // Add a default content-length or transfer-encoding header.
- if (!isset(self::$skipMethods[$request->getMethod()])
- && !$request->hasHeader('Content-Length')
- && !$request->hasHeader('Transfer-Encoding')
- ) {
- $size = $request->getBody()->getSize();
- if ($size !== null) {
- $modify['set_headers']['Content-Length'] = $size;
- } else {
- $modify['set_headers']['Transfer-Encoding'] = 'chunked';
- }
- }
-
- // Add the expect header if needed.
- $this->addExpectHeader($request, $options, $modify);
-
- return $fn(Psr7\modify_request($request, $modify), $options);
- }
-
- private function addExpectHeader(
- RequestInterface $request,
- array $options,
- array &$modify
- ) {
- // Determine if the Expect header should be used
- if ($request->hasHeader('Expect')) {
- return;
- }
-
- $expect = isset($options['expect']) ? $options['expect'] : null;
-
- // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0
- if ($expect === false || $request->getProtocolVersion() < 1.1) {
- return;
- }
-
- // The expect header is unconditionally enabled
- if ($expect === true) {
- $modify['set_headers']['Expect'] = '100-Continue';
- return;
- }
-
- // By default, send the expect header when the payload is > 1mb
- if ($expect === null) {
- $expect = 1048576;
- }
-
- // Always add if the body cannot be rewound, the size cannot be
- // determined, or the size is greater than the cutoff threshold
- $body = $request->getBody();
- $size = $body->getSize();
-
- if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {
- $modify['set_headers']['Expect'] = '100-Continue';
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/server/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
deleted file mode 100644
index 5613f6e..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Exception\BadResponseException;
-use GuzzleHttp\Exception\TooManyRedirectsException;
-use GuzzleHttp\Promise\PromiseInterface;
-use GuzzleHttp\Psr7;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\UriInterface;
-
-/**
- * Request redirect middleware.
- *
- * Apply this middleware like other middleware using
- * {@see GuzzleHttp\Middleware::redirect()}.
- */
-class RedirectMiddleware
-{
- const HISTORY_HEADER = 'X-Guzzle-Redirect-History';
-
- public static $defaultSettings = [
- 'max' => 5,
- 'protocols' => ['http', 'https'],
- 'strict' => false,
- 'referer' => false,
- 'track_redirects' => false,
- ];
-
- /** @var callable */
- private $nextHandler;
-
- /**
- * @param callable $nextHandler Next handler to invoke.
- */
- public function __construct(callable $nextHandler)
- {
- $this->nextHandler = $nextHandler;
- }
-
- /**
- * @param RequestInterface $request
- * @param array $options
- *
- * @return PromiseInterface
- */
- public function __invoke(RequestInterface $request, array $options)
- {
- $fn = $this->nextHandler;
-
- if (empty($options['allow_redirects'])) {
- return $fn($request, $options);
- }
-
- if ($options['allow_redirects'] === true) {
- $options['allow_redirects'] = self::$defaultSettings;
- } elseif (!is_array($options['allow_redirects'])) {
- throw new \InvalidArgumentException('allow_redirects must be true, false, or array');
- } else {
- // Merge the default settings with the provided settings
- $options['allow_redirects'] += self::$defaultSettings;
- }
-
- if (empty($options['allow_redirects']['max'])) {
- return $fn($request, $options);
- }
-
- return $fn($request, $options)
- ->then(function (ResponseInterface $response) use ($request, $options) {
- return $this->checkRedirect($request, $options, $response);
- });
- }
-
- /**
- * @param RequestInterface $request
- * @param array $options
- * @param ResponseInterface|PromiseInterface $response
- *
- * @return ResponseInterface|PromiseInterface
- */
- public function checkRedirect(
- RequestInterface $request,
- array $options,
- ResponseInterface $response
- ) {
- if (substr($response->getStatusCode(), 0, 1) != '3'
- || !$response->hasHeader('Location')
- ) {
- return $response;
- }
-
- $this->guardMax($request, $options);
- $nextRequest = $this->modifyRequest($request, $options, $response);
-
- if (isset($options['allow_redirects']['on_redirect'])) {
- call_user_func(
- $options['allow_redirects']['on_redirect'],
- $request,
- $response,
- $nextRequest->getUri()
- );
- }
-
- /** @var PromiseInterface|ResponseInterface $promise */
- $promise = $this($nextRequest, $options);
-
- // Add headers to be able to track history of redirects.
- if (!empty($options['allow_redirects']['track_redirects'])) {
- return $this->withTracking(
- $promise,
- (string) $nextRequest->getUri()
- );
- }
-
- return $promise;
- }
-
- private function withTracking(PromiseInterface $promise, $uri)
- {
- return $promise->then(
- function (ResponseInterface $response) use ($uri) {
- // Note that we are pushing to the front of the list as this
- // would be an earlier response than what is currently present
- // in the history header.
- $header = $response->getHeader(self::HISTORY_HEADER);
- array_unshift($header, $uri);
- return $response->withHeader(self::HISTORY_HEADER, $header);
- }
- );
- }
-
- private function guardMax(RequestInterface $request, array &$options)
- {
- $current = isset($options['__redirect_count'])
- ? $options['__redirect_count']
- : 0;
- $options['__redirect_count'] = $current + 1;
- $max = $options['allow_redirects']['max'];
-
- if ($options['__redirect_count'] > $max) {
- throw new TooManyRedirectsException(
- "Will not follow more than {$max} redirects",
- $request
- );
- }
- }
-
- /**
- * @param RequestInterface $request
- * @param array $options
- * @param ResponseInterface $response
- *
- * @return RequestInterface
- */
- public function modifyRequest(
- RequestInterface $request,
- array $options,
- ResponseInterface $response
- ) {
- // Request modifications to apply.
- $modify = [];
- $protocols = $options['allow_redirects']['protocols'];
-
- // Use a GET request if this is an entity enclosing request and we are
- // not forcing RFC compliance, but rather emulating what all browsers
- // would do.
- $statusCode = $response->getStatusCode();
- if ($statusCode == 303 ||
- ($statusCode <= 302 && $request->getBody() && !$options['allow_redirects']['strict'])
- ) {
- $modify['method'] = 'GET';
- $modify['body'] = '';
- }
-
- $modify['uri'] = $this->redirectUri($request, $response, $protocols);
- Psr7\rewind_body($request);
-
- // Add the Referer header if it is told to do so and only
- // add the header if we are not redirecting from https to http.
- if ($options['allow_redirects']['referer']
- && $modify['uri']->getScheme() === $request->getUri()->getScheme()
- ) {
- $uri = $request->getUri()->withUserInfo('', '');
- $modify['set_headers']['Referer'] = (string) $uri;
- } else {
- $modify['remove_headers'][] = 'Referer';
- }
-
- // Remove Authorization header if host is different.
- if ($request->getUri()->getHost() !== $modify['uri']->getHost()) {
- $modify['remove_headers'][] = 'Authorization';
- }
-
- return Psr7\modify_request($request, $modify);
- }
-
- /**
- * Set the appropriate URL on the request based on the location header
- *
- * @param RequestInterface $request
- * @param ResponseInterface $response
- * @param array $protocols
- *
- * @return UriInterface
- */
- private function redirectUri(
- RequestInterface $request,
- ResponseInterface $response,
- array $protocols
- ) {
- $location = Psr7\UriResolver::resolve(
- $request->getUri(),
- new Psr7\Uri($response->getHeaderLine('Location'))
- );
-
- // Ensure that the redirect URI is allowed based on the protocols.
- if (!in_array($location->getScheme(), $protocols)) {
- throw new BadResponseException(
- sprintf(
- 'Redirect URI, %s, does not use one of the allowed redirect protocols: %s',
- $location,
- implode(', ', $protocols)
- ),
- $request,
- $response
- );
- }
-
- return $location;
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/server/vendor/guzzlehttp/guzzle/src/RequestOptions.php
deleted file mode 100644
index 60e53f5..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/RequestOptions.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * This class contains a list of built-in Guzzle request options.
- *
- * More documentation for each option can be found at http://guzzlephp.org/.
- *
- * @link http://docs.guzzlephp.org/en/v6/request-options.html
- */
-final class RequestOptions
-{
- /**
- * allow_redirects: (bool|array) Controls redirect behavior. Pass false
- * to disable redirects, pass true to enable redirects, pass an
- * associative to provide custom redirect settings. Defaults to "false".
- * This option only works if your handler has the RedirectMiddleware. When
- * passing an associative array, you can provide the following key value
- * pairs:
- *
- * - max: (int, default=5) maximum number of allowed redirects.
- * - strict: (bool, default=false) Set to true to use strict redirects
- * meaning redirect POST requests with POST requests vs. doing what most
- * browsers do which is redirect POST requests with GET requests
- * - referer: (bool, default=true) Set to false to disable the Referer
- * header.
- * - protocols: (array, default=['http', 'https']) Allowed redirect
- * protocols.
- * - on_redirect: (callable) PHP callable that is invoked when a redirect
- * is encountered. The callable is invoked with the request, the redirect
- * response that was received, and the effective URI. Any return value
- * from the on_redirect function is ignored.
- */
- const ALLOW_REDIRECTS = 'allow_redirects';
-
- /**
- * auth: (array) Pass an array of HTTP authentication parameters to use
- * with the request. The array must contain the username in index [0],
- * the password in index [1], and you can optionally provide a built-in
- * authentication type in index [2]. Pass null to disable authentication
- * for a request.
- */
- const AUTH = 'auth';
-
- /**
- * body: (resource|string|null|int|float|StreamInterface|callable|\Iterator)
- * Body to send in the request.
- */
- const BODY = 'body';
-
- /**
- * cert: (string|array) Set to a string to specify the path to a file
- * containing a PEM formatted SSL client side certificate. If a password
- * is required, then set cert to an array containing the path to the PEM
- * file in the first array element followed by the certificate password
- * in the second array element.
- */
- const CERT = 'cert';
-
- /**
- * cookies: (bool|GuzzleHttp\Cookie\CookieJarInterface, default=false)
- * Specifies whether or not cookies are used in a request or what cookie
- * jar to use or what cookies to send. This option only works if your
- * handler has the `cookie` middleware. Valid values are `false` and
- * an instance of {@see GuzzleHttp\Cookie\CookieJarInterface}.
- */
- const COOKIES = 'cookies';
-
- /**
- * connect_timeout: (float, default=0) Float describing the number of
- * seconds to wait while trying to connect to a server. Use 0 to wait
- * indefinitely (the default behavior).
- */
- const CONNECT_TIMEOUT = 'connect_timeout';
-
- /**
- * debug: (bool|resource) Set to true or set to a PHP stream returned by
- * fopen() enable debug output with the HTTP handler used to send a
- * request.
- */
- const DEBUG = 'debug';
-
- /**
- * decode_content: (bool, default=true) Specify whether or not
- * Content-Encoding responses (gzip, deflate, etc.) are automatically
- * decoded.
- */
- const DECODE_CONTENT = 'decode_content';
-
- /**
- * delay: (int) The amount of time to delay before sending in milliseconds.
- */
- const DELAY = 'delay';
-
- /**
- * expect: (bool|integer) Controls the behavior of the
- * "Expect: 100-Continue" header.
- *
- * Set to `true` to enable the "Expect: 100-Continue" header for all
- * requests that sends a body. Set to `false` to disable the
- * "Expect: 100-Continue" header for all requests. Set to a number so that
- * the size of the payload must be greater than the number in order to send
- * the Expect header. Setting to a number will send the Expect header for
- * all requests in which the size of the payload cannot be determined or
- * where the body is not rewindable.
- *
- * By default, Guzzle will add the "Expect: 100-Continue" header when the
- * size of the body of a request is greater than 1 MB and a request is
- * using HTTP/1.1.
- */
- const EXPECT = 'expect';
-
- /**
- * form_params: (array) Associative array of form field names to values
- * where each value is a string or array of strings. Sets the Content-Type
- * header to application/x-www-form-urlencoded when no Content-Type header
- * is already present.
- */
- const FORM_PARAMS = 'form_params';
-
- /**
- * headers: (array) Associative array of HTTP headers. Each value MUST be
- * a string or array of strings.
- */
- const HEADERS = 'headers';
-
- /**
- * http_errors: (bool, default=true) Set to false to disable exceptions
- * when a non- successful HTTP response is received. By default,
- * exceptions will be thrown for 4xx and 5xx responses. This option only
- * works if your handler has the `httpErrors` middleware.
- */
- const HTTP_ERRORS = 'http_errors';
-
- /**
- * json: (mixed) Adds JSON data to a request. The provided value is JSON
- * encoded and a Content-Type header of application/json will be added to
- * the request if no Content-Type header is already present.
- */
- const JSON = 'json';
-
- /**
- * multipart: (array) Array of associative arrays, each containing a
- * required "name" key mapping to the form field, name, a required
- * "contents" key mapping to a StreamInterface|resource|string, an
- * optional "headers" associative array of custom headers, and an
- * optional "filename" key mapping to a string to send as the filename in
- * the part. If no "filename" key is present, then no "filename" attribute
- * will be added to the part.
- */
- const MULTIPART = 'multipart';
-
- /**
- * on_headers: (callable) A callable that is invoked when the HTTP headers
- * of the response have been received but the body has not yet begun to
- * download.
- */
- const ON_HEADERS = 'on_headers';
-
- /**
- * on_stats: (callable) allows you to get access to transfer statistics of
- * a request and access the lower level transfer details of the handler
- * associated with your client. ``on_stats`` is a callable that is invoked
- * when a handler has finished sending a request. The callback is invoked
- * with transfer statistics about the request, the response received, or
- * the error encountered. Included in the data is the total amount of time
- * taken to send the request.
- */
- const ON_STATS = 'on_stats';
-
- /**
- * progress: (callable) Defines a function to invoke when transfer
- * progress is made. The function accepts the following positional
- * arguments: the total number of bytes expected to be downloaded, the
- * number of bytes downloaded so far, the number of bytes expected to be
- * uploaded, the number of bytes uploaded so far.
- */
- const PROGRESS = 'progress';
-
- /**
- * proxy: (string|array) Pass a string to specify an HTTP proxy, or an
- * array to specify different proxies for different protocols (where the
- * key is the protocol and the value is a proxy string).
- */
- const PROXY = 'proxy';
-
- /**
- * query: (array|string) Associative array of query string values to add
- * to the request. This option uses PHP's http_build_query() to create
- * the string representation. Pass a string value if you need more
- * control than what this method provides
- */
- const QUERY = 'query';
-
- /**
- * sink: (resource|string|StreamInterface) Where the data of the
- * response is written to. Defaults to a PHP temp stream. Providing a
- * string will write data to a file by the given name.
- */
- const SINK = 'sink';
-
- /**
- * synchronous: (bool) Set to true to inform HTTP handlers that you intend
- * on waiting on the response. This can be useful for optimizations. Note
- * that a promise is still returned if you are using one of the async
- * client methods.
- */
- const SYNCHRONOUS = 'synchronous';
-
- /**
- * ssl_key: (array|string) Specify the path to a file containing a private
- * SSL key in PEM format. If a password is required, then set to an array
- * containing the path to the SSL key in the first array element followed
- * by the password required for the certificate in the second element.
- */
- const SSL_KEY = 'ssl_key';
-
- /**
- * stream: Set to true to attempt to stream a response rather than
- * download it all up-front.
- */
- const STREAM = 'stream';
-
- /**
- * verify: (bool|string, default=true) Describes the SSL certificate
- * verification behavior of a request. Set to true to enable SSL
- * certificate verification using the system CA bundle when available
- * (the default). Set to false to disable certificate verification (this
- * is insecure!). Set to a string to provide the path to a CA bundle on
- * disk to enable verification using a custom certificate.
- */
- const VERIFY = 'verify';
-
- /**
- * timeout: (float, default=0) Float describing the timeout of the
- * request in seconds. Use 0 to wait indefinitely (the default behavior).
- */
- const TIMEOUT = 'timeout';
-
- /**
- * version: (float) Specifies the HTTP protocol version to attempt to use.
- */
- const VERSION = 'version';
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/server/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
deleted file mode 100644
index db0f222..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Promise\PromiseInterface;
-use GuzzleHttp\Promise\RejectedPromise;
-use GuzzleHttp\Psr7;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * Middleware that retries requests based on the boolean result of
- * invoking the provided "decider" function.
- */
-class RetryMiddleware
-{
- /** @var callable */
- private $nextHandler;
-
- /** @var callable */
- private $decider;
-
- /**
- * @param callable $decider Function that accepts the number of retries,
- * a request, [response], and [exception] and
- * returns true if the request is to be
- * retried.
- * @param callable $nextHandler Next handler to invoke.
- * @param callable $delay Function that accepts the number of retries
- * and [response] and returns the number of
- * milliseconds to delay.
- */
- public function __construct(
- callable $decider,
- callable $nextHandler,
- callable $delay = null
- ) {
- $this->decider = $decider;
- $this->nextHandler = $nextHandler;
- $this->delay = $delay ?: __CLASS__ . '::exponentialDelay';
- }
-
- /**
- * Default exponential backoff delay function.
- *
- * @param $retries
- *
- * @return int
- */
- public static function exponentialDelay($retries)
- {
- return (int) pow(2, $retries - 1);
- }
-
- /**
- * @param RequestInterface $request
- * @param array $options
- *
- * @return PromiseInterface
- */
- public function __invoke(RequestInterface $request, array $options)
- {
- if (!isset($options['retries'])) {
- $options['retries'] = 0;
- }
-
- $fn = $this->nextHandler;
- return $fn($request, $options)
- ->then(
- $this->onFulfilled($request, $options),
- $this->onRejected($request, $options)
- );
- }
-
- private function onFulfilled(RequestInterface $req, array $options)
- {
- return function ($value) use ($req, $options) {
- if (!call_user_func(
- $this->decider,
- $options['retries'],
- $req,
- $value,
- null
- )) {
- return $value;
- }
- return $this->doRetry($req, $options, $value);
- };
- }
-
- private function onRejected(RequestInterface $req, array $options)
- {
- return function ($reason) use ($req, $options) {
- if (!call_user_func(
- $this->decider,
- $options['retries'],
- $req,
- null,
- $reason
- )) {
- return new RejectedPromise($reason);
- }
- return $this->doRetry($req, $options);
- };
- }
-
- private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null)
- {
- $options['delay'] = call_user_func($this->delay, ++$options['retries'], $response);
-
- return $this($request, $options);
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/TransferStats.php b/server/vendor/guzzlehttp/guzzle/src/TransferStats.php
deleted file mode 100644
index 15f717e..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/TransferStats.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\UriInterface;
-
-/**
- * Represents data at the point after it was transferred either successfully
- * or after a network error.
- */
-final class TransferStats
-{
- private $request;
- private $response;
- private $transferTime;
- private $handlerStats;
- private $handlerErrorData;
-
- /**
- * @param RequestInterface $request Request that was sent.
- * @param ResponseInterface $response Response received (if any)
- * @param null $transferTime Total handler transfer time.
- * @param mixed $handlerErrorData Handler error data.
- * @param array $handlerStats Handler specific stats.
- */
- public function __construct(
- RequestInterface $request,
- ResponseInterface $response = null,
- $transferTime = null,
- $handlerErrorData = null,
- $handlerStats = []
- ) {
- $this->request = $request;
- $this->response = $response;
- $this->transferTime = $transferTime;
- $this->handlerErrorData = $handlerErrorData;
- $this->handlerStats = $handlerStats;
- }
-
- /**
- * @return RequestInterface
- */
- public function getRequest()
- {
- return $this->request;
- }
-
- /**
- * Returns the response that was received (if any).
- *
- * @return ResponseInterface|null
- */
- public function getResponse()
- {
- return $this->response;
- }
-
- /**
- * Returns true if a response was received.
- *
- * @return bool
- */
- public function hasResponse()
- {
- return $this->response !== null;
- }
-
- /**
- * Gets handler specific error data.
- *
- * This might be an exception, a integer representing an error code, or
- * anything else. Relying on this value assumes that you know what handler
- * you are using.
- *
- * @return mixed
- */
- public function getHandlerErrorData()
- {
- return $this->handlerErrorData;
- }
-
- /**
- * Get the effective URI the request was sent to.
- *
- * @return UriInterface
- */
- public function getEffectiveUri()
- {
- return $this->request->getUri();
- }
-
- /**
- * Get the estimated time the request was being transferred by the handler.
- *
- * @return float Time in seconds.
- */
- public function getTransferTime()
- {
- return $this->transferTime;
- }
-
- /**
- * Gets an array of all of the handler specific transfer data.
- *
- * @return array
- */
- public function getHandlerStats()
- {
- return $this->handlerStats;
- }
-
- /**
- * Get a specific handler statistic from the handler by name.
- *
- * @param string $stat Handler specific transfer stat to retrieve.
- *
- * @return mixed|null
- */
- public function getHandlerStat($stat)
- {
- return isset($this->handlerStats[$stat])
- ? $this->handlerStats[$stat]
- : null;
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/UriTemplate.php b/server/vendor/guzzlehttp/guzzle/src/UriTemplate.php
deleted file mode 100644
index 0b1623e..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/UriTemplate.php
+++ /dev/null
@@ -1,241 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-/**
- * Expands URI templates. Userland implementation of PECL uri_template.
- *
- * @link http://tools.ietf.org/html/rfc6570
- */
-class UriTemplate
-{
- /** @var string URI template */
- private $template;
-
- /** @var array Variables to use in the template expansion */
- private $variables;
-
- /** @var array Hash for quick operator lookups */
- private static $operatorHash = [
- '' => ['prefix' => '', 'joiner' => ',', 'query' => false],
- '+' => ['prefix' => '', 'joiner' => ',', 'query' => false],
- '#' => ['prefix' => '#', 'joiner' => ',', 'query' => false],
- '.' => ['prefix' => '.', 'joiner' => '.', 'query' => false],
- '/' => ['prefix' => '/', 'joiner' => '/', 'query' => false],
- ';' => ['prefix' => ';', 'joiner' => ';', 'query' => true],
- '?' => ['prefix' => '?', 'joiner' => '&', 'query' => true],
- '&' => ['prefix' => '&', 'joiner' => '&', 'query' => true]
- ];
-
- /** @var array Delimiters */
- private static $delims = [':', '/', '?', '#', '[', ']', '@', '!', '$',
- '&', '\'', '(', ')', '*', '+', ',', ';', '='];
-
- /** @var array Percent encoded delimiters */
- private static $delimsPct = ['%3A', '%2F', '%3F', '%23', '%5B', '%5D',
- '%40', '%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C',
- '%3B', '%3D'];
-
- public function expand($template, array $variables)
- {
- if (false === strpos($template, '{')) {
- return $template;
- }
-
- $this->template = $template;
- $this->variables = $variables;
-
- return preg_replace_callback(
- '/\{([^\}]+)\}/',
- [$this, 'expandMatch'],
- $this->template
- );
- }
-
- /**
- * Parse an expression into parts
- *
- * @param string $expression Expression to parse
- *
- * @return array Returns an associative array of parts
- */
- private function parseExpression($expression)
- {
- $result = [];
-
- if (isset(self::$operatorHash[$expression[0]])) {
- $result['operator'] = $expression[0];
- $expression = substr($expression, 1);
- } else {
- $result['operator'] = '';
- }
-
- foreach (explode(',', $expression) as $value) {
- $value = trim($value);
- $varspec = [];
- if ($colonPos = strpos($value, ':')) {
- $varspec['value'] = substr($value, 0, $colonPos);
- $varspec['modifier'] = ':';
- $varspec['position'] = (int) substr($value, $colonPos + 1);
- } elseif (substr($value, -1) === '*') {
- $varspec['modifier'] = '*';
- $varspec['value'] = substr($value, 0, -1);
- } else {
- $varspec['value'] = (string) $value;
- $varspec['modifier'] = '';
- }
- $result['values'][] = $varspec;
- }
-
- return $result;
- }
-
- /**
- * Process an expansion
- *
- * @param array $matches Matches met in the preg_replace_callback
- *
- * @return string Returns the replacement string
- */
- private function expandMatch(array $matches)
- {
- static $rfc1738to3986 = ['+' => '%20', '%7e' => '~'];
-
- $replacements = [];
- $parsed = self::parseExpression($matches[1]);
- $prefix = self::$operatorHash[$parsed['operator']]['prefix'];
- $joiner = self::$operatorHash[$parsed['operator']]['joiner'];
- $useQuery = self::$operatorHash[$parsed['operator']]['query'];
-
- foreach ($parsed['values'] as $value) {
-
- if (!isset($this->variables[$value['value']])) {
- continue;
- }
-
- $variable = $this->variables[$value['value']];
- $actuallyUseQuery = $useQuery;
- $expanded = '';
-
- if (is_array($variable)) {
-
- $isAssoc = $this->isAssoc($variable);
- $kvp = [];
- foreach ($variable as $key => $var) {
-
- if ($isAssoc) {
- $key = rawurlencode($key);
- $isNestedArray = is_array($var);
- } else {
- $isNestedArray = false;
- }
-
- if (!$isNestedArray) {
- $var = rawurlencode($var);
- if ($parsed['operator'] === '+' ||
- $parsed['operator'] === '#'
- ) {
- $var = $this->decodeReserved($var);
- }
- }
-
- if ($value['modifier'] === '*') {
- if ($isAssoc) {
- if ($isNestedArray) {
- // Nested arrays must allow for deeply nested
- // structures.
- $var = strtr(
- http_build_query([$key => $var]),
- $rfc1738to3986
- );
- } else {
- $var = $key . '=' . $var;
- }
- } elseif ($key > 0 && $actuallyUseQuery) {
- $var = $value['value'] . '=' . $var;
- }
- }
-
- $kvp[$key] = $var;
- }
-
- if (empty($variable)) {
- $actuallyUseQuery = false;
- } elseif ($value['modifier'] === '*') {
- $expanded = implode($joiner, $kvp);
- if ($isAssoc) {
- // Don't prepend the value name when using the explode
- // modifier with an associative array.
- $actuallyUseQuery = false;
- }
- } else {
- if ($isAssoc) {
- // When an associative array is encountered and the
- // explode modifier is not set, then the result must be
- // a comma separated list of keys followed by their
- // respective values.
- foreach ($kvp as $k => &$v) {
- $v = $k . ',' . $v;
- }
- }
- $expanded = implode(',', $kvp);
- }
-
- } else {
- if ($value['modifier'] === ':') {
- $variable = substr($variable, 0, $value['position']);
- }
- $expanded = rawurlencode($variable);
- if ($parsed['operator'] === '+' || $parsed['operator'] === '#') {
- $expanded = $this->decodeReserved($expanded);
- }
- }
-
- if ($actuallyUseQuery) {
- if (!$expanded && $joiner !== '&') {
- $expanded = $value['value'];
- } else {
- $expanded = $value['value'] . '=' . $expanded;
- }
- }
-
- $replacements[] = $expanded;
- }
-
- $ret = implode($joiner, $replacements);
- if ($ret && $prefix) {
- return $prefix . $ret;
- }
-
- return $ret;
- }
-
- /**
- * Determines if an array is associative.
- *
- * This makes the assumption that input arrays are sequences or hashes.
- * This assumption is a tradeoff for accuracy in favor of speed, but it
- * should work in almost every case where input is supplied for a URI
- * template.
- *
- * @param array $array Array to check
- *
- * @return bool
- */
- private function isAssoc(array $array)
- {
- return $array && array_keys($array)[0] !== 0;
- }
-
- /**
- * Removes percent encoding on reserved characters (used with + and #
- * modifiers).
- *
- * @param string $string String to fix
- *
- * @return string
- */
- private function decodeReserved($string)
- {
- return str_replace(self::$delimsPct, self::$delims, $string);
- }
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/functions.php b/server/vendor/guzzlehttp/guzzle/src/functions.php
deleted file mode 100644
index 85cf9c6..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/functions.php
+++ /dev/null
@@ -1,329 +0,0 @@
-<?php
-namespace GuzzleHttp;
-
-use GuzzleHttp\Handler\CurlHandler;
-use GuzzleHttp\Handler\CurlMultiHandler;
-use GuzzleHttp\Handler\Proxy;
-use GuzzleHttp\Handler\StreamHandler;
-
-/**
- * Expands a URI template
- *
- * @param string $template URI template
- * @param array $variables Template variables
- *
- * @return string
- */
-function uri_template($template, array $variables)
-{
- if (extension_loaded('uri_template')) {
- // @codeCoverageIgnoreStart
- return \uri_template($template, $variables);
- // @codeCoverageIgnoreEnd
- }
-
- static $uriTemplate;
- if (!$uriTemplate) {
- $uriTemplate = new UriTemplate();
- }
-
- return $uriTemplate->expand($template, $variables);
-}
-
-/**
- * Debug function used to describe the provided value type and class.
- *
- * @param mixed $input
- *
- * @return string Returns a string containing the type of the variable and
- * if a class is provided, the class name.
- */
-function describe_type($input)
-{
- switch (gettype($input)) {
- case 'object':
- return 'object(' . get_class($input) . ')';
- case 'array':
- return 'array(' . count($input) . ')';
- default:
- ob_start();
- var_dump($input);
- // normalize float vs double
- return str_replace('double(', 'float(', rtrim(ob_get_clean()));
- }
-}
-
-/**
- * Parses an array of header lines into an associative array of headers.
- *
- * @param array $lines Header lines array of strings in the following
- * format: "Name: Value"
- * @return array
- */
-function headers_from_lines($lines)
-{
- $headers = [];
-
- foreach ($lines as $line) {
- $parts = explode(':', $line, 2);
- $headers[trim($parts[0])][] = isset($parts[1])
- ? trim($parts[1])
- : null;
- }
-
- return $headers;
-}
-
-/**
- * Returns a debug stream based on the provided variable.
- *
- * @param mixed $value Optional value
- *
- * @return resource
- */
-function debug_resource($value = null)
-{
- if (is_resource($value)) {
- return $value;
- } elseif (defined('STDOUT')) {
- return STDOUT;
- }
-
- return fopen('php://output', 'w');
-}
-
-/**
- * Chooses and creates a default handler to use based on the environment.
- *
- * The returned handler is not wrapped by any default middlewares.
- *
- * @throws \RuntimeException if no viable Handler is available.
- * @return callable Returns the best handler for the given system.
- */
-function choose_handler()
-{
- $handler = null;
- if (function_exists('curl_multi_exec') && function_exists('curl_exec')) {
- $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());
- } elseif (function_exists('curl_exec')) {
- $handler = new CurlHandler();
- } elseif (function_exists('curl_multi_exec')) {
- $handler = new CurlMultiHandler();
- }
-
- if (ini_get('allow_url_fopen')) {
- $handler = $handler
- ? Proxy::wrapStreaming($handler, new StreamHandler())
- : new StreamHandler();
- } elseif (!$handler) {
- throw new \RuntimeException('GuzzleHttp requires cURL, the '
- . 'allow_url_fopen ini setting, or a custom HTTP handler.');
- }
-
- return $handler;
-}
-
-/**
- * Get the default User-Agent string to use with Guzzle
- *
- * @return string
- */
-function default_user_agent()
-{
- static $defaultAgent = '';
-
- if (!$defaultAgent) {
- $defaultAgent = 'GuzzleHttp/' . Client::VERSION;
- if (extension_loaded('curl') && function_exists('curl_version')) {
- $defaultAgent .= ' curl/' . \curl_version()['version'];
- }
- $defaultAgent .= ' PHP/' . PHP_VERSION;
- }
-
- return $defaultAgent;
-}
-
-/**
- * Returns the default cacert bundle for the current system.
- *
- * First, the openssl.cafile and curl.cainfo php.ini settings are checked.
- * If those settings are not configured, then the common locations for
- * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X
- * and Windows are checked. If any of these file locations are found on
- * disk, they will be utilized.
- *
- * Note: the result of this function is cached for subsequent calls.
- *
- * @return string
- * @throws \RuntimeException if no bundle can be found.
- */
-function default_ca_bundle()
-{
- static $cached = null;
- static $cafiles = [
- // Red Hat, CentOS, Fedora (provided by the ca-certificates package)
- '/etc/pki/tls/certs/ca-bundle.crt',
- // Ubuntu, Debian (provided by the ca-certificates package)
- '/etc/ssl/certs/ca-certificates.crt',
- // FreeBSD (provided by the ca_root_nss package)
- '/usr/local/share/certs/ca-root-nss.crt',
- // OS X provided by homebrew (using the default path)
- '/usr/local/etc/openssl/cert.pem',
- // Google app engine
- '/etc/ca-certificates.crt',
- // Windows?
- 'C:\\windows\\system32\\curl-ca-bundle.crt',
- 'C:\\windows\\curl-ca-bundle.crt',
- ];
-
- if ($cached) {
- return $cached;
- }
-
- if ($ca = ini_get('openssl.cafile')) {
- return $cached = $ca;
- }
-
- if ($ca = ini_get('curl.cainfo')) {
- return $cached = $ca;
- }
-
- foreach ($cafiles as $filename) {
- if (file_exists($filename)) {
- return $cached = $filename;
- }
- }
-
- throw new \RuntimeException(<<< EOT
-No system CA bundle could be found in any of the the common system locations.
-PHP versions earlier than 5.6 are not properly configured to use the system's
-CA bundle by default. In order to verify peer certificates, you will need to
-supply the path on disk to a certificate bundle to the 'verify' request
-option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not
-need a specific certificate bundle, then Mozilla provides a commonly used CA
-bundle which can be downloaded here (provided by the maintainer of cURL):
-https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once
-you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP
-ini setting to point to the path to the file, allowing you to omit the 'verify'
-request option. See http://curl.haxx.se/docs/sslcerts.html for more
-information.
-EOT
- );
-}
-
-/**
- * Creates an associative array of lowercase header names to the actual
- * header casing.
- *
- * @param array $headers
- *
- * @return array
- */
-function normalize_header_keys(array $headers)
-{
- $result = [];
- foreach (array_keys($headers) as $key) {
- $result[strtolower($key)] = $key;
- }
-
- return $result;
-}
-
-/**
- * Returns true if the provided host matches any of the no proxy areas.
- *
- * This method will strip a port from the host if it is present. Each pattern
- * can be matched with an exact match (e.g., "foo.com" == "foo.com") or a
- * partial match: (e.g., "foo.com" == "baz.foo.com" and ".foo.com" ==
- * "baz.foo.com", but ".foo.com" != "foo.com").
- *
- * Areas are matched in the following cases:
- * 1. "*" (without quotes) always matches any hosts.
- * 2. An exact match.
- * 3. The area starts with "." and the area is the last part of the host. e.g.
- * '.mit.edu' will match any host that ends with '.mit.edu'.
- *
- * @param string $host Host to check against the patterns.
- * @param array $noProxyArray An array of host patterns.
- *
- * @return bool
- */
-function is_host_in_noproxy($host, array $noProxyArray)
-{
- if (strlen($host) === 0) {
- throw new \InvalidArgumentException('Empty host provided');
- }
-
- // Strip port if present.
- if (strpos($host, ':')) {
- $host = explode($host, ':', 2)[0];
- }
-
- foreach ($noProxyArray as $area) {
- // Always match on wildcards.
- if ($area === '*') {
- return true;
- } elseif (empty($area)) {
- // Don't match on empty values.
- continue;
- } elseif ($area === $host) {
- // Exact matches.
- return true;
- } else {
- // Special match if the area when prefixed with ".". Remove any
- // existing leading "." and add a new leading ".".
- $area = '.' . ltrim($area, '.');
- if (substr($host, -(strlen($area))) === $area) {
- return true;
- }
- }
- }
-
- return false;
-}
-
-/**
- * Wrapper for json_decode that throws when an error occurs.
- *
- * @param string $json JSON data to parse
- * @param bool $assoc When true, returned objects will be converted
- * into associative arrays.
- * @param int $depth User specified recursion depth.
- * @param int $options Bitmask of JSON decode options.
- *
- * @return mixed
- * @throws \InvalidArgumentException if the JSON cannot be decoded.
- * @link http://www.php.net/manual/en/function.json-decode.php
- */
-function json_decode($json, $assoc = false, $depth = 512, $options = 0)
-{
- $data = \json_decode($json, $assoc, $depth, $options);
- if (JSON_ERROR_NONE !== json_last_error()) {
- throw new \InvalidArgumentException(
- 'json_decode error: ' . json_last_error_msg());
- }
-
- return $data;
-}
-
-/**
- * Wrapper for JSON encoding that throws when an error occurs.
- *
- * @param mixed $value The value being encoded
- * @param int $options JSON encode option bitmask
- * @param int $depth Set the maximum depth. Must be greater than zero.
- *
- * @return string
- * @throws \InvalidArgumentException if the JSON cannot be encoded.
- * @link http://www.php.net/manual/en/function.json-encode.php
- */
-function json_encode($value, $options = 0, $depth = 512)
-{
- $json = \json_encode($value, $options, $depth);
- if (JSON_ERROR_NONE !== json_last_error()) {
- throw new \InvalidArgumentException(
- 'json_encode error: ' . json_last_error_msg());
- }
-
- return $json;
-}
diff --git a/server/vendor/guzzlehttp/guzzle/src/functions_include.php b/server/vendor/guzzlehttp/guzzle/src/functions_include.php
deleted file mode 100644
index a93393a..0000000
--- a/server/vendor/guzzlehttp/guzzle/src/functions_include.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-// Don't redefine the functions if included multiple times.
-if (!function_exists('GuzzleHttp\uri_template')) {
- require __DIR__ . '/functions.php';
-}
diff --git a/server/vendor/guzzlehttp/promises/CHANGELOG.md b/server/vendor/guzzlehttp/promises/CHANGELOG.md
deleted file mode 100644
index 551929f..0000000
--- a/server/vendor/guzzlehttp/promises/CHANGELOG.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# CHANGELOG
-
-
-## 1.3.1 - 2016-12-20
-
-### Fixed
-
-- `wait()` foreign promise compatibility
-
-
-## 1.3.0 - 2016-11-18
-
-### Added
-
-- Adds support for custom task queues.
-
-### Fixed
-
-- Fixed coroutine promise memory leak.
-
-
-## 1.2.0 - 2016-05-18
-
-### Changed
-
-- Update to now catch `\Throwable` on PHP 7+
-
-
-## 1.1.0 - 2016-03-07
-
-### Changed
-
-- Update EachPromise to prevent recurring on a iterator when advancing, as this
- could trigger fatal generator errors.
-- Update Promise to allow recursive waiting without unwrapping exceptions.
-
-
-## 1.0.3 - 2015-10-15
-
-### Changed
-
-- Update EachPromise to immediately resolve when the underlying promise iterator
- is empty. Previously, such a promise would throw an exception when its `wait`
- function was called.
-
-
-## 1.0.2 - 2015-05-15
-
-### Changed
-
-- Conditionally require functions.php.
-
-
-## 1.0.1 - 2015-06-24
-
-### Changed
-
-- Updating EachPromise to call next on the underlying promise iterator as late
- as possible to ensure that generators that generate new requests based on
- callbacks are not iterated until after callbacks are invoked.
-
-
-## 1.0.0 - 2015-05-12
-
-- Initial release
diff --git a/server/vendor/guzzlehttp/promises/LICENSE b/server/vendor/guzzlehttp/promises/LICENSE
deleted file mode 100644
index 67f91a1..0000000
--- a/server/vendor/guzzlehttp/promises/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2015-2016 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
-
-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/server/vendor/guzzlehttp/promises/Makefile b/server/vendor/guzzlehttp/promises/Makefile
deleted file mode 100644
index 8d5b3ef..0000000
--- a/server/vendor/guzzlehttp/promises/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-all: clean test
-
-test:
- vendor/bin/phpunit
-
-coverage:
- vendor/bin/phpunit --coverage-html=artifacts/coverage
-
-view-coverage:
- open artifacts/coverage/index.html
-
-clean:
- rm -rf artifacts/*
diff --git a/server/vendor/guzzlehttp/promises/README.md b/server/vendor/guzzlehttp/promises/README.md
deleted file mode 100644
index 7b607e2..0000000
--- a/server/vendor/guzzlehttp/promises/README.md
+++ /dev/null
@@ -1,504 +0,0 @@
-# Guzzle Promises
-
-[Promises/A+](https://promisesaplus.com/) implementation that handles promise
-chaining and resolution iteratively, allowing for "infinite" promise chaining
-while keeping the stack size constant. Read [this blog post](https://blog.domenic.me/youre-missing-the-point-of-promises/)
-for a general introduction to promises.
-
-- [Features](#features)
-- [Quick start](#quick-start)
-- [Synchronous wait](#synchronous-wait)
-- [Cancellation](#cancellation)
-- [API](#api)
- - [Promise](#promise)
- - [FulfilledPromise](#fulfilledpromise)
- - [RejectedPromise](#rejectedpromise)
-- [Promise interop](#promise-interop)
-- [Implementation notes](#implementation-notes)
-
-
-# Features
-
-- [Promises/A+](https://promisesaplus.com/) implementation.
-- Promise resolution and chaining is handled iteratively, allowing for
- "infinite" promise chaining.
-- Promises have a synchronous `wait` method.
-- Promises can be cancelled.
-- Works with any object that has a `then` function.
-- C# style async/await coroutine promises using
- `GuzzleHttp\Promise\coroutine()`.
-
-
-# Quick start
-
-A *promise* represents the eventual result of an asynchronous operation. The
-primary way of interacting with a promise is through its `then` method, which
-registers callbacks to receive either a promise's eventual value or the reason
-why the promise cannot be fulfilled.
-
-
-## Callbacks
-
-Callbacks are registered with the `then` method by providing an optional
-`$onFulfilled` followed by an optional `$onRejected` function.
-
-
-```php
-use GuzzleHttp\Promise\Promise;
-
-$promise = new Promise();
-$promise->then(
- // $onFulfilled
- function ($value) {
- echo 'The promise was fulfilled.';
- },
- // $onRejected
- function ($reason) {
- echo 'The promise was rejected.';
- }
-);
-```
-
-*Resolving* a promise means that you either fulfill a promise with a *value* or
-reject a promise with a *reason*. Resolving a promises triggers callbacks
-registered with the promises's `then` method. These callbacks are triggered
-only once and in the order in which they were added.
-
-
-## Resolving a promise
-
-Promises are fulfilled using the `resolve($value)` method. Resolving a promise
-with any value other than a `GuzzleHttp\Promise\RejectedPromise` will trigger
-all of the onFulfilled callbacks (resolving a promise with a rejected promise
-will reject the promise and trigger the `$onRejected` callbacks).
-
-```php
-use GuzzleHttp\Promise\Promise;
-
-$promise = new Promise();
-$promise
- ->then(function ($value) {
- // Return a value and don't break the chain
- return "Hello, " . $value;
- })
- // This then is executed after the first then and receives the value
- // returned from the first then.
- ->then(function ($value) {
- echo $value;
- });
-
-// Resolving the promise triggers the $onFulfilled callbacks and outputs
-// "Hello, reader".
-$promise->resolve('reader.');
-```
-
-
-## Promise forwarding
-
-Promises can be chained one after the other. Each then in the chain is a new
-promise. The return value of a promise is what's forwarded to the next
-promise in the chain. Returning a promise in a `then` callback will cause the
-subsequent promises in the chain to only be fulfilled when the returned promise
-has been fulfilled. The next promise in the chain will be invoked with the
-resolved value of the promise.
-
-```php
-use GuzzleHttp\Promise\Promise;
-
-$promise = new Promise();
-$nextPromise = new Promise();
-
-$promise
- ->then(function ($value) use ($nextPromise) {
- echo $value;
- return $nextPromise;
- })
- ->then(function ($value) {
- echo $value;
- });
-
-// Triggers the first callback and outputs "A"
-$promise->resolve('A');
-// Triggers the second callback and outputs "B"
-$nextPromise->resolve('B');
-```
-
-## Promise rejection
-
-When a promise is rejected, the `$onRejected` callbacks are invoked with the
-rejection reason.
-
-```php
-use GuzzleHttp\Promise\Promise;
-
-$promise = new Promise();
-$promise->then(null, function ($reason) {
- echo $reason;
-});
-
-$promise->reject('Error!');
-// Outputs "Error!"
-```
-
-## Rejection forwarding
-
-If an exception is thrown in an `$onRejected` callback, subsequent
-`$onRejected` callbacks are invoked with the thrown exception as the reason.
-
-```php
-use GuzzleHttp\Promise\Promise;
-
-$promise = new Promise();
-$promise->then(null, function ($reason) {
- throw new \Exception($reason);
-})->then(null, function ($reason) {
- assert($reason->getMessage() === 'Error!');
-});
-
-$promise->reject('Error!');
-```
-
-You can also forward a rejection down the promise chain by returning a
-`GuzzleHttp\Promise\RejectedPromise` in either an `$onFulfilled` or
-`$onRejected` callback.
-
-```php
-use GuzzleHttp\Promise\Promise;
-use GuzzleHttp\Promise\RejectedPromise;
-
-$promise = new Promise();
-$promise->then(null, function ($reason) {
- return new RejectedPromise($reason);
-})->then(null, function ($reason) {
- assert($reason === 'Error!');
-});
-
-$promise->reject('Error!');
-```
-
-If an exception is not thrown in a `$onRejected` callback and the callback
-does not return a rejected promise, downstream `$onFulfilled` callbacks are
-invoked using the value returned from the `$onRejected` callback.
-
-```php
-use GuzzleHttp\Promise\Promise;
-use GuzzleHttp\Promise\RejectedPromise;
-
-$promise = new Promise();
-$promise
- ->then(null, function ($reason) {
- return "It's ok";
- })
- ->then(function ($value) {
- assert($value === "It's ok");
- });
-
-$promise->reject('Error!');
-```
-
-# Synchronous wait
-
-You can synchronously force promises to complete using a promise's `wait`
-method. When creating a promise, you can provide a wait function that is used
-to synchronously force a promise to complete. When a wait function is invoked
-it is expected to deliver a value to the promise or reject the promise. If the
-wait function does not deliver a value, then an exception is thrown. The wait
-function provided to a promise constructor is invoked when the `wait` function
-of the promise is called.
-
-```php
-$promise = new Promise(function () use (&$promise) {
- $promise->resolve('foo');
-});
-
-// Calling wait will return the value of the promise.
-echo $promise->wait(); // outputs "foo"
-```
-
-If an exception is encountered while invoking the wait function of a promise,
-the promise is rejected with the exception and the exception is thrown.
-
-```php
-$promise = new Promise(function () use (&$promise) {
- throw new \Exception('foo');
-});
-
-$promise->wait(); // throws the exception.
-```
-
-Calling `wait` on a promise that has been fulfilled will not trigger the wait
-function. It will simply return the previously resolved value.
-
-```php
-$promise = new Promise(function () { die('this is not called!'); });
-$promise->resolve('foo');
-echo $promise->wait(); // outputs "foo"
-```
-
-Calling `wait` on a promise that has been rejected will throw an exception. If
-the rejection reason is an instance of `\Exception` the reason is thrown.
-Otherwise, a `GuzzleHttp\Promise\RejectionException` is thrown and the reason
-can be obtained by calling the `getReason` method of the exception.
-
-```php
-$promise = new Promise();
-$promise->reject('foo');
-$promise->wait();
-```
-
-> PHP Fatal error: Uncaught exception 'GuzzleHttp\Promise\RejectionException' with message 'The promise was rejected with value: foo'
-
-
-## Unwrapping a promise
-
-When synchronously waiting on a promise, you are joining the state of the
-promise into the current state of execution (i.e., return the value of the
-promise if it was fulfilled or throw an exception if it was rejected). This is
-called "unwrapping" the promise. Waiting on a promise will by default unwrap
-the promise state.
-
-You can force a promise to resolve and *not* unwrap the state of the promise
-by passing `false` to the first argument of the `wait` function:
-
-```php
-$promise = new Promise();
-$promise->reject('foo');
-// This will not throw an exception. It simply ensures the promise has
-// been resolved.
-$promise->wait(false);
-```
-
-When unwrapping a promise, the resolved value of the promise will be waited
-upon until the unwrapped value is not a promise. This means that if you resolve
-promise A with a promise B and unwrap promise A, the value returned by the
-wait function will be the value delivered to promise B.
-
-**Note**: when you do not unwrap the promise, no value is returned.
-
-
-# Cancellation
-
-You can cancel a promise that has not yet been fulfilled using the `cancel()`
-method of a promise. When creating a promise you can provide an optional
-cancel function that when invoked cancels the action of computing a resolution
-of the promise.
-
-
-# API
-
-
-## Promise
-
-When creating a promise object, you can provide an optional `$waitFn` and
-`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is
-expected to resolve the promise. `$cancelFn` is a function with no arguments
-that is expected to cancel the computation of a promise. It is invoked when the
-`cancel()` method of a promise is called.
-
-```php
-use GuzzleHttp\Promise\Promise;
-
-$promise = new Promise(
- function () use (&$promise) {
- $promise->resolve('waited');
- },
- function () {
- // do something that will cancel the promise computation (e.g., close
- // a socket, cancel a database query, etc...)
- }
-);
-
-assert('waited' === $promise->wait());
-```
-
-A promise has the following methods:
-
-- `then(callable $onFulfilled, callable $onRejected) : PromiseInterface`
-
- Appends fulfillment and rejection handlers to the promise, and returns a new promise resolving to the return value of the called handler.
-
-- `otherwise(callable $onRejected) : PromiseInterface`
-
- Appends a rejection handler callback to the promise, and returns a new promise resolving to the return value of the callback if it is called, or to its original fulfillment value if the promise is instead fulfilled.
-
-- `wait($unwrap = true) : mixed`
-
- Synchronously waits on the promise to complete.
-
- `$unwrap` controls whether or not the value of the promise is returned for a
- fulfilled promise or if an exception is thrown if the promise is rejected.
- This is set to `true` by default.
-
-- `cancel()`
-
- Attempts to cancel the promise if possible. The promise being cancelled and
- the parent most ancestor that has not yet been resolved will also be
- cancelled. Any promises waiting on the cancelled promise to resolve will also
- be cancelled.
-
-- `getState() : string`
-
- Returns the state of the promise. One of `pending`, `fulfilled`, or
- `rejected`.
-
-- `resolve($value)`
-
- Fulfills the promise with the given `$value`.
-
-- `reject($reason)`
-
- Rejects the promise with the given `$reason`.
-
-
-## FulfilledPromise
-
-A fulfilled promise can be created to represent a promise that has been
-fulfilled.
-
-```php
-use GuzzleHttp\Promise\FulfilledPromise;
-
-$promise = new FulfilledPromise('value');
-
-// Fulfilled callbacks are immediately invoked.
-$promise->then(function ($value) {
- echo $value;
-});
-```
-
-
-## RejectedPromise
-
-A rejected promise can be created to represent a promise that has been
-rejected.
-
-```php
-use GuzzleHttp\Promise\RejectedPromise;
-
-$promise = new RejectedPromise('Error');
-
-// Rejected callbacks are immediately invoked.
-$promise->then(null, function ($reason) {
- echo $reason;
-});
-```
-
-
-# Promise interop
-
-This library works with foreign promises that have a `then` method. This means
-you can use Guzzle promises with [React promises](https://github.com/reactphp/promise)
-for example. When a foreign promise is returned inside of a then method
-callback, promise resolution will occur recursively.
-
-```php
-// Create a React promise
-$deferred = new React\Promise\Deferred();
-$reactPromise = $deferred->promise();
-
-// Create a Guzzle promise that is fulfilled with a React promise.
-$guzzlePromise = new \GuzzleHttp\Promise\Promise();
-$guzzlePromise->then(function ($value) use ($reactPromise) {
- // Do something something with the value...
- // Return the React promise
- return $reactPromise;
-});
-```
-
-Please note that wait and cancel chaining is no longer possible when forwarding
-a foreign promise. You will need to wrap a third-party promise with a Guzzle
-promise in order to utilize wait and cancel functions with foreign promises.
-
-
-## Event Loop Integration
-
-In order to keep the stack size constant, Guzzle promises are resolved
-asynchronously using a task queue. When waiting on promises synchronously, the
-task queue will be automatically run to ensure that the blocking promise and
-any forwarded promises are resolved. When using promises asynchronously in an
-event loop, you will need to run the task queue on each tick of the loop. If
-you do not run the task queue, then promises will not be resolved.
-
-You can run the task queue using the `run()` method of the global task queue
-instance.
-
-```php
-// Get the global task queue
-$queue = \GuzzleHttp\Promise\queue();
-$queue->run();
-```
-
-For example, you could use Guzzle promises with React using a periodic timer:
-
-```php
-$loop = React\EventLoop\Factory::create();
-$loop->addPeriodicTimer(0, [$queue, 'run']);
-```
-
-*TODO*: Perhaps adding a `futureTick()` on each tick would be faster?
-
-
-# Implementation notes
-
-
-## Promise resolution and chaining is handled iteratively
-
-By shuffling pending handlers from one owner to another, promises are
-resolved iteratively, allowing for "infinite" then chaining.
-
-```php
-<?php
-require 'vendor/autoload.php';
-
-use GuzzleHttp\Promise\Promise;
-
-$parent = new Promise();
-$p = $parent;
-
-for ($i = 0; $i < 1000; $i++) {
- $p = $p->then(function ($v) {
- // The stack size remains constant (a good thing)
- echo xdebug_get_stack_depth() . ', ';
- return $v + 1;
- });
-}
-
-$parent->resolve(0);
-var_dump($p->wait()); // int(1000)
-
-```
-
-When a promise is fulfilled or rejected with a non-promise value, the promise
-then takes ownership of the handlers of each child promise and delivers values
-down the chain without using recursion.
-
-When a promise is resolved with another promise, the original promise transfers
-all of its pending handlers to the new promise. When the new promise is
-eventually resolved, all of the pending handlers are delivered the forwarded
-value.
-
-
-## A promise is the deferred.
-
-Some promise libraries implement promises using a deferred object to represent
-a computation and a promise object to represent the delivery of the result of
-the computation. This is a nice separation of computation and delivery because
-consumers of the promise cannot modify the value that will be eventually
-delivered.
-
-One side effect of being able to implement promise resolution and chaining
-iteratively is that you need to be able for one promise to reach into the state
-of another promise to shuffle around ownership of handlers. In order to achieve
-this without making the handlers of a promise publicly mutable, a promise is
-also the deferred value, allowing promises of the same parent class to reach
-into and modify the private properties of promises of the same type. While this
-does allow consumers of the value to modify the resolution or rejection of the
-deferred, it is a small price to pay for keeping the stack size constant.
-
-```php
-$promise = new Promise();
-$promise->then(function ($value) { echo $value; });
-// The promise is the deferred value, so you can deliver a value to it.
-$promise->resolve('foo');
-// prints "foo"
-```
diff --git a/server/vendor/guzzlehttp/promises/composer.json b/server/vendor/guzzlehttp/promises/composer.json
deleted file mode 100644
index ec41a61..0000000
--- a/server/vendor/guzzlehttp/promises/composer.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "guzzlehttp/promises",
- "description": "Guzzle promises library",
- "keywords": ["promise"],
- "license": "MIT",
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "require": {
- "php": ">=5.5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0"
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- },
- "files": ["src/functions_include.php"]
- },
- "scripts": {
- "test": "vendor/bin/phpunit",
- "test-ci": "vendor/bin/phpunit --coverage-text"
- },
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/AggregateException.php b/server/vendor/guzzlehttp/promises/src/AggregateException.php
deleted file mode 100644
index 6a5690c..0000000
--- a/server/vendor/guzzlehttp/promises/src/AggregateException.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * Exception thrown when too many errors occur in the some() or any() methods.
- */
-class AggregateException extends RejectionException
-{
- public function __construct($msg, array $reasons)
- {
- parent::__construct(
- $reasons,
- sprintf('%s; %d rejected promises', $msg, count($reasons))
- );
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/CancellationException.php b/server/vendor/guzzlehttp/promises/src/CancellationException.php
deleted file mode 100644
index cb360b8..0000000
--- a/server/vendor/guzzlehttp/promises/src/CancellationException.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * Exception that is set as the reason for a promise that has been cancelled.
- */
-class CancellationException extends RejectionException
-{
-}
diff --git a/server/vendor/guzzlehttp/promises/src/Coroutine.php b/server/vendor/guzzlehttp/promises/src/Coroutine.php
deleted file mode 100644
index 6aa0958..0000000
--- a/server/vendor/guzzlehttp/promises/src/Coroutine.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-use Exception;
-use Generator;
-use Throwable;
-
-/**
- * Creates a promise that is resolved using a generator that yields values or
- * promises (somewhat similar to C#'s async keyword).
- *
- * When called, the coroutine function will start an instance of the generator
- * and returns a promise that is fulfilled with its final yielded value.
- *
- * Control is returned back to the generator when the yielded promise settles.
- * This can lead to less verbose code when doing lots of sequential async calls
- * with minimal processing in between.
- *
- * use GuzzleHttp\Promise;
- *
- * function createPromise($value) {
- * return new Promise\FulfilledPromise($value);
- * }
- *
- * $promise = Promise\coroutine(function () {
- * $value = (yield createPromise('a'));
- * try {
- * $value = (yield createPromise($value . 'b'));
- * } catch (\Exception $e) {
- * // The promise was rejected.
- * }
- * yield $value . 'c';
- * });
- *
- * // Outputs "abc"
- * $promise->then(function ($v) { echo $v; });
- *
- * @param callable $generatorFn Generator function to wrap into a promise.
- *
- * @return Promise
- * @link https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration
- */
-final class Coroutine implements PromiseInterface
-{
- /**
- * @var PromiseInterface|null
- */
- private $currentPromise;
-
- /**
- * @var Generator
- */
- private $generator;
-
- /**
- * @var Promise
- */
- private $result;
-
- public function __construct(callable $generatorFn)
- {
- $this->generator = $generatorFn();
- $this->result = new Promise(function () {
- while (isset($this->currentPromise)) {
- $this->currentPromise->wait();
- }
- });
- $this->nextCoroutine($this->generator->current());
- }
-
- public function then(
- callable $onFulfilled = null,
- callable $onRejected = null
- ) {
- return $this->result->then($onFulfilled, $onRejected);
- }
-
- public function otherwise(callable $onRejected)
- {
- return $this->result->otherwise($onRejected);
- }
-
- public function wait($unwrap = true)
- {
- return $this->result->wait($unwrap);
- }
-
- public function getState()
- {
- return $this->result->getState();
- }
-
- public function resolve($value)
- {
- $this->result->resolve($value);
- }
-
- public function reject($reason)
- {
- $this->result->reject($reason);
- }
-
- public function cancel()
- {
- $this->currentPromise->cancel();
- $this->result->cancel();
- }
-
- private function nextCoroutine($yielded)
- {
- $this->currentPromise = promise_for($yielded)
- ->then([$this, '_handleSuccess'], [$this, '_handleFailure']);
- }
-
- /**
- * @internal
- */
- public function _handleSuccess($value)
- {
- unset($this->currentPromise);
- try {
- $next = $this->generator->send($value);
- if ($this->generator->valid()) {
- $this->nextCoroutine($next);
- } else {
- $this->result->resolve($value);
- }
- } catch (Exception $exception) {
- $this->result->reject($exception);
- } catch (Throwable $throwable) {
- $this->result->reject($throwable);
- }
- }
-
- /**
- * @internal
- */
- public function _handleFailure($reason)
- {
- unset($this->currentPromise);
- try {
- $nextYield = $this->generator->throw(exception_for($reason));
- // The throw was caught, so keep iterating on the coroutine
- $this->nextCoroutine($nextYield);
- } catch (Exception $exception) {
- $this->result->reject($exception);
- } catch (Throwable $throwable) {
- $this->result->reject($throwable);
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/EachPromise.php b/server/vendor/guzzlehttp/promises/src/EachPromise.php
deleted file mode 100644
index d0ddf60..0000000
--- a/server/vendor/guzzlehttp/promises/src/EachPromise.php
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * Represents a promise that iterates over many promises and invokes
- * side-effect functions in the process.
- */
-class EachPromise implements PromisorInterface
-{
- private $pending = [];
-
- /** @var \Iterator */
- private $iterable;
-
- /** @var callable|int */
- private $concurrency;
-
- /** @var callable */
- private $onFulfilled;
-
- /** @var callable */
- private $onRejected;
-
- /** @var Promise */
- private $aggregate;
-
- /** @var bool */
- private $mutex;
-
- /**
- * Configuration hash can include the following key value pairs:
- *
- * - fulfilled: (callable) Invoked when a promise fulfills. The function
- * is invoked with three arguments: the fulfillment value, the index
- * position from the iterable list of the promise, and the aggregate
- * promise that manages all of the promises. The aggregate promise may
- * be resolved from within the callback to short-circuit the promise.
- * - rejected: (callable) Invoked when a promise is rejected. The
- * function is invoked with three arguments: the rejection reason, the
- * index position from the iterable list of the promise, and the
- * aggregate promise that manages all of the promises. The aggregate
- * promise may be resolved from within the callback to short-circuit
- * the promise.
- * - concurrency: (integer) Pass this configuration option to limit the
- * allowed number of outstanding concurrently executing promises,
- * creating a capped pool of promises. There is no limit by default.
- *
- * @param mixed $iterable Promises or values to iterate.
- * @param array $config Configuration options
- */
- public function __construct($iterable, array $config = [])
- {
- $this->iterable = iter_for($iterable);
-
- if (isset($config['concurrency'])) {
- $this->concurrency = $config['concurrency'];
- }
-
- if (isset($config['fulfilled'])) {
- $this->onFulfilled = $config['fulfilled'];
- }
-
- if (isset($config['rejected'])) {
- $this->onRejected = $config['rejected'];
- }
- }
-
- public function promise()
- {
- if ($this->aggregate) {
- return $this->aggregate;
- }
-
- try {
- $this->createPromise();
- $this->iterable->rewind();
- $this->refillPending();
- } catch (\Throwable $e) {
- $this->aggregate->reject($e);
- } catch (\Exception $e) {
- $this->aggregate->reject($e);
- }
-
- return $this->aggregate;
- }
-
- private function createPromise()
- {
- $this->mutex = false;
- $this->aggregate = new Promise(function () {
- reset($this->pending);
- if (empty($this->pending) && !$this->iterable->valid()) {
- $this->aggregate->resolve(null);
- return;
- }
-
- // Consume a potentially fluctuating list of promises while
- // ensuring that indexes are maintained (precluding array_shift).
- while ($promise = current($this->pending)) {
- next($this->pending);
- $promise->wait();
- if ($this->aggregate->getState() !== PromiseInterface::PENDING) {
- return;
- }
- }
- });
-
- // Clear the references when the promise is resolved.
- $clearFn = function () {
- $this->iterable = $this->concurrency = $this->pending = null;
- $this->onFulfilled = $this->onRejected = null;
- };
-
- $this->aggregate->then($clearFn, $clearFn);
- }
-
- private function refillPending()
- {
- if (!$this->concurrency) {
- // Add all pending promises.
- while ($this->addPending() && $this->advanceIterator());
- return;
- }
-
- // Add only up to N pending promises.
- $concurrency = is_callable($this->concurrency)
- ? call_user_func($this->concurrency, count($this->pending))
- : $this->concurrency;
- $concurrency = max($concurrency - count($this->pending), 0);
- // Concurrency may be set to 0 to disallow new promises.
- if (!$concurrency) {
- return;
- }
- // Add the first pending promise.
- $this->addPending();
- // Note this is special handling for concurrency=1 so that we do
- // not advance the iterator after adding the first promise. This
- // helps work around issues with generators that might not have the
- // next value to yield until promise callbacks are called.
- while (--$concurrency
- && $this->advanceIterator()
- && $this->addPending());
- }
-
- private function addPending()
- {
- if (!$this->iterable || !$this->iterable->valid()) {
- return false;
- }
-
- $promise = promise_for($this->iterable->current());
- $idx = $this->iterable->key();
-
- $this->pending[$idx] = $promise->then(
- function ($value) use ($idx) {
- if ($this->onFulfilled) {
- call_user_func(
- $this->onFulfilled, $value, $idx, $this->aggregate
- );
- }
- $this->step($idx);
- },
- function ($reason) use ($idx) {
- if ($this->onRejected) {
- call_user_func(
- $this->onRejected, $reason, $idx, $this->aggregate
- );
- }
- $this->step($idx);
- }
- );
-
- return true;
- }
-
- private function advanceIterator()
- {
- // Place a lock on the iterator so that we ensure to not recurse,
- // preventing fatal generator errors.
- if ($this->mutex) {
- return false;
- }
-
- $this->mutex = true;
-
- try {
- $this->iterable->next();
- $this->mutex = false;
- return true;
- } catch (\Throwable $e) {
- $this->aggregate->reject($e);
- $this->mutex = false;
- return false;
- } catch (\Exception $e) {
- $this->aggregate->reject($e);
- $this->mutex = false;
- return false;
- }
- }
-
- private function step($idx)
- {
- // If the promise was already resolved, then ignore this step.
- if ($this->aggregate->getState() !== PromiseInterface::PENDING) {
- return;
- }
-
- unset($this->pending[$idx]);
-
- // Only refill pending promises if we are not locked, preventing the
- // EachPromise to recursively invoke the provided iterator, which
- // cause a fatal error: "Cannot resume an already running generator"
- if ($this->advanceIterator() && !$this->checkIfFinished()) {
- // Add more pending promises if possible.
- $this->refillPending();
- }
- }
-
- private function checkIfFinished()
- {
- if (!$this->pending && !$this->iterable->valid()) {
- // Resolve the promise if there's nothing left to do.
- $this->aggregate->resolve(null);
- return true;
- }
-
- return false;
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/FulfilledPromise.php b/server/vendor/guzzlehttp/promises/src/FulfilledPromise.php
deleted file mode 100644
index dbbeeb9..0000000
--- a/server/vendor/guzzlehttp/promises/src/FulfilledPromise.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * A promise that has been fulfilled.
- *
- * Thenning off of this promise will invoke the onFulfilled callback
- * immediately and ignore other callbacks.
- */
-class FulfilledPromise implements PromiseInterface
-{
- private $value;
-
- public function __construct($value)
- {
- if (method_exists($value, 'then')) {
- throw new \InvalidArgumentException(
- 'You cannot create a FulfilledPromise with a promise.');
- }
-
- $this->value = $value;
- }
-
- public function then(
- callable $onFulfilled = null,
- callable $onRejected = null
- ) {
- // Return itself if there is no onFulfilled function.
- if (!$onFulfilled) {
- return $this;
- }
-
- $queue = queue();
- $p = new Promise([$queue, 'run']);
- $value = $this->value;
- $queue->add(static function () use ($p, $value, $onFulfilled) {
- if ($p->getState() === self::PENDING) {
- try {
- $p->resolve($onFulfilled($value));
- } catch (\Throwable $e) {
- $p->reject($e);
- } catch (\Exception $e) {
- $p->reject($e);
- }
- }
- });
-
- return $p;
- }
-
- public function otherwise(callable $onRejected)
- {
- return $this->then(null, $onRejected);
- }
-
- public function wait($unwrap = true, $defaultDelivery = null)
- {
- return $unwrap ? $this->value : null;
- }
-
- public function getState()
- {
- return self::FULFILLED;
- }
-
- public function resolve($value)
- {
- if ($value !== $this->value) {
- throw new \LogicException("Cannot resolve a fulfilled promise");
- }
- }
-
- public function reject($reason)
- {
- throw new \LogicException("Cannot reject a fulfilled promise");
- }
-
- public function cancel()
- {
- // pass
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/Promise.php b/server/vendor/guzzlehttp/promises/src/Promise.php
deleted file mode 100644
index 844ada0..0000000
--- a/server/vendor/guzzlehttp/promises/src/Promise.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * Promises/A+ implementation that avoids recursion when possible.
- *
- * @link https://promisesaplus.com/
- */
-class Promise implements PromiseInterface
-{
- private $state = self::PENDING;
- private $result;
- private $cancelFn;
- private $waitFn;
- private $waitList;
- private $handlers = [];
-
- /**
- * @param callable $waitFn Fn that when invoked resolves the promise.
- * @param callable $cancelFn Fn that when invoked cancels the promise.
- */
- public function __construct(
- callable $waitFn = null,
- callable $cancelFn = null
- ) {
- $this->waitFn = $waitFn;
- $this->cancelFn = $cancelFn;
- }
-
- public function then(
- callable $onFulfilled = null,
- callable $onRejected = null
- ) {
- if ($this->state === self::PENDING) {
- $p = new Promise(null, [$this, 'cancel']);
- $this->handlers[] = [$p, $onFulfilled, $onRejected];
- $p->waitList = $this->waitList;
- $p->waitList[] = $this;
- return $p;
- }
-
- // Return a fulfilled promise and immediately invoke any callbacks.
- if ($this->state === self::FULFILLED) {
- return $onFulfilled
- ? promise_for($this->result)->then($onFulfilled)
- : promise_for($this->result);
- }
-
- // It's either cancelled or rejected, so return a rejected promise
- // and immediately invoke any callbacks.
- $rejection = rejection_for($this->result);
- return $onRejected ? $rejection->then(null, $onRejected) : $rejection;
- }
-
- public function otherwise(callable $onRejected)
- {
- return $this->then(null, $onRejected);
- }
-
- public function wait($unwrap = true)
- {
- $this->waitIfPending();
-
- $inner = $this->result instanceof PromiseInterface
- ? $this->result->wait($unwrap)
- : $this->result;
-
- if ($unwrap) {
- if ($this->result instanceof PromiseInterface
- || $this->state === self::FULFILLED
- ) {
- return $inner;
- } else {
- // It's rejected so "unwrap" and throw an exception.
- throw exception_for($inner);
- }
- }
- }
-
- public function getState()
- {
- return $this->state;
- }
-
- public function cancel()
- {
- if ($this->state !== self::PENDING) {
- return;
- }
-
- $this->waitFn = $this->waitList = null;
-
- if ($this->cancelFn) {
- $fn = $this->cancelFn;
- $this->cancelFn = null;
- try {
- $fn();
- } catch (\Throwable $e) {
- $this->reject($e);
- } catch (\Exception $e) {
- $this->reject($e);
- }
- }
-
- // Reject the promise only if it wasn't rejected in a then callback.
- if ($this->state === self::PENDING) {
- $this->reject(new CancellationException('Promise has been cancelled'));
- }
- }
-
- public function resolve($value)
- {
- $this->settle(self::FULFILLED, $value);
- }
-
- public function reject($reason)
- {
- $this->settle(self::REJECTED, $reason);
- }
-
- private function settle($state, $value)
- {
- if ($this->state !== self::PENDING) {
- // Ignore calls with the same resolution.
- if ($state === $this->state && $value === $this->result) {
- return;
- }
- throw $this->state === $state
- ? new \LogicException("The promise is already {$state}.")
- : new \LogicException("Cannot change a {$this->state} promise to {$state}");
- }
-
- if ($value === $this) {
- throw new \LogicException('Cannot fulfill or reject a promise with itself');
- }
-
- // Clear out the state of the promise but stash the handlers.
- $this->state = $state;
- $this->result = $value;
- $handlers = $this->handlers;
- $this->handlers = null;
- $this->waitList = $this->waitFn = null;
- $this->cancelFn = null;
-
- if (!$handlers) {
- return;
- }
-
- // If the value was not a settled promise or a thenable, then resolve
- // it in the task queue using the correct ID.
- if (!method_exists($value, 'then')) {
- $id = $state === self::FULFILLED ? 1 : 2;
- // It's a success, so resolve the handlers in the queue.
- queue()->add(static function () use ($id, $value, $handlers) {
- foreach ($handlers as $handler) {
- self::callHandler($id, $value, $handler);
- }
- });
- } elseif ($value instanceof Promise
- && $value->getState() === self::PENDING
- ) {
- // We can just merge our handlers onto the next promise.
- $value->handlers = array_merge($value->handlers, $handlers);
- } else {
- // Resolve the handlers when the forwarded promise is resolved.
- $value->then(
- static function ($value) use ($handlers) {
- foreach ($handlers as $handler) {
- self::callHandler(1, $value, $handler);
- }
- },
- static function ($reason) use ($handlers) {
- foreach ($handlers as $handler) {
- self::callHandler(2, $reason, $handler);
- }
- }
- );
- }
- }
-
- /**
- * Call a stack of handlers using a specific callback index and value.
- *
- * @param int $index 1 (resolve) or 2 (reject).
- * @param mixed $value Value to pass to the callback.
- * @param array $handler Array of handler data (promise and callbacks).
- *
- * @return array Returns the next group to resolve.
- */
- private static function callHandler($index, $value, array $handler)
- {
- /** @var PromiseInterface $promise */
- $promise = $handler[0];
-
- // The promise may have been cancelled or resolved before placing
- // this thunk in the queue.
- if ($promise->getState() !== self::PENDING) {
- return;
- }
-
- try {
- if (isset($handler[$index])) {
- $promise->resolve($handler[$index]($value));
- } elseif ($index === 1) {
- // Forward resolution values as-is.
- $promise->resolve($value);
- } else {
- // Forward rejections down the chain.
- $promise->reject($value);
- }
- } catch (\Throwable $reason) {
- $promise->reject($reason);
- } catch (\Exception $reason) {
- $promise->reject($reason);
- }
- }
-
- private function waitIfPending()
- {
- if ($this->state !== self::PENDING) {
- return;
- } elseif ($this->waitFn) {
- $this->invokeWaitFn();
- } elseif ($this->waitList) {
- $this->invokeWaitList();
- } else {
- // If there's not wait function, then reject the promise.
- $this->reject('Cannot wait on a promise that has '
- . 'no internal wait function. You must provide a wait '
- . 'function when constructing the promise to be able to '
- . 'wait on a promise.');
- }
-
- queue()->run();
-
- if ($this->state === self::PENDING) {
- $this->reject('Invoking the wait callback did not resolve the promise');
- }
- }
-
- private function invokeWaitFn()
- {
- try {
- $wfn = $this->waitFn;
- $this->waitFn = null;
- $wfn(true);
- } catch (\Exception $reason) {
- if ($this->state === self::PENDING) {
- // The promise has not been resolved yet, so reject the promise
- // with the exception.
- $this->reject($reason);
- } else {
- // The promise was already resolved, so there's a problem in
- // the application.
- throw $reason;
- }
- }
- }
-
- private function invokeWaitList()
- {
- $waitList = $this->waitList;
- $this->waitList = null;
-
- foreach ($waitList as $result) {
- while (true) {
- $result->waitIfPending();
-
- if ($result->result instanceof Promise) {
- $result = $result->result;
- } else {
- if ($result->result instanceof PromiseInterface) {
- $result->result->wait(false);
- }
- break;
- }
- }
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/PromiseInterface.php b/server/vendor/guzzlehttp/promises/src/PromiseInterface.php
deleted file mode 100644
index 8f5f4b9..0000000
--- a/server/vendor/guzzlehttp/promises/src/PromiseInterface.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * A promise represents the eventual result of an asynchronous operation.
- *
- * The primary way of interacting with a promise is through its then method,
- * which registers callbacks to receive either a promise’s eventual value or
- * the reason why the promise cannot be fulfilled.
- *
- * @link https://promisesaplus.com/
- */
-interface PromiseInterface
-{
- const PENDING = 'pending';
- const FULFILLED = 'fulfilled';
- const REJECTED = 'rejected';
-
- /**
- * Appends fulfillment and rejection handlers to the promise, and returns
- * a new promise resolving to the return value of the called handler.
- *
- * @param callable $onFulfilled Invoked when the promise fulfills.
- * @param callable $onRejected Invoked when the promise is rejected.
- *
- * @return PromiseInterface
- */
- public function then(
- callable $onFulfilled = null,
- callable $onRejected = null
- );
-
- /**
- * Appends a rejection handler callback to the promise, and returns a new
- * promise resolving to the return value of the callback if it is called,
- * or to its original fulfillment value if the promise is instead
- * fulfilled.
- *
- * @param callable $onRejected Invoked when the promise is rejected.
- *
- * @return PromiseInterface
- */
- public function otherwise(callable $onRejected);
-
- /**
- * Get the state of the promise ("pending", "rejected", or "fulfilled").
- *
- * The three states can be checked against the constants defined on
- * PromiseInterface: PENDING, FULFILLED, and REJECTED.
- *
- * @return string
- */
- public function getState();
-
- /**
- * Resolve the promise with the given value.
- *
- * @param mixed $value
- * @throws \RuntimeException if the promise is already resolved.
- */
- public function resolve($value);
-
- /**
- * Reject the promise with the given reason.
- *
- * @param mixed $reason
- * @throws \RuntimeException if the promise is already resolved.
- */
- public function reject($reason);
-
- /**
- * Cancels the promise if possible.
- *
- * @link https://github.com/promises-aplus/cancellation-spec/issues/7
- */
- public function cancel();
-
- /**
- * Waits until the promise completes if possible.
- *
- * Pass $unwrap as true to unwrap the result of the promise, either
- * returning the resolved value or throwing the rejected exception.
- *
- * If the promise cannot be waited on, then the promise will be rejected.
- *
- * @param bool $unwrap
- *
- * @return mixed
- * @throws \LogicException if the promise has no wait function or if the
- * promise does not settle after waiting.
- */
- public function wait($unwrap = true);
-}
diff --git a/server/vendor/guzzlehttp/promises/src/PromisorInterface.php b/server/vendor/guzzlehttp/promises/src/PromisorInterface.php
deleted file mode 100644
index b07fe32..0000000
--- a/server/vendor/guzzlehttp/promises/src/PromisorInterface.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * Interface used with classes that return a promise.
- */
-interface PromisorInterface
-{
- /**
- * Returns a promise.
- *
- * @return PromiseInterface
- */
- public function promise();
-}
diff --git a/server/vendor/guzzlehttp/promises/src/RejectedPromise.php b/server/vendor/guzzlehttp/promises/src/RejectedPromise.php
deleted file mode 100644
index 2bc6508..0000000
--- a/server/vendor/guzzlehttp/promises/src/RejectedPromise.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * A promise that has been rejected.
- *
- * Thenning off of this promise will invoke the onRejected callback
- * immediately and ignore other callbacks.
- */
-class RejectedPromise implements PromiseInterface
-{
- private $reason;
-
- public function __construct($reason)
- {
- if (method_exists($reason, 'then')) {
- throw new \InvalidArgumentException(
- 'You cannot create a RejectedPromise with a promise.');
- }
-
- $this->reason = $reason;
- }
-
- public function then(
- callable $onFulfilled = null,
- callable $onRejected = null
- ) {
- // If there's no onRejected callback then just return self.
- if (!$onRejected) {
- return $this;
- }
-
- $queue = queue();
- $reason = $this->reason;
- $p = new Promise([$queue, 'run']);
- $queue->add(static function () use ($p, $reason, $onRejected) {
- if ($p->getState() === self::PENDING) {
- try {
- // Return a resolved promise if onRejected does not throw.
- $p->resolve($onRejected($reason));
- } catch (\Throwable $e) {
- // onRejected threw, so return a rejected promise.
- $p->reject($e);
- } catch (\Exception $e) {
- // onRejected threw, so return a rejected promise.
- $p->reject($e);
- }
- }
- });
-
- return $p;
- }
-
- public function otherwise(callable $onRejected)
- {
- return $this->then(null, $onRejected);
- }
-
- public function wait($unwrap = true, $defaultDelivery = null)
- {
- if ($unwrap) {
- throw exception_for($this->reason);
- }
- }
-
- public function getState()
- {
- return self::REJECTED;
- }
-
- public function resolve($value)
- {
- throw new \LogicException("Cannot resolve a rejected promise");
- }
-
- public function reject($reason)
- {
- if ($reason !== $this->reason) {
- throw new \LogicException("Cannot reject a rejected promise");
- }
- }
-
- public function cancel()
- {
- // pass
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/RejectionException.php b/server/vendor/guzzlehttp/promises/src/RejectionException.php
deleted file mode 100644
index 07c1136..0000000
--- a/server/vendor/guzzlehttp/promises/src/RejectionException.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * A special exception that is thrown when waiting on a rejected promise.
- *
- * The reason value is available via the getReason() method.
- */
-class RejectionException extends \RuntimeException
-{
- /** @var mixed Rejection reason. */
- private $reason;
-
- /**
- * @param mixed $reason Rejection reason.
- * @param string $description Optional description
- */
- public function __construct($reason, $description = null)
- {
- $this->reason = $reason;
-
- $message = 'The promise was rejected';
-
- if ($description) {
- $message .= ' with reason: ' . $description;
- } elseif (is_string($reason)
- || (is_object($reason) && method_exists($reason, '__toString'))
- ) {
- $message .= ' with reason: ' . $this->reason;
- } elseif ($reason instanceof \JsonSerializable) {
- $message .= ' with reason: '
- . json_encode($this->reason, JSON_PRETTY_PRINT);
- }
-
- parent::__construct($message);
- }
-
- /**
- * Returns the rejection reason.
- *
- * @return mixed
- */
- public function getReason()
- {
- return $this->reason;
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/TaskQueue.php b/server/vendor/guzzlehttp/promises/src/TaskQueue.php
deleted file mode 100644
index 6e8a2a0..0000000
--- a/server/vendor/guzzlehttp/promises/src/TaskQueue.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * A task queue that executes tasks in a FIFO order.
- *
- * This task queue class is used to settle promises asynchronously and
- * maintains a constant stack size. You can use the task queue asynchronously
- * by calling the `run()` function of the global task queue in an event loop.
- *
- * GuzzleHttp\Promise\queue()->run();
- */
-class TaskQueue implements TaskQueueInterface
-{
- private $enableShutdown = true;
- private $queue = [];
-
- public function __construct($withShutdown = true)
- {
- if ($withShutdown) {
- register_shutdown_function(function () {
- if ($this->enableShutdown) {
- // Only run the tasks if an E_ERROR didn't occur.
- $err = error_get_last();
- if (!$err || ($err['type'] ^ E_ERROR)) {
- $this->run();
- }
- }
- });
- }
- }
-
- public function isEmpty()
- {
- return !$this->queue;
- }
-
- public function add(callable $task)
- {
- $this->queue[] = $task;
- }
-
- public function run()
- {
- /** @var callable $task */
- while ($task = array_shift($this->queue)) {
- $task();
- }
- }
-
- /**
- * The task queue will be run and exhausted by default when the process
- * exits IFF the exit is not the result of a PHP E_ERROR error.
- *
- * You can disable running the automatic shutdown of the queue by calling
- * this function. If you disable the task queue shutdown process, then you
- * MUST either run the task queue (as a result of running your event loop
- * or manually using the run() method) or wait on each outstanding promise.
- *
- * Note: This shutdown will occur before any destructors are triggered.
- */
- public function disableShutdown()
- {
- $this->enableShutdown = false;
- }
-}
diff --git a/server/vendor/guzzlehttp/promises/src/TaskQueueInterface.php b/server/vendor/guzzlehttp/promises/src/TaskQueueInterface.php
deleted file mode 100644
index ac8306e..0000000
--- a/server/vendor/guzzlehttp/promises/src/TaskQueueInterface.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-interface TaskQueueInterface
-{
- /**
- * Returns true if the queue is empty.
- *
- * @return bool
- */
- public function isEmpty();
-
- /**
- * Adds a task to the queue that will be executed the next time run is
- * called.
- *
- * @param callable $task
- */
- public function add(callable $task);
-
- /**
- * Execute all of the pending task in the queue.
- */
- public function run();
-}
diff --git a/server/vendor/guzzlehttp/promises/src/functions.php b/server/vendor/guzzlehttp/promises/src/functions.php
deleted file mode 100644
index 4e27709..0000000
--- a/server/vendor/guzzlehttp/promises/src/functions.php
+++ /dev/null
@@ -1,457 +0,0 @@
-<?php
-namespace GuzzleHttp\Promise;
-
-/**
- * Get the global task queue used for promise resolution.
- *
- * This task queue MUST be run in an event loop in order for promises to be
- * settled asynchronously. It will be automatically run when synchronously
- * waiting on a promise.
- *
- * <code>
- * while ($eventLoop->isRunning()) {
- * GuzzleHttp\Promise\queue()->run();
- * }
- * </code>
- *
- * @param TaskQueueInterface $assign Optionally specify a new queue instance.
- *
- * @return TaskQueueInterface
- */
-function queue(TaskQueueInterface $assign = null)
-{
- static $queue;
-
- if ($assign) {
- $queue = $assign;
- } elseif (!$queue) {
- $queue = new TaskQueue();
- }
-
- return $queue;
-}
-
-/**
- * Adds a function to run in the task queue when it is next `run()` and returns
- * a promise that is fulfilled or rejected with the result.
- *
- * @param callable $task Task function to run.
- *
- * @return PromiseInterface
- */
-function task(callable $task)
-{
- $queue = queue();
- $promise = new Promise([$queue, 'run']);
- $queue->add(function () use ($task, $promise) {
- try {
- $promise->resolve($task());
- } catch (\Throwable $e) {
- $promise->reject($e);
- } catch (\Exception $e) {
- $promise->reject($e);
- }
- });
-
- return $promise;
-}
-
-/**
- * Creates a promise for a value if the value is not a promise.
- *
- * @param mixed $value Promise or value.
- *
- * @return PromiseInterface
- */
-function promise_for($value)
-{
- if ($value instanceof PromiseInterface) {
- return $value;
- }
-
- // Return a Guzzle promise that shadows the given promise.
- if (method_exists($value, 'then')) {
- $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null;
- $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;
- $promise = new Promise($wfn, $cfn);
- $value->then([$promise, 'resolve'], [$promise, 'reject']);
- return $promise;
- }
-
- return new FulfilledPromise($value);
-}
-
-/**
- * Creates a rejected promise for a reason if the reason is not a promise. If
- * the provided reason is a promise, then it is returned as-is.
- *
- * @param mixed $reason Promise or reason.
- *
- * @return PromiseInterface
- */
-function rejection_for($reason)
-{
- if ($reason instanceof PromiseInterface) {
- return $reason;
- }
-
- return new RejectedPromise($reason);
-}
-
-/**
- * Create an exception for a rejected promise value.
- *
- * @param mixed $reason
- *
- * @return \Exception|\Throwable
- */
-function exception_for($reason)
-{
- return $reason instanceof \Exception || $reason instanceof \Throwable
- ? $reason
- : new RejectionException($reason);
-}
-
-/**
- * Returns an iterator for the given value.
- *
- * @param mixed $value
- *
- * @return \Iterator
- */
-function iter_for($value)
-{
- if ($value instanceof \Iterator) {
- return $value;
- } elseif (is_array($value)) {
- return new \ArrayIterator($value);
- } else {
- return new \ArrayIterator([$value]);
- }
-}
-
-/**
- * Synchronously waits on a promise to resolve and returns an inspection state
- * array.
- *
- * Returns a state associative array containing a "state" key mapping to a
- * valid promise state. If the state of the promise is "fulfilled", the array
- * will contain a "value" key mapping to the fulfilled value of the promise. If
- * the promise is rejected, the array will contain a "reason" key mapping to
- * the rejection reason of the promise.
- *
- * @param PromiseInterface $promise Promise or value.
- *
- * @return array
- */
-function inspect(PromiseInterface $promise)
-{
- try {
- return [
- 'state' => PromiseInterface::FULFILLED,
- 'value' => $promise->wait()
- ];
- } catch (RejectionException $e) {
- return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];
- } catch (\Throwable $e) {
- return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
- } catch (\Exception $e) {
- return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
- }
-}
-
-/**
- * Waits on all of the provided promises, but does not unwrap rejected promises
- * as thrown exception.
- *
- * Returns an array of inspection state arrays.
- *
- * @param PromiseInterface[] $promises Traversable of promises to wait upon.
- *
- * @return array
- * @see GuzzleHttp\Promise\inspect for the inspection state array format.
- */
-function inspect_all($promises)
-{
- $results = [];
- foreach ($promises as $key => $promise) {
- $results[$key] = inspect($promise);
- }
-
- return $results;
-}
-
-/**
- * Waits on all of the provided promises and returns the fulfilled values.
- *
- * Returns an array that contains the value of each promise (in the same order
- * the promises were provided). An exception is thrown if any of the promises
- * are rejected.
- *
- * @param mixed $promises Iterable of PromiseInterface objects to wait on.
- *
- * @return array
- * @throws \Exception on error
- * @throws \Throwable on error in PHP >=7
- */
-function unwrap($promises)
-{
- $results = [];
- foreach ($promises as $key => $promise) {
- $results[$key] = $promise->wait();
- }
-
- return $results;
-}
-
-/**
- * Given an array of promises, return a promise that is fulfilled when all the
- * items in the array are fulfilled.
- *
- * The promise's fulfillment value is an array with fulfillment values at
- * respective positions to the original array. If any promise in the array
- * rejects, the returned promise is rejected with the rejection reason.
- *
- * @param mixed $promises Promises or values.
- *
- * @return PromiseInterface
- */
-function all($promises)
-{
- $results = [];
- return each(
- $promises,
- function ($value, $idx) use (&$results) {
- $results[$idx] = $value;
- },
- function ($reason, $idx, Promise $aggregate) {
- $aggregate->reject($reason);
- }
- )->then(function () use (&$results) {
- ksort($results);
- return $results;
- });
-}
-
-/**
- * Initiate a competitive race between multiple promises or values (values will
- * become immediately fulfilled promises).
- *
- * When count amount of promises have been fulfilled, the returned promise is
- * fulfilled with an array that contains the fulfillment values of the winners
- * in order of resolution.
- *
- * This prommise is rejected with a {@see GuzzleHttp\Promise\AggregateException}
- * if the number of fulfilled promises is less than the desired $count.
- *
- * @param int $count Total number of promises.
- * @param mixed $promises Promises or values.
- *
- * @return PromiseInterface
- */
-function some($count, $promises)
-{
- $results = [];
- $rejections = [];
-
- return each(
- $promises,
- function ($value, $idx, PromiseInterface $p) use (&$results, $count) {
- if ($p->getState() !== PromiseInterface::PENDING) {
- return;
- }
- $results[$idx] = $value;
- if (count($results) >= $count) {
- $p->resolve(null);
- }
- },
- function ($reason) use (&$rejections) {
- $rejections[] = $reason;
- }
- )->then(
- function () use (&$results, &$rejections, $count) {
- if (count($results) !== $count) {
- throw new AggregateException(
- 'Not enough promises to fulfill count',
- $rejections
- );
- }
- ksort($results);
- return array_values($results);
- }
- );
-}
-
-/**
- * Like some(), with 1 as count. However, if the promise fulfills, the
- * fulfillment value is not an array of 1 but the value directly.
- *
- * @param mixed $promises Promises or values.
- *
- * @return PromiseInterface
- */
-function any($promises)
-{
- return some(1, $promises)->then(function ($values) { return $values[0]; });
-}
-
-/**
- * Returns a promise that is fulfilled when all of the provided promises have
- * been fulfilled or rejected.
- *
- * The returned promise is fulfilled with an array of inspection state arrays.
- *
- * @param mixed $promises Promises or values.
- *
- * @return PromiseInterface
- * @see GuzzleHttp\Promise\inspect for the inspection state array format.
- */
-function settle($promises)
-{
- $results = [];
-
- return each(
- $promises,
- function ($value, $idx) use (&$results) {
- $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];
- },
- function ($reason, $idx) use (&$results) {
- $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];
- }
- )->then(function () use (&$results) {
- ksort($results);
- return $results;
- });
-}
-
-/**
- * Given an iterator that yields promises or values, returns a promise that is
- * fulfilled with a null value when the iterator has been consumed or the
- * aggregate promise has been fulfilled or rejected.
- *
- * $onFulfilled is a function that accepts the fulfilled value, iterator
- * index, and the aggregate promise. The callback can invoke any necessary side
- * effects and choose to resolve or reject the aggregate promise if needed.
- *
- * $onRejected is a function that accepts the rejection reason, iterator
- * index, and the aggregate promise. The callback can invoke any necessary side
- * effects and choose to resolve or reject the aggregate promise if needed.
- *
- * @param mixed $iterable Iterator or array to iterate over.
- * @param callable $onFulfilled
- * @param callable $onRejected
- *
- * @return PromiseInterface
- */
-function each(
- $iterable,
- callable $onFulfilled = null,
- callable $onRejected = null
-) {
- return (new EachPromise($iterable, [
- 'fulfilled' => $onFulfilled,
- 'rejected' => $onRejected
- ]))->promise();
-}
-
-/**
- * Like each, but only allows a certain number of outstanding promises at any
- * given time.
- *
- * $concurrency may be an integer or a function that accepts the number of
- * pending promises and returns a numeric concurrency limit value to allow for
- * dynamic a concurrency size.
- *
- * @param mixed $iterable
- * @param int|callable $concurrency
- * @param callable $onFulfilled
- * @param callable $onRejected
- *
- * @return PromiseInterface
- */
-function each_limit(
- $iterable,
- $concurrency,
- callable $onFulfilled = null,
- callable $onRejected = null
-) {
- return (new EachPromise($iterable, [
- 'fulfilled' => $onFulfilled,
- 'rejected' => $onRejected,
- 'concurrency' => $concurrency
- ]))->promise();
-}
-
-/**
- * Like each_limit, but ensures that no promise in the given $iterable argument
- * is rejected. If any promise is rejected, then the aggregate promise is
- * rejected with the encountered rejection.
- *
- * @param mixed $iterable
- * @param int|callable $concurrency
- * @param callable $onFulfilled
- *
- * @return PromiseInterface
- */
-function each_limit_all(
- $iterable,
- $concurrency,
- callable $onFulfilled = null
-) {
- return each_limit(
- $iterable,
- $concurrency,
- $onFulfilled,
- function ($reason, $idx, PromiseInterface $aggregate) {
- $aggregate->reject($reason);
- }
- );
-}
-
-/**
- * Returns true if a promise is fulfilled.
- *
- * @param PromiseInterface $promise
- *
- * @return bool
- */
-function is_fulfilled(PromiseInterface $promise)
-{
- return $promise->getState() === PromiseInterface::FULFILLED;
-}
-
-/**
- * Returns true if a promise is rejected.
- *
- * @param PromiseInterface $promise
- *
- * @return bool
- */
-function is_rejected(PromiseInterface $promise)
-{
- return $promise->getState() === PromiseInterface::REJECTED;
-}
-
-/**
- * Returns true if a promise is fulfilled or rejected.
- *
- * @param PromiseInterface $promise
- *
- * @return bool
- */
-function is_settled(PromiseInterface $promise)
-{
- return $promise->getState() !== PromiseInterface::PENDING;
-}
-
-/**
- * @see Coroutine
- *
- * @param callable $generatorFn
- *
- * @return PromiseInterface
- */
-function coroutine(callable $generatorFn)
-{
- return new Coroutine($generatorFn);
-}
diff --git a/server/vendor/guzzlehttp/promises/src/functions_include.php b/server/vendor/guzzlehttp/promises/src/functions_include.php
deleted file mode 100644
index 34cd171..0000000
--- a/server/vendor/guzzlehttp/promises/src/functions_include.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-// Don't redefine the functions if included multiple times.
-if (!function_exists('GuzzleHttp\Promise\promise_for')) {
- require __DIR__ . '/functions.php';
-}
diff --git a/server/vendor/guzzlehttp/psr7/CHANGELOG.md b/server/vendor/guzzlehttp/psr7/CHANGELOG.md
deleted file mode 100644
index 5c252b3..0000000
--- a/server/vendor/guzzlehttp/psr7/CHANGELOG.md
+++ /dev/null
@@ -1,110 +0,0 @@
-# CHANGELOG
-
-## 1.4.2 - 2017-03-20
-
-* Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing
- calls to `trigger_error` when deprecated methods are invoked.
-
-## 1.4.1 - 2017-02-27
-
-* Reverted BC break by reintroducing behavior to automagically fix a URI with a
- relative path and an authority by adding a leading slash to the path. It's only
- deprecated now.
-* Added triggering of silenced deprecation warnings.
-
-## 1.4.0 - 2017-02-21
-
-* Fix `Stream::read` when length parameter <= 0.
-* `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory.
-* Fix `ServerRequest::getUriFromGlobals` when `Host` header contains port.
-* Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form.
-* Allow `parse_response` to parse a response without delimiting space and reason.
-* Ensure each URI modification results in a valid URI according to PSR-7 discussions.
- Invalid modifications will throw an exception instead of returning a wrong URI or
- doing some magic.
- - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception
- because the path of a URI with an authority must start with a slash "/" or be empty
- - `(new Uri())->withScheme('http')` will return `'http://localhost'`
-* Fix compatibility of URIs with `file` scheme and empty host.
-* Added common URI utility methods based on RFC 3986 (see documentation in the readme):
- - `Uri::isDefaultPort`
- - `Uri::isAbsolute`
- - `Uri::isNetworkPathReference`
- - `Uri::isAbsolutePathReference`
- - `Uri::isRelativePathReference`
- - `Uri::isSameDocumentReference`
- - `Uri::composeComponents`
- - `UriNormalizer::normalize`
- - `UriNormalizer::isEquivalent`
- - `UriResolver::relativize`
-* Deprecated `Uri::resolve` in favor of `UriResolver::resolve`
-* Deprecated `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments`
-
-## 1.3.1 - 2016-06-25
-
-* Fix `Uri::__toString` for network path references, e.g. `//example.org`.
-* Fix missing lowercase normalization for host.
-* Fix handling of URI components in case they are `'0'` in a lot of places,
- e.g. as a user info password.
-* Fix `Uri::withAddedHeader` to correctly merge headers with different case.
-* Fix trimming of header values in `Uri::withAddedHeader`. Header values may
- be surrounded by whitespace which should be ignored according to RFC 7230
- Section 3.2.4. This does not apply to header names.
-* Fix `Uri::withAddedHeader` with an array of header values.
-* Fix `Uri::resolve` when base path has no slash and handling of fragment.
-* Fix handling of encoding in `Uri::with(out)QueryValue` so one can pass the
- key/value both in encoded as well as decoded form to those methods. This is
- consistent with withPath, withQuery etc.
-* Fix `ServerRequest::withoutAttribute` when attribute value is null.
-
-## 1.3.0 - 2016-04-13
-
-* Added remaining interfaces needed for full PSR7 compatibility
- (ServerRequestInterface, UploadedFileInterface, etc.).
-* Added support for stream_for from scalars.
-* Can now extend Uri.
-* Fixed a bug in validating request methods by making it more permissive.
-
-## 1.2.3 - 2016-02-18
-
-* Fixed support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote
- streams, which can sometimes return fewer bytes than requested with `fread`.
-* Fixed handling of gzipped responses with FNAME headers.
-
-## 1.2.2 - 2016-01-22
-
-* Added support for URIs without any authority.
-* Added support for HTTP 451 'Unavailable For Legal Reasons.'
-* Added support for using '0' as a filename.
-* Added support for including non-standard ports in Host headers.
-
-## 1.2.1 - 2015-11-02
-
-* Now supporting negative offsets when seeking to SEEK_END.
-
-## 1.2.0 - 2015-08-15
-
-* Body as `"0"` is now properly added to a response.
-* Now allowing forward seeking in CachingStream.
-* Now properly parsing HTTP requests that contain proxy targets in
- `parse_request`.
-* functions.php is now conditionally required.
-* user-info is no longer dropped when resolving URIs.
-
-## 1.1.0 - 2015-06-24
-
-* URIs can now be relative.
-* `multipart/form-data` headers are now overridden case-insensitively.
-* URI paths no longer encode the following characters because they are allowed
- in URIs: "(", ")", "*", "!", "'"
-* A port is no longer added to a URI when the scheme is missing and no port is
- present.
-
-## 1.0.0 - 2015-05-19
-
-Initial release.
-
-Currently unsupported:
-
-- `Psr\Http\Message\ServerRequestInterface`
-- `Psr\Http\Message\UploadedFileInterface`
diff --git a/server/vendor/guzzlehttp/psr7/LICENSE b/server/vendor/guzzlehttp/psr7/LICENSE
deleted file mode 100644
index 581d95f..0000000
--- a/server/vendor/guzzlehttp/psr7/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2015 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com>
-
-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/server/vendor/guzzlehttp/psr7/README.md b/server/vendor/guzzlehttp/psr7/README.md
deleted file mode 100644
index 1649935..0000000
--- a/server/vendor/guzzlehttp/psr7/README.md
+++ /dev/null
@@ -1,739 +0,0 @@
-# PSR-7 Message Implementation
-
-This repository contains a full [PSR-7](http://www.php-fig.org/psr/psr-7/)
-message implementation, several stream decorators, and some helpful
-functionality like query string parsing.
-
-
-[![Build Status](https://travis-ci.org/guzzle/psr7.svg?branch=master)](https://travis-ci.org/guzzle/psr7)
-
-
-# Stream implementation
-
-This package comes with a number of stream implementations and stream
-decorators.
-
-
-## AppendStream
-
-`GuzzleHttp\Psr7\AppendStream`
-
-Reads from multiple streams, one after the other.
-
-```php
-use GuzzleHttp\Psr7;
-
-$a = Psr7\stream_for('abc, ');
-$b = Psr7\stream_for('123.');
-$composed = new Psr7\AppendStream([$a, $b]);
-
-$composed->addStream(Psr7\stream_for(' Above all listen to me'));
-
-echo $composed; // abc, 123. Above all listen to me.
-```
-
-
-## BufferStream
-
-`GuzzleHttp\Psr7\BufferStream`
-
-Provides a buffer stream that can be written to fill a buffer, and read
-from to remove bytes from the buffer.
-
-This stream returns a "hwm" metadata value that tells upstream consumers
-what the configured high water mark of the stream is, or the maximum
-preferred size of the buffer.
-
-```php
-use GuzzleHttp\Psr7;
-
-// When more than 1024 bytes are in the buffer, it will begin returning
-// false to writes. This is an indication that writers should slow down.
-$buffer = new Psr7\BufferStream(1024);
-```
-
-
-## CachingStream
-
-The CachingStream is used to allow seeking over previously read bytes on
-non-seekable streams. This can be useful when transferring a non-seekable
-entity body fails due to needing to rewind the stream (for example, resulting
-from a redirect). Data that is read from the remote stream will be buffered in
-a PHP temp stream so that previously read bytes are cached first in memory,
-then on disk.
-
-```php
-use GuzzleHttp\Psr7;
-
-$original = Psr7\stream_for(fopen('http://www.google.com', 'r'));
-$stream = new Psr7\CachingStream($original);
-
-$stream->read(1024);
-echo $stream->tell();
-// 1024
-
-$stream->seek(0);
-echo $stream->tell();
-// 0
-```
-
-
-## DroppingStream
-
-`GuzzleHttp\Psr7\DroppingStream`
-
-Stream decorator that begins dropping data once the size of the underlying
-stream becomes too full.
-
-```php
-use GuzzleHttp\Psr7;
-
-// Create an empty stream
-$stream = Psr7\stream_for();
-
-// Start dropping data when the stream has more than 10 bytes
-$dropping = new Psr7\DroppingStream($stream, 10);
-
-$dropping->write('01234567890123456789');
-echo $stream; // 0123456789
-```
-
-
-## FnStream
-
-`GuzzleHttp\Psr7\FnStream`
-
-Compose stream implementations based on a hash of functions.
-
-Allows for easy testing and extension of a provided stream without needing
-to create a concrete class for a simple extension point.
-
-```php
-
-use GuzzleHttp\Psr7;
-
-$stream = Psr7\stream_for('hi');
-$fnStream = Psr7\FnStream::decorate($stream, [
- 'rewind' => function () use ($stream) {
- echo 'About to rewind - ';
- $stream->rewind();
- echo 'rewound!';
- }
-]);
-
-$fnStream->rewind();
-// Outputs: About to rewind - rewound!
-```
-
-
-## InflateStream
-
-`GuzzleHttp\Psr7\InflateStream`
-
-Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
-
-This stream decorator skips the first 10 bytes of the given stream to remove
-the gzip header, converts the provided stream to a PHP stream resource,
-then appends the zlib.inflate filter. The stream is then converted back
-to a Guzzle stream resource to be used as a Guzzle stream.
-
-
-## LazyOpenStream
-
-`GuzzleHttp\Psr7\LazyOpenStream`
-
-Lazily reads or writes to a file that is opened only after an IO operation
-take place on the stream.
-
-```php
-use GuzzleHttp\Psr7;
-
-$stream = new Psr7\LazyOpenStream('/path/to/file', 'r');
-// The file has not yet been opened...
-
-echo $stream->read(10);
-// The file is opened and read from only when needed.
-```
-
-
-## LimitStream
-
-`GuzzleHttp\Psr7\LimitStream`
-
-LimitStream can be used to read a subset or slice of an existing stream object.
-This can be useful for breaking a large file into smaller pieces to be sent in
-chunks (e.g. Amazon S3's multipart upload API).
-
-```php
-use GuzzleHttp\Psr7;
-
-$original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+'));
-echo $original->getSize();
-// >>> 1048576
-
-// Limit the size of the body to 1024 bytes and start reading from byte 2048
-$stream = new Psr7\LimitStream($original, 1024, 2048);
-echo $stream->getSize();
-// >>> 1024
-echo $stream->tell();
-// >>> 0
-```
-
-
-## MultipartStream
-
-`GuzzleHttp\Psr7\MultipartStream`
-
-Stream that when read returns bytes for a streaming multipart or
-multipart/form-data stream.
-
-
-## NoSeekStream
-
-`GuzzleHttp\Psr7\NoSeekStream`
-
-NoSeekStream wraps a stream and does not allow seeking.
-
-```php
-use GuzzleHttp\Psr7;
-
-$original = Psr7\stream_for('foo');
-$noSeek = new Psr7\NoSeekStream($original);
-
-echo $noSeek->read(3);
-// foo
-var_export($noSeek->isSeekable());
-// false
-$noSeek->seek(0);
-var_export($noSeek->read(3));
-// NULL
-```
-
-
-## PumpStream
-
-`GuzzleHttp\Psr7\PumpStream`
-
-Provides a read only stream that pumps data from a PHP callable.
-
-When invoking the provided callable, the PumpStream will pass the amount of
-data requested to read to the callable. The callable can choose to ignore
-this value and return fewer or more bytes than requested. Any extra data
-returned by the provided callable is buffered internally until drained using
-the read() function of the PumpStream. The provided callable MUST return
-false when there is no more data to read.
-
-
-## Implementing stream decorators
-
-Creating a stream decorator is very easy thanks to the
-`GuzzleHttp\Psr7\StreamDecoratorTrait`. This trait provides methods that
-implement `Psr\Http\Message\StreamInterface` by proxying to an underlying
-stream. Just `use` the `StreamDecoratorTrait` and implement your custom
-methods.
-
-For example, let's say we wanted to call a specific function each time the last
-byte is read from a stream. This could be implemented by overriding the
-`read()` method.
-
-```php
-use Psr\Http\Message\StreamInterface;
-use GuzzleHttp\Psr7\StreamDecoratorTrait;
-
-class EofCallbackStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- private $callback;
-
- public function __construct(StreamInterface $stream, callable $cb)
- {
- $this->stream = $stream;
- $this->callback = $cb;
- }
-
- public function read($length)
- {
- $result = $this->stream->read($length);
-
- // Invoke the callback when EOF is hit.
- if ($this->eof()) {
- call_user_func($this->callback);
- }
-
- return $result;
- }
-}
-```
-
-This decorator could be added to any existing stream and used like so:
-
-```php
-use GuzzleHttp\Psr7;
-
-$original = Psr7\stream_for('foo');
-
-$eofStream = new EofCallbackStream($original, function () {
- echo 'EOF!';
-});
-
-$eofStream->read(2);
-$eofStream->read(1);
-// echoes "EOF!"
-$eofStream->seek(0);
-$eofStream->read(3);
-// echoes "EOF!"
-```
-
-
-## PHP StreamWrapper
-
-You can use the `GuzzleHttp\Psr7\StreamWrapper` class if you need to use a
-PSR-7 stream as a PHP stream resource.
-
-Use the `GuzzleHttp\Psr7\StreamWrapper::getResource()` method to create a PHP
-stream from a PSR-7 stream.
-
-```php
-use GuzzleHttp\Psr7\StreamWrapper;
-
-$stream = GuzzleHttp\Psr7\stream_for('hello!');
-$resource = StreamWrapper::getResource($stream);
-echo fread($resource, 6); // outputs hello!
-```
-
-
-# Function API
-
-There are various functions available under the `GuzzleHttp\Psr7` namespace.
-
-
-## `function str`
-
-`function str(MessageInterface $message)`
-
-Returns the string representation of an HTTP message.
-
-```php
-$request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com');
-echo GuzzleHttp\Psr7\str($request);
-```
-
-
-## `function uri_for`
-
-`function uri_for($uri)`
-
-This function accepts a string or `Psr\Http\Message\UriInterface` and returns a
-UriInterface for the given value. If the value is already a `UriInterface`, it
-is returned as-is.
-
-```php
-$uri = GuzzleHttp\Psr7\uri_for('http://example.com');
-assert($uri === GuzzleHttp\Psr7\uri_for($uri));
-```
-
-
-## `function stream_for`
-
-`function stream_for($resource = '', array $options = [])`
-
-Create a new stream based on the input type.
-
-Options is an associative array that can contain the following keys:
-
-* - metadata: Array of custom metadata.
-* - size: Size of the stream.
-
-This method accepts the following `$resource` types:
-
-- `Psr\Http\Message\StreamInterface`: Returns the value as-is.
-- `string`: Creates a stream object that uses the given string as the contents.
-- `resource`: Creates a stream object that wraps the given PHP stream resource.
-- `Iterator`: If the provided value implements `Iterator`, then a read-only
- stream object will be created that wraps the given iterable. Each time the
- stream is read from, data from the iterator will fill a buffer and will be
- continuously called until the buffer is equal to the requested read size.
- Subsequent read calls will first read from the buffer and then call `next`
- on the underlying iterator until it is exhausted.
-- `object` with `__toString()`: If the object has the `__toString()` method,
- the object will be cast to a string and then a stream will be returned that
- uses the string value.
-- `NULL`: When `null` is passed, an empty stream object is returned.
-- `callable` When a callable is passed, a read-only stream object will be
- created that invokes the given callable. The callable is invoked with the
- number of suggested bytes to read. The callable can return any number of
- bytes, but MUST return `false` when there is no more data to return. The
- stream object that wraps the callable will invoke the callable until the
- number of requested bytes are available. Any additional bytes will be
- buffered and used in subsequent reads.
-
-```php
-$stream = GuzzleHttp\Psr7\stream_for('foo');
-$stream = GuzzleHttp\Psr7\stream_for(fopen('/path/to/file', 'r'));
-
-$generator function ($bytes) {
- for ($i = 0; $i < $bytes; $i++) {
- yield ' ';
- }
-}
-
-$stream = GuzzleHttp\Psr7\stream_for($generator(100));
-```
-
-
-## `function parse_header`
-
-`function parse_header($header)`
-
-Parse an array of header values containing ";" separated data into an array of
-associative arrays representing the header key value pair data of the header.
-When a parameter does not contain a value, but just contains a key, this
-function will inject a key with a '' string value.
-
-
-## `function normalize_header`
-
-`function normalize_header($header)`
-
-Converts an array of header values that may contain comma separated headers
-into an array of headers with no comma separated values.
-
-
-## `function modify_request`
-
-`function modify_request(RequestInterface $request, array $changes)`
-
-Clone and modify a request with the given changes. This method is useful for
-reducing the number of clones needed to mutate a message.
-
-The changes can be one of:
-
-- method: (string) Changes the HTTP method.
-- set_headers: (array) Sets the given headers.
-- remove_headers: (array) Remove the given headers.
-- body: (mixed) Sets the given body.
-- uri: (UriInterface) Set the URI.
-- query: (string) Set the query string value of the URI.
-- version: (string) Set the protocol version.
-
-
-## `function rewind_body`
-
-`function rewind_body(MessageInterface $message)`
-
-Attempts to rewind a message body and throws an exception on failure. The body
-of the message will only be rewound if a call to `tell()` returns a value other
-than `0`.
-
-
-## `function try_fopen`
-
-`function try_fopen($filename, $mode)`
-
-Safely opens a PHP stream resource using a filename.
-
-When fopen fails, PHP normally raises a warning. This function adds an error
-handler that checks for errors and throws an exception instead.
-
-
-## `function copy_to_string`
-
-`function copy_to_string(StreamInterface $stream, $maxLen = -1)`
-
-Copy the contents of a stream into a string until the given number of bytes
-have been read.
-
-
-## `function copy_to_stream`
-
-`function copy_to_stream(StreamInterface $source, StreamInterface $dest, $maxLen = -1)`
-
-Copy the contents of a stream into another stream until the given number of
-bytes have been read.
-
-
-## `function hash`
-
-`function hash(StreamInterface $stream, $algo, $rawOutput = false)`
-
-Calculate a hash of a Stream. This method reads the entire stream to calculate
-a rolling hash (based on PHP's hash_init functions).
-
-
-## `function readline`
-
-`function readline(StreamInterface $stream, $maxLength = null)`
-
-Read a line from the stream up to the maximum allowed buffer length.
-
-
-## `function parse_request`
-
-`function parse_request($message)`
-
-Parses a request message string into a request object.
-
-
-## `function parse_response`
-
-`function parse_response($message)`
-
-Parses a response message string into a response object.
-
-
-## `function parse_query`
-
-`function parse_query($str, $urlEncoding = true)`
-
-Parse a query string into an associative array.
-
-If multiple values are found for the same key, the value of that key value pair
-will become an array. This function does not parse nested PHP style arrays into
-an associative array (e.g., `foo[a]=1&foo[b]=2` will be parsed into
-`['foo[a]' => '1', 'foo[b]' => '2']`).
-
-
-## `function build_query`
-
-`function build_query(array $params, $encoding = PHP_QUERY_RFC3986)`
-
-Build a query string from an array of key value pairs.
-
-This function can use the return value of parse_query() to build a query string.
-This function does not modify the provided keys when an array is encountered
-(like http_build_query would).
-
-
-## `function mimetype_from_filename`
-
-`function mimetype_from_filename($filename)`
-
-Determines the mimetype of a file by looking at its extension.
-
-
-## `function mimetype_from_extension`
-
-`function mimetype_from_extension($extension)`
-
-Maps a file extensions to a mimetype.
-
-
-# Additional URI Methods
-
-Aside from the standard `Psr\Http\Message\UriInterface` implementation in form of the `GuzzleHttp\Psr7\Uri` class,
-this library also provides additional functionality when working with URIs as static methods.
-
-## URI Types
-
-An instance of `Psr\Http\Message\UriInterface` can either be an absolute URI or a relative reference.
-An absolute URI has a scheme. A relative reference is used to express a URI relative to another URI,
-the base URI. Relative references can be divided into several forms according to
-[RFC 3986 Section 4.2](https://tools.ietf.org/html/rfc3986#section-4.2):
-
-- network-path references, e.g. `//example.com/path`
-- absolute-path references, e.g. `/path`
-- relative-path references, e.g. `subpath`
-
-The following methods can be used to identify the type of the URI.
-
-### `GuzzleHttp\Psr7\Uri::isAbsolute`
-
-`public static function isAbsolute(UriInterface $uri): bool`
-
-Whether the URI is absolute, i.e. it has a scheme.
-
-### `GuzzleHttp\Psr7\Uri::isNetworkPathReference`
-
-`public static function isNetworkPathReference(UriInterface $uri): bool`
-
-Whether the URI is a network-path reference. A relative reference that begins with two slash characters is
-termed an network-path reference.
-
-### `GuzzleHttp\Psr7\Uri::isAbsolutePathReference`
-
-`public static function isAbsolutePathReference(UriInterface $uri): bool`
-
-Whether the URI is a absolute-path reference. A relative reference that begins with a single slash character is
-termed an absolute-path reference.
-
-### `GuzzleHttp\Psr7\Uri::isRelativePathReference`
-
-`public static function isRelativePathReference(UriInterface $uri): bool`
-
-Whether the URI is a relative-path reference. A relative reference that does not begin with a slash character is
-termed a relative-path reference.
-
-### `GuzzleHttp\Psr7\Uri::isSameDocumentReference`
-
-`public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool`
-
-Whether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its
-fragment component, identical to the base URI. When no base URI is given, only an empty URI reference
-(apart from its fragment) is considered a same-document reference.
-
-## URI Components
-
-Additional methods to work with URI components.
-
-### `GuzzleHttp\Psr7\Uri::isDefaultPort`
-
-`public static function isDefaultPort(UriInterface $uri): bool`
-
-Whether the URI has the default port of the current scheme. `Psr\Http\Message\UriInterface::getPort` may return null
-or the standard port. This method can be used independently of the implementation.
-
-### `GuzzleHttp\Psr7\Uri::composeComponents`
-
-`public static function composeComponents($scheme, $authority, $path, $query, $fragment): string`
-
-Composes a URI reference string from its various components according to
-[RFC 3986 Section 5.3](https://tools.ietf.org/html/rfc3986#section-5.3). Usually this method does not need to be called
-manually but instead is used indirectly via `Psr\Http\Message\UriInterface::__toString`.
-
-### `GuzzleHttp\Psr7\Uri::fromParts`
-
-`public static function fromParts(array $parts): UriInterface`
-
-Creates a URI from a hash of [`parse_url`](http://php.net/manual/en/function.parse-url.php) components.
-
-
-### `GuzzleHttp\Psr7\Uri::withQueryValue`
-
-`public static function withQueryValue(UriInterface $uri, $key, $value): UriInterface`
-
-Creates a new URI with a specific query string value. Any existing query string values that exactly match the
-provided key are removed and replaced with the given key value pair. A value of null will set the query string
-key without a value, e.g. "key" instead of "key=value".
-
-
-### `GuzzleHttp\Psr7\Uri::withoutQueryValue`
-
-`public static function withoutQueryValue(UriInterface $uri, $key): UriInterface`
-
-Creates a new URI with a specific query string value removed. Any existing query string values that exactly match the
-provided key are removed.
-
-## Reference Resolution
-
-`GuzzleHttp\Psr7\UriResolver` provides methods to resolve a URI reference in the context of a base URI according
-to [RFC 3986 Section 5](https://tools.ietf.org/html/rfc3986#section-5). This is for example also what web browsers
-do when resolving a link in a website based on the current request URI.
-
-### `GuzzleHttp\Psr7\UriResolver::resolve`
-
-`public static function resolve(UriInterface $base, UriInterface $rel): UriInterface`
-
-Converts the relative URI into a new URI that is resolved against the base URI.
-
-### `GuzzleHttp\Psr7\UriResolver::removeDotSegments`
-
-`public static function removeDotSegments(string $path): string`
-
-Removes dot segments from a path and returns the new path according to
-[RFC 3986 Section 5.2.4](https://tools.ietf.org/html/rfc3986#section-5.2.4).
-
-### `GuzzleHttp\Psr7\UriResolver::relativize`
-
-`public static function relativize(UriInterface $base, UriInterface $target): UriInterface`
-
-Returns the target URI as a relative reference from the base URI. This method is the counterpart to resolve():
-
-```php
-(string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))
-```
-
-One use-case is to use the current request URI as base URI and then generate relative links in your documents
-to reduce the document size or offer self-contained downloadable document archives.
-
-```php
-$base = new Uri('http://example.com/a/b/');
-echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'.
-echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'.
-echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.
-echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'.
-```
-
-## Normalization and Comparison
-
-`GuzzleHttp\Psr7\UriNormalizer` provides methods to normalize and compare URIs according to
-[RFC 3986 Section 6](https://tools.ietf.org/html/rfc3986#section-6).
-
-### `GuzzleHttp\Psr7\UriNormalizer::normalize`
-
-`public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS): UriInterface`
-
-Returns a normalized URI. The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.
-This methods adds additional normalizations that can be configured with the `$flags` parameter which is a bitmask
-of normalizations to apply. The following normalizations are available:
-
-- `UriNormalizer::PRESERVING_NORMALIZATIONS`
-
- Default normalizations which only include the ones that preserve semantics.
-
-- `UriNormalizer::CAPITALIZE_PERCENT_ENCODING`
-
- All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized.
-
- Example: `http://example.org/a%c2%b1b` → `http://example.org/a%C2%B1b`
-
-- `UriNormalizer::DECODE_UNRESERVED_CHARACTERS`
-
- Decodes percent-encoded octets of unreserved characters. For consistency, percent-encoded octets in the ranges of
- ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should
- not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved
- characters by URI normalizers.
-
- Example: `http://example.org/%7Eusern%61me/` → `http://example.org/~username/`
-
-- `UriNormalizer::CONVERT_EMPTY_PATH`
-
- Converts the empty path to "/" for http and https URIs.
-
- Example: `http://example.org` → `http://example.org/`
-
-- `UriNormalizer::REMOVE_DEFAULT_HOST`
-
- Removes the default host of the given URI scheme from the URI. Only the "file" scheme defines the default host
- "localhost". All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile` are equivalent according to
- RFC 3986.
-
- Example: `file://localhost/myfile` → `file:///myfile`
-
-- `UriNormalizer::REMOVE_DEFAULT_PORT`
-
- Removes the default port of the given URI scheme from the URI.
-
- Example: `http://example.org:80/` → `http://example.org/`
-
-- `UriNormalizer::REMOVE_DOT_SEGMENTS`
-
- Removes unnecessary dot-segments. Dot-segments in relative-path references are not removed as it would
- change the semantics of the URI reference.
-
- Example: `http://example.org/../a/b/../c/./d.html` → `http://example.org/a/c/d.html`
-
-- `UriNormalizer::REMOVE_DUPLICATE_SLASHES`
-
- Paths which include two or more adjacent slashes are converted to one. Webservers usually ignore duplicate slashes
- and treat those URIs equivalent. But in theory those URIs do not need to be equivalent. So this normalization
- may change the semantics. Encoded slashes (%2F) are not removed.
-
- Example: `http://example.org//foo///bar.html` → `http://example.org/foo/bar.html`
-
-- `UriNormalizer::SORT_QUERY_PARAMETERS`
-
- Sort query parameters with their values in alphabetical order. However, the order of parameters in a URI may be
- significant (this is not defined by the standard). So this normalization is not safe and may change the semantics
- of the URI.
-
- Example: `?lang=en&article=fred` → `?article=fred&lang=en`
-
-### `GuzzleHttp\Psr7\UriNormalizer::isEquivalent`
-
-`public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS): bool`
-
-Whether two URIs can be considered equivalent. Both URIs are normalized automatically before comparison with the given
-`$normalizations` bitmask. The method also accepts relative URI references and returns true when they are equivalent.
-This of course assumes they will be resolved against the same base URI. If this is not the case, determination of
-equivalence or difference of relative references does not mean anything.
diff --git a/server/vendor/guzzlehttp/psr7/composer.json b/server/vendor/guzzlehttp/psr7/composer.json
deleted file mode 100644
index b1c5a90..0000000
--- a/server/vendor/guzzlehttp/psr7/composer.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "guzzlehttp/psr7",
- "type": "library",
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": ["request", "response", "message", "stream", "http", "uri", "url"],
- "license": "MIT",
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Tobias Schultze",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- },
- "files": ["src/functions_include.php"]
- },
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/AppendStream.php b/server/vendor/guzzlehttp/psr7/src/AppendStream.php
deleted file mode 100644
index 23039fd..0000000
--- a/server/vendor/guzzlehttp/psr7/src/AppendStream.php
+++ /dev/null
@@ -1,233 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Reads from multiple streams, one after the other.
- *
- * This is a read-only stream decorator.
- */
-class AppendStream implements StreamInterface
-{
- /** @var StreamInterface[] Streams being decorated */
- private $streams = [];
-
- private $seekable = true;
- private $current = 0;
- private $pos = 0;
- private $detached = false;
-
- /**
- * @param StreamInterface[] $streams Streams to decorate. Each stream must
- * be readable.
- */
- public function __construct(array $streams = [])
- {
- foreach ($streams as $stream) {
- $this->addStream($stream);
- }
- }
-
- public function __toString()
- {
- try {
- $this->rewind();
- return $this->getContents();
- } catch (\Exception $e) {
- return '';
- }
- }
-
- /**
- * Add a stream to the AppendStream
- *
- * @param StreamInterface $stream Stream to append. Must be readable.
- *
- * @throws \InvalidArgumentException if the stream is not readable
- */
- public function addStream(StreamInterface $stream)
- {
- if (!$stream->isReadable()) {
- throw new \InvalidArgumentException('Each stream must be readable');
- }
-
- // The stream is only seekable if all streams are seekable
- if (!$stream->isSeekable()) {
- $this->seekable = false;
- }
-
- $this->streams[] = $stream;
- }
-
- public function getContents()
- {
- return copy_to_string($this);
- }
-
- /**
- * Closes each attached stream.
- *
- * {@inheritdoc}
- */
- public function close()
- {
- $this->pos = $this->current = 0;
-
- foreach ($this->streams as $stream) {
- $stream->close();
- }
-
- $this->streams = [];
- }
-
- /**
- * Detaches each attached stream
- *
- * {@inheritdoc}
- */
- public function detach()
- {
- $this->close();
- $this->detached = true;
- }
-
- public function tell()
- {
- return $this->pos;
- }
-
- /**
- * Tries to calculate the size by adding the size of each stream.
- *
- * If any of the streams do not return a valid number, then the size of the
- * append stream cannot be determined and null is returned.
- *
- * {@inheritdoc}
- */
- public function getSize()
- {
- $size = 0;
-
- foreach ($this->streams as $stream) {
- $s = $stream->getSize();
- if ($s === null) {
- return null;
- }
- $size += $s;
- }
-
- return $size;
- }
-
- public function eof()
- {
- return !$this->streams ||
- ($this->current >= count($this->streams) - 1 &&
- $this->streams[$this->current]->eof());
- }
-
- public function rewind()
- {
- $this->seek(0);
- }
-
- /**
- * Attempts to seek to the given position. Only supports SEEK_SET.
- *
- * {@inheritdoc}
- */
- public function seek($offset, $whence = SEEK_SET)
- {
- if (!$this->seekable) {
- throw new \RuntimeException('This AppendStream is not seekable');
- } elseif ($whence !== SEEK_SET) {
- throw new \RuntimeException('The AppendStream can only seek with SEEK_SET');
- }
-
- $this->pos = $this->current = 0;
-
- // Rewind each stream
- foreach ($this->streams as $i => $stream) {
- try {
- $stream->rewind();
- } catch (\Exception $e) {
- throw new \RuntimeException('Unable to seek stream '
- . $i . ' of the AppendStream', 0, $e);
- }
- }
-
- // Seek to the actual position by reading from each stream
- while ($this->pos < $offset && !$this->eof()) {
- $result = $this->read(min(8096, $offset - $this->pos));
- if ($result === '') {
- break;
- }
- }
- }
-
- /**
- * Reads from all of the appended streams until the length is met or EOF.
- *
- * {@inheritdoc}
- */
- public function read($length)
- {
- $buffer = '';
- $total = count($this->streams) - 1;
- $remaining = $length;
- $progressToNext = false;
-
- while ($remaining > 0) {
-
- // Progress to the next stream if needed.
- if ($progressToNext || $this->streams[$this->current]->eof()) {
- $progressToNext = false;
- if ($this->current === $total) {
- break;
- }
- $this->current++;
- }
-
- $result = $this->streams[$this->current]->read($remaining);
-
- // Using a loose comparison here to match on '', false, and null
- if ($result == null) {
- $progressToNext = true;
- continue;
- }
-
- $buffer .= $result;
- $remaining = $length - strlen($buffer);
- }
-
- $this->pos += strlen($buffer);
-
- return $buffer;
- }
-
- public function isReadable()
- {
- return true;
- }
-
- public function isWritable()
- {
- return false;
- }
-
- public function isSeekable()
- {
- return $this->seekable;
- }
-
- public function write($string)
- {
- throw new \RuntimeException('Cannot write to an AppendStream');
- }
-
- public function getMetadata($key = null)
- {
- return $key ? null : [];
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/BufferStream.php b/server/vendor/guzzlehttp/psr7/src/BufferStream.php
deleted file mode 100644
index af4d4c2..0000000
--- a/server/vendor/guzzlehttp/psr7/src/BufferStream.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Provides a buffer stream that can be written to to fill a buffer, and read
- * from to remove bytes from the buffer.
- *
- * This stream returns a "hwm" metadata value that tells upstream consumers
- * what the configured high water mark of the stream is, or the maximum
- * preferred size of the buffer.
- */
-class BufferStream implements StreamInterface
-{
- private $hwm;
- private $buffer = '';
-
- /**
- * @param int $hwm High water mark, representing the preferred maximum
- * buffer size. If the size of the buffer exceeds the high
- * water mark, then calls to write will continue to succeed
- * but will return false to inform writers to slow down
- * until the buffer has been drained by reading from it.
- */
- public function __construct($hwm = 16384)
- {
- $this->hwm = $hwm;
- }
-
- public function __toString()
- {
- return $this->getContents();
- }
-
- public function getContents()
- {
- $buffer = $this->buffer;
- $this->buffer = '';
-
- return $buffer;
- }
-
- public function close()
- {
- $this->buffer = '';
- }
-
- public function detach()
- {
- $this->close();
- }
-
- public function getSize()
- {
- return strlen($this->buffer);
- }
-
- public function isReadable()
- {
- return true;
- }
-
- public function isWritable()
- {
- return true;
- }
-
- public function isSeekable()
- {
- return false;
- }
-
- public function rewind()
- {
- $this->seek(0);
- }
-
- public function seek($offset, $whence = SEEK_SET)
- {
- throw new \RuntimeException('Cannot seek a BufferStream');
- }
-
- public function eof()
- {
- return strlen($this->buffer) === 0;
- }
-
- public function tell()
- {
- throw new \RuntimeException('Cannot determine the position of a BufferStream');
- }
-
- /**
- * Reads data from the buffer.
- */
- public function read($length)
- {
- $currentLength = strlen($this->buffer);
-
- if ($length >= $currentLength) {
- // No need to slice the buffer because we don't have enough data.
- $result = $this->buffer;
- $this->buffer = '';
- } else {
- // Slice up the result to provide a subset of the buffer.
- $result = substr($this->buffer, 0, $length);
- $this->buffer = substr($this->buffer, $length);
- }
-
- return $result;
- }
-
- /**
- * Writes data to the buffer.
- */
- public function write($string)
- {
- $this->buffer .= $string;
-
- // TODO: What should happen here?
- if (strlen($this->buffer) >= $this->hwm) {
- return false;
- }
-
- return strlen($string);
- }
-
- public function getMetadata($key = null)
- {
- if ($key == 'hwm') {
- return $this->hwm;
- }
-
- return $key ? null : [];
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/CachingStream.php b/server/vendor/guzzlehttp/psr7/src/CachingStream.php
deleted file mode 100644
index ed68f08..0000000
--- a/server/vendor/guzzlehttp/psr7/src/CachingStream.php
+++ /dev/null
@@ -1,138 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Stream decorator that can cache previously read bytes from a sequentially
- * read stream.
- */
-class CachingStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- /** @var StreamInterface Stream being wrapped */
- private $remoteStream;
-
- /** @var int Number of bytes to skip reading due to a write on the buffer */
- private $skipReadBytes = 0;
-
- /**
- * We will treat the buffer object as the body of the stream
- *
- * @param StreamInterface $stream Stream to cache
- * @param StreamInterface $target Optionally specify where data is cached
- */
- public function __construct(
- StreamInterface $stream,
- StreamInterface $target = null
- ) {
- $this->remoteStream = $stream;
- $this->stream = $target ?: new Stream(fopen('php://temp', 'r+'));
- }
-
- public function getSize()
- {
- return max($this->stream->getSize(), $this->remoteStream->getSize());
- }
-
- public function rewind()
- {
- $this->seek(0);
- }
-
- public function seek($offset, $whence = SEEK_SET)
- {
- if ($whence == SEEK_SET) {
- $byte = $offset;
- } elseif ($whence == SEEK_CUR) {
- $byte = $offset + $this->tell();
- } elseif ($whence == SEEK_END) {
- $size = $this->remoteStream->getSize();
- if ($size === null) {
- $size = $this->cacheEntireStream();
- }
- $byte = $size + $offset;
- } else {
- throw new \InvalidArgumentException('Invalid whence');
- }
-
- $diff = $byte - $this->stream->getSize();
-
- if ($diff > 0) {
- // Read the remoteStream until we have read in at least the amount
- // of bytes requested, or we reach the end of the file.
- while ($diff > 0 && !$this->remoteStream->eof()) {
- $this->read($diff);
- $diff = $byte - $this->stream->getSize();
- }
- } else {
- // We can just do a normal seek since we've already seen this byte.
- $this->stream->seek($byte);
- }
- }
-
- public function read($length)
- {
- // Perform a regular read on any previously read data from the buffer
- $data = $this->stream->read($length);
- $remaining = $length - strlen($data);
-
- // More data was requested so read from the remote stream
- if ($remaining) {
- // If data was written to the buffer in a position that would have
- // been filled from the remote stream, then we must skip bytes on
- // the remote stream to emulate overwriting bytes from that
- // position. This mimics the behavior of other PHP stream wrappers.
- $remoteData = $this->remoteStream->read(
- $remaining + $this->skipReadBytes
- );
-
- if ($this->skipReadBytes) {
- $len = strlen($remoteData);
- $remoteData = substr($remoteData, $this->skipReadBytes);
- $this->skipReadBytes = max(0, $this->skipReadBytes - $len);
- }
-
- $data .= $remoteData;
- $this->stream->write($remoteData);
- }
-
- return $data;
- }
-
- public function write($string)
- {
- // When appending to the end of the currently read stream, you'll want
- // to skip bytes from being read from the remote stream to emulate
- // other stream wrappers. Basically replacing bytes of data of a fixed
- // length.
- $overflow = (strlen($string) + $this->tell()) - $this->remoteStream->tell();
- if ($overflow > 0) {
- $this->skipReadBytes += $overflow;
- }
-
- return $this->stream->write($string);
- }
-
- public function eof()
- {
- return $this->stream->eof() && $this->remoteStream->eof();
- }
-
- /**
- * Close both the remote stream and buffer stream
- */
- public function close()
- {
- $this->remoteStream->close() && $this->stream->close();
- }
-
- private function cacheEntireStream()
- {
- $target = new FnStream(['write' => 'strlen']);
- copy_to_stream($this, $target);
-
- return $this->tell();
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/DroppingStream.php b/server/vendor/guzzlehttp/psr7/src/DroppingStream.php
deleted file mode 100644
index 8935c80..0000000
--- a/server/vendor/guzzlehttp/psr7/src/DroppingStream.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Stream decorator that begins dropping data once the size of the underlying
- * stream becomes too full.
- */
-class DroppingStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- private $maxLength;
-
- /**
- * @param StreamInterface $stream Underlying stream to decorate.
- * @param int $maxLength Maximum size before dropping data.
- */
- public function __construct(StreamInterface $stream, $maxLength)
- {
- $this->stream = $stream;
- $this->maxLength = $maxLength;
- }
-
- public function write($string)
- {
- $diff = $this->maxLength - $this->stream->getSize();
-
- // Begin returning 0 when the underlying stream is too large.
- if ($diff <= 0) {
- return 0;
- }
-
- // Write the stream or a subset of the stream if needed.
- if (strlen($string) < $diff) {
- return $this->stream->write($string);
- }
-
- return $this->stream->write(substr($string, 0, $diff));
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/FnStream.php b/server/vendor/guzzlehttp/psr7/src/FnStream.php
deleted file mode 100644
index cc9b445..0000000
--- a/server/vendor/guzzlehttp/psr7/src/FnStream.php
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Compose stream implementations based on a hash of functions.
- *
- * Allows for easy testing and extension of a provided stream without needing
- * to create a concrete class for a simple extension point.
- */
-class FnStream implements StreamInterface
-{
- /** @var array */
- private $methods;
-
- /** @var array Methods that must be implemented in the given array */
- private static $slots = ['__toString', 'close', 'detach', 'rewind',
- 'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',
- 'isReadable', 'read', 'getContents', 'getMetadata'];
-
- /**
- * @param array $methods Hash of method name to a callable.
- */
- public function __construct(array $methods)
- {
- $this->methods = $methods;
-
- // Create the functions on the class
- foreach ($methods as $name => $fn) {
- $this->{'_fn_' . $name} = $fn;
- }
- }
-
- /**
- * Lazily determine which methods are not implemented.
- * @throws \BadMethodCallException
- */
- public function __get($name)
- {
- throw new \BadMethodCallException(str_replace('_fn_', '', $name)
- . '() is not implemented in the FnStream');
- }
-
- /**
- * The close method is called on the underlying stream only if possible.
- */
- public function __destruct()
- {
- if (isset($this->_fn_close)) {
- call_user_func($this->_fn_close);
- }
- }
-
- /**
- * Adds custom functionality to an underlying stream by intercepting
- * specific method calls.
- *
- * @param StreamInterface $stream Stream to decorate
- * @param array $methods Hash of method name to a closure
- *
- * @return FnStream
- */
- public static function decorate(StreamInterface $stream, array $methods)
- {
- // If any of the required methods were not provided, then simply
- // proxy to the decorated stream.
- foreach (array_diff(self::$slots, array_keys($methods)) as $diff) {
- $methods[$diff] = [$stream, $diff];
- }
-
- return new self($methods);
- }
-
- public function __toString()
- {
- return call_user_func($this->_fn___toString);
- }
-
- public function close()
- {
- return call_user_func($this->_fn_close);
- }
-
- public function detach()
- {
- return call_user_func($this->_fn_detach);
- }
-
- public function getSize()
- {
- return call_user_func($this->_fn_getSize);
- }
-
- public function tell()
- {
- return call_user_func($this->_fn_tell);
- }
-
- public function eof()
- {
- return call_user_func($this->_fn_eof);
- }
-
- public function isSeekable()
- {
- return call_user_func($this->_fn_isSeekable);
- }
-
- public function rewind()
- {
- call_user_func($this->_fn_rewind);
- }
-
- public function seek($offset, $whence = SEEK_SET)
- {
- call_user_func($this->_fn_seek, $offset, $whence);
- }
-
- public function isWritable()
- {
- return call_user_func($this->_fn_isWritable);
- }
-
- public function write($string)
- {
- return call_user_func($this->_fn_write, $string);
- }
-
- public function isReadable()
- {
- return call_user_func($this->_fn_isReadable);
- }
-
- public function read($length)
- {
- return call_user_func($this->_fn_read, $length);
- }
-
- public function getContents()
- {
- return call_user_func($this->_fn_getContents);
- }
-
- public function getMetadata($key = null)
- {
- return call_user_func($this->_fn_getMetadata, $key);
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/InflateStream.php b/server/vendor/guzzlehttp/psr7/src/InflateStream.php
deleted file mode 100644
index 0051d3f..0000000
--- a/server/vendor/guzzlehttp/psr7/src/InflateStream.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Uses PHP's zlib.inflate filter to inflate deflate or gzipped content.
- *
- * This stream decorator skips the first 10 bytes of the given stream to remove
- * the gzip header, converts the provided stream to a PHP stream resource,
- * then appends the zlib.inflate filter. The stream is then converted back
- * to a Guzzle stream resource to be used as a Guzzle stream.
- *
- * @link http://tools.ietf.org/html/rfc1952
- * @link http://php.net/manual/en/filters.compression.php
- */
-class InflateStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- public function __construct(StreamInterface $stream)
- {
- // read the first 10 bytes, ie. gzip header
- $header = $stream->read(10);
- $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header);
- // Skip the header, that is 10 + length of filename + 1 (nil) bytes
- $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength);
- $resource = StreamWrapper::getResource($stream);
- stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
- $this->stream = new Stream($resource);
- }
-
- /**
- * @param StreamInterface $stream
- * @param $header
- * @return int
- */
- private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header)
- {
- $filename_header_length = 0;
-
- if (substr(bin2hex($header), 6, 2) === '08') {
- // we have a filename, read until nil
- $filename_header_length = 1;
- while ($stream->read(1) !== chr(0)) {
- $filename_header_length++;
- }
- }
-
- return $filename_header_length;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/LazyOpenStream.php b/server/vendor/guzzlehttp/psr7/src/LazyOpenStream.php
deleted file mode 100644
index 02cec3a..0000000
--- a/server/vendor/guzzlehttp/psr7/src/LazyOpenStream.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Lazily reads or writes to a file that is opened only after an IO operation
- * take place on the stream.
- */
-class LazyOpenStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- /** @var string File to open */
- private $filename;
-
- /** @var string $mode */
- private $mode;
-
- /**
- * @param string $filename File to lazily open
- * @param string $mode fopen mode to use when opening the stream
- */
- public function __construct($filename, $mode)
- {
- $this->filename = $filename;
- $this->mode = $mode;
- }
-
- /**
- * Creates the underlying stream lazily when required.
- *
- * @return StreamInterface
- */
- protected function createStream()
- {
- return stream_for(try_fopen($this->filename, $this->mode));
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/LimitStream.php b/server/vendor/guzzlehttp/psr7/src/LimitStream.php
deleted file mode 100644
index 3c13d4f..0000000
--- a/server/vendor/guzzlehttp/psr7/src/LimitStream.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-
-/**
- * Decorator used to return only a subset of a stream
- */
-class LimitStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- /** @var int Offset to start reading from */
- private $offset;
-
- /** @var int Limit the number of bytes that can be read */
- private $limit;
-
- /**
- * @param StreamInterface $stream Stream to wrap
- * @param int $limit Total number of bytes to allow to be read
- * from the stream. Pass -1 for no limit.
- * @param int $offset Position to seek to before reading (only
- * works on seekable streams).
- */
- public function __construct(
- StreamInterface $stream,
- $limit = -1,
- $offset = 0
- ) {
- $this->stream = $stream;
- $this->setLimit($limit);
- $this->setOffset($offset);
- }
-
- public function eof()
- {
- // Always return true if the underlying stream is EOF
- if ($this->stream->eof()) {
- return true;
- }
-
- // No limit and the underlying stream is not at EOF
- if ($this->limit == -1) {
- return false;
- }
-
- return $this->stream->tell() >= $this->offset + $this->limit;
- }
-
- /**
- * Returns the size of the limited subset of data
- * {@inheritdoc}
- */
- public function getSize()
- {
- if (null === ($length = $this->stream->getSize())) {
- return null;
- } elseif ($this->limit == -1) {
- return $length - $this->offset;
- } else {
- return min($this->limit, $length - $this->offset);
- }
- }
-
- /**
- * Allow for a bounded seek on the read limited stream
- * {@inheritdoc}
- */
- public function seek($offset, $whence = SEEK_SET)
- {
- if ($whence !== SEEK_SET || $offset < 0) {
- throw new \RuntimeException(sprintf(
- 'Cannot seek to offset % with whence %s',
- $offset,
- $whence
- ));
- }
-
- $offset += $this->offset;
-
- if ($this->limit !== -1) {
- if ($offset > $this->offset + $this->limit) {
- $offset = $this->offset + $this->limit;
- }
- }
-
- $this->stream->seek($offset);
- }
-
- /**
- * Give a relative tell()
- * {@inheritdoc}
- */
- public function tell()
- {
- return $this->stream->tell() - $this->offset;
- }
-
- /**
- * Set the offset to start limiting from
- *
- * @param int $offset Offset to seek to and begin byte limiting from
- *
- * @throws \RuntimeException if the stream cannot be seeked.
- */
- public function setOffset($offset)
- {
- $current = $this->stream->tell();
-
- if ($current !== $offset) {
- // If the stream cannot seek to the offset position, then read to it
- if ($this->stream->isSeekable()) {
- $this->stream->seek($offset);
- } elseif ($current > $offset) {
- throw new \RuntimeException("Could not seek to stream offset $offset");
- } else {
- $this->stream->read($offset - $current);
- }
- }
-
- $this->offset = $offset;
- }
-
- /**
- * Set the limit of bytes that the decorator allows to be read from the
- * stream.
- *
- * @param int $limit Number of bytes to allow to be read from the stream.
- * Use -1 for no limit.
- */
- public function setLimit($limit)
- {
- $this->limit = $limit;
- }
-
- public function read($length)
- {
- if ($this->limit == -1) {
- return $this->stream->read($length);
- }
-
- // Check if the current position is less than the total allowed
- // bytes + original offset
- $remaining = ($this->offset + $this->limit) - $this->stream->tell();
- if ($remaining > 0) {
- // Only return the amount of requested data, ensuring that the byte
- // limit is not exceeded
- return $this->stream->read(min($remaining, $length));
- }
-
- return '';
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/MessageTrait.php b/server/vendor/guzzlehttp/psr7/src/MessageTrait.php
deleted file mode 100644
index 1e4da64..0000000
--- a/server/vendor/guzzlehttp/psr7/src/MessageTrait.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Trait implementing functionality common to requests and responses.
- */
-trait MessageTrait
-{
- /** @var array Map of all registered headers, as original name => array of values */
- private $headers = [];
-
- /** @var array Map of lowercase header name => original name at registration */
- private $headerNames = [];
-
- /** @var string */
- private $protocol = '1.1';
-
- /** @var StreamInterface */
- private $stream;
-
- public function getProtocolVersion()
- {
- return $this->protocol;
- }
-
- public function withProtocolVersion($version)
- {
- if ($this->protocol === $version) {
- return $this;
- }
-
- $new = clone $this;
- $new->protocol = $version;
- return $new;
- }
-
- public function getHeaders()
- {
- return $this->headers;
- }
-
- public function hasHeader($header)
- {
- return isset($this->headerNames[strtolower($header)]);
- }
-
- public function getHeader($header)
- {
- $header = strtolower($header);
-
- if (!isset($this->headerNames[$header])) {
- return [];
- }
-
- $header = $this->headerNames[$header];
-
- return $this->headers[$header];
- }
-
- public function getHeaderLine($header)
- {
- return implode(', ', $this->getHeader($header));
- }
-
- public function withHeader($header, $value)
- {
- if (!is_array($value)) {
- $value = [$value];
- }
-
- $value = $this->trimHeaderValues($value);
- $normalized = strtolower($header);
-
- $new = clone $this;
- if (isset($new->headerNames[$normalized])) {
- unset($new->headers[$new->headerNames[$normalized]]);
- }
- $new->headerNames[$normalized] = $header;
- $new->headers[$header] = $value;
-
- return $new;
- }
-
- public function withAddedHeader($header, $value)
- {
- if (!is_array($value)) {
- $value = [$value];
- }
-
- $value = $this->trimHeaderValues($value);
- $normalized = strtolower($header);
-
- $new = clone $this;
- if (isset($new->headerNames[$normalized])) {
- $header = $this->headerNames[$normalized];
- $new->headers[$header] = array_merge($this->headers[$header], $value);
- } else {
- $new->headerNames[$normalized] = $header;
- $new->headers[$header] = $value;
- }
-
- return $new;
- }
-
- public function withoutHeader($header)
- {
- $normalized = strtolower($header);
-
- if (!isset($this->headerNames[$normalized])) {
- return $this;
- }
-
- $header = $this->headerNames[$normalized];
-
- $new = clone $this;
- unset($new->headers[$header], $new->headerNames[$normalized]);
-
- return $new;
- }
-
- public function getBody()
- {
- if (!$this->stream) {
- $this->stream = stream_for('');
- }
-
- return $this->stream;
- }
-
- public function withBody(StreamInterface $body)
- {
- if ($body === $this->stream) {
- return $this;
- }
-
- $new = clone $this;
- $new->stream = $body;
- return $new;
- }
-
- private function setHeaders(array $headers)
- {
- $this->headerNames = $this->headers = [];
- foreach ($headers as $header => $value) {
- if (!is_array($value)) {
- $value = [$value];
- }
-
- $value = $this->trimHeaderValues($value);
- $normalized = strtolower($header);
- if (isset($this->headerNames[$normalized])) {
- $header = $this->headerNames[$normalized];
- $this->headers[$header] = array_merge($this->headers[$header], $value);
- } else {
- $this->headerNames[$normalized] = $header;
- $this->headers[$header] = $value;
- }
- }
- }
-
- /**
- * Trims whitespace from the header values.
- *
- * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field.
- *
- * header-field = field-name ":" OWS field-value OWS
- * OWS = *( SP / HTAB )
- *
- * @param string[] $values Header values
- *
- * @return string[] Trimmed header values
- *
- * @see https://tools.ietf.org/html/rfc7230#section-3.2.4
- */
- private function trimHeaderValues(array $values)
- {
- return array_map(function ($value) {
- return trim($value, " \t");
- }, $values);
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/MultipartStream.php b/server/vendor/guzzlehttp/psr7/src/MultipartStream.php
deleted file mode 100644
index c0fd584..0000000
--- a/server/vendor/guzzlehttp/psr7/src/MultipartStream.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Stream that when read returns bytes for a streaming multipart or
- * multipart/form-data stream.
- */
-class MultipartStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- private $boundary;
-
- /**
- * @param array $elements Array of associative arrays, each containing a
- * required "name" key mapping to the form field,
- * name, a required "contents" key mapping to a
- * StreamInterface/resource/string, an optional
- * "headers" associative array of custom headers,
- * and an optional "filename" key mapping to a
- * string to send as the filename in the part.
- * @param string $boundary You can optionally provide a specific boundary
- *
- * @throws \InvalidArgumentException
- */
- public function __construct(array $elements = [], $boundary = null)
- {
- $this->boundary = $boundary ?: sha1(uniqid('', true));
- $this->stream = $this->createStream($elements);
- }
-
- /**
- * Get the boundary
- *
- * @return string
- */
- public function getBoundary()
- {
- return $this->boundary;
- }
-
- public function isWritable()
- {
- return false;
- }
-
- /**
- * Get the headers needed before transferring the content of a POST file
- */
- private function getHeaders(array $headers)
- {
- $str = '';
- foreach ($headers as $key => $value) {
- $str .= "{$key}: {$value}\r\n";
- }
-
- return "--{$this->boundary}\r\n" . trim($str) . "\r\n\r\n";
- }
-
- /**
- * Create the aggregate stream that will be used to upload the POST data
- */
- protected function createStream(array $elements)
- {
- $stream = new AppendStream();
-
- foreach ($elements as $element) {
- $this->addElement($stream, $element);
- }
-
- // Add the trailing boundary with CRLF
- $stream->addStream(stream_for("--{$this->boundary}--\r\n"));
-
- return $stream;
- }
-
- private function addElement(AppendStream $stream, array $element)
- {
- foreach (['contents', 'name'] as $key) {
- if (!array_key_exists($key, $element)) {
- throw new \InvalidArgumentException("A '{$key}' key is required");
- }
- }
-
- $element['contents'] = stream_for($element['contents']);
-
- if (empty($element['filename'])) {
- $uri = $element['contents']->getMetadata('uri');
- if (substr($uri, 0, 6) !== 'php://') {
- $element['filename'] = $uri;
- }
- }
-
- list($body, $headers) = $this->createElement(
- $element['name'],
- $element['contents'],
- isset($element['filename']) ? $element['filename'] : null,
- isset($element['headers']) ? $element['headers'] : []
- );
-
- $stream->addStream(stream_for($this->getHeaders($headers)));
- $stream->addStream($body);
- $stream->addStream(stream_for("\r\n"));
- }
-
- /**
- * @return array
- */
- private function createElement($name, StreamInterface $stream, $filename, array $headers)
- {
- // Set a default content-disposition header if one was no provided
- $disposition = $this->getHeader($headers, 'content-disposition');
- if (!$disposition) {
- $headers['Content-Disposition'] = ($filename === '0' || $filename)
- ? sprintf('form-data; name="%s"; filename="%s"',
- $name,
- basename($filename))
- : "form-data; name=\"{$name}\"";
- }
-
- // Set a default content-length header if one was no provided
- $length = $this->getHeader($headers, 'content-length');
- if (!$length) {
- if ($length = $stream->getSize()) {
- $headers['Content-Length'] = (string) $length;
- }
- }
-
- // Set a default Content-Type if one was not supplied
- $type = $this->getHeader($headers, 'content-type');
- if (!$type && ($filename === '0' || $filename)) {
- if ($type = mimetype_from_filename($filename)) {
- $headers['Content-Type'] = $type;
- }
- }
-
- return [$stream, $headers];
- }
-
- private function getHeader(array $headers, $key)
- {
- $lowercaseHeader = strtolower($key);
- foreach ($headers as $k => $v) {
- if (strtolower($k) === $lowercaseHeader) {
- return $v;
- }
- }
-
- return null;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/NoSeekStream.php b/server/vendor/guzzlehttp/psr7/src/NoSeekStream.php
deleted file mode 100644
index 2332218..0000000
--- a/server/vendor/guzzlehttp/psr7/src/NoSeekStream.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Stream decorator that prevents a stream from being seeked
- */
-class NoSeekStream implements StreamInterface
-{
- use StreamDecoratorTrait;
-
- public function seek($offset, $whence = SEEK_SET)
- {
- throw new \RuntimeException('Cannot seek a NoSeekStream');
- }
-
- public function isSeekable()
- {
- return false;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/PumpStream.php b/server/vendor/guzzlehttp/psr7/src/PumpStream.php
deleted file mode 100644
index ffb5440..0000000
--- a/server/vendor/guzzlehttp/psr7/src/PumpStream.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Provides a read only stream that pumps data from a PHP callable.
- *
- * When invoking the provided callable, the PumpStream will pass the amount of
- * data requested to read to the callable. The callable can choose to ignore
- * this value and return fewer or more bytes than requested. Any extra data
- * returned by the provided callable is buffered internally until drained using
- * the read() function of the PumpStream. The provided callable MUST return
- * false when there is no more data to read.
- */
-class PumpStream implements StreamInterface
-{
- /** @var callable */
- private $source;
-
- /** @var int */
- private $size;
-
- /** @var int */
- private $tellPos = 0;
-
- /** @var array */
- private $metadata;
-
- /** @var BufferStream */
- private $buffer;
-
- /**
- * @param callable $source Source of the stream data. The callable MAY
- * accept an integer argument used to control the
- * amount of data to return. The callable MUST
- * return a string when called, or false on error
- * or EOF.
- * @param array $options Stream options:
- * - metadata: Hash of metadata to use with stream.
- * - size: Size of the stream, if known.
- */
- public function __construct(callable $source, array $options = [])
- {
- $this->source = $source;
- $this->size = isset($options['size']) ? $options['size'] : null;
- $this->metadata = isset($options['metadata']) ? $options['metadata'] : [];
- $this->buffer = new BufferStream();
- }
-
- public function __toString()
- {
- try {
- return copy_to_string($this);
- } catch (\Exception $e) {
- return '';
- }
- }
-
- public function close()
- {
- $this->detach();
- }
-
- public function detach()
- {
- $this->tellPos = false;
- $this->source = null;
- }
-
- public function getSize()
- {
- return $this->size;
- }
-
- public function tell()
- {
- return $this->tellPos;
- }
-
- public function eof()
- {
- return !$this->source;
- }
-
- public function isSeekable()
- {
- return false;
- }
-
- public function rewind()
- {
- $this->seek(0);
- }
-
- public function seek($offset, $whence = SEEK_SET)
- {
- throw new \RuntimeException('Cannot seek a PumpStream');
- }
-
- public function isWritable()
- {
- return false;
- }
-
- public function write($string)
- {
- throw new \RuntimeException('Cannot write to a PumpStream');
- }
-
- public function isReadable()
- {
- return true;
- }
-
- public function read($length)
- {
- $data = $this->buffer->read($length);
- $readLen = strlen($data);
- $this->tellPos += $readLen;
- $remaining = $length - $readLen;
-
- if ($remaining) {
- $this->pump($remaining);
- $data .= $this->buffer->read($remaining);
- $this->tellPos += strlen($data) - $readLen;
- }
-
- return $data;
- }
-
- public function getContents()
- {
- $result = '';
- while (!$this->eof()) {
- $result .= $this->read(1000000);
- }
-
- return $result;
- }
-
- public function getMetadata($key = null)
- {
- if (!$key) {
- return $this->metadata;
- }
-
- return isset($this->metadata[$key]) ? $this->metadata[$key] : null;
- }
-
- private function pump($length)
- {
- if ($this->source) {
- do {
- $data = call_user_func($this->source, $length);
- if ($data === false || $data === null) {
- $this->source = null;
- return;
- }
- $this->buffer->write($data);
- $length -= strlen($data);
- } while ($length > 0);
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/Request.php b/server/vendor/guzzlehttp/psr7/src/Request.php
deleted file mode 100644
index 0828548..0000000
--- a/server/vendor/guzzlehttp/psr7/src/Request.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UriInterface;
-
-/**
- * PSR-7 request implementation.
- */
-class Request implements RequestInterface
-{
- use MessageTrait;
-
- /** @var string */
- private $method;
-
- /** @var null|string */
- private $requestTarget;
-
- /** @var UriInterface */
- private $uri;
-
- /**
- * @param string $method HTTP method
- * @param string|UriInterface $uri URI
- * @param array $headers Request headers
- * @param string|null|resource|StreamInterface $body Request body
- * @param string $version Protocol version
- */
- public function __construct(
- $method,
- $uri,
- array $headers = [],
- $body = null,
- $version = '1.1'
- ) {
- if (!($uri instanceof UriInterface)) {
- $uri = new Uri($uri);
- }
-
- $this->method = strtoupper($method);
- $this->uri = $uri;
- $this->setHeaders($headers);
- $this->protocol = $version;
-
- if (!$this->hasHeader('Host')) {
- $this->updateHostFromUri();
- }
-
- if ($body !== '' && $body !== null) {
- $this->stream = stream_for($body);
- }
- }
-
- public function getRequestTarget()
- {
- if ($this->requestTarget !== null) {
- return $this->requestTarget;
- }
-
- $target = $this->uri->getPath();
- if ($target == '') {
- $target = '/';
- }
- if ($this->uri->getQuery() != '') {
- $target .= '?' . $this->uri->getQuery();
- }
-
- return $target;
- }
-
- public function withRequestTarget($requestTarget)
- {
- if (preg_match('#\s#', $requestTarget)) {
- throw new InvalidArgumentException(
- 'Invalid request target provided; cannot contain whitespace'
- );
- }
-
- $new = clone $this;
- $new->requestTarget = $requestTarget;
- return $new;
- }
-
- public function getMethod()
- {
- return $this->method;
- }
-
- public function withMethod($method)
- {
- $new = clone $this;
- $new->method = strtoupper($method);
- return $new;
- }
-
- public function getUri()
- {
- return $this->uri;
- }
-
- public function withUri(UriInterface $uri, $preserveHost = false)
- {
- if ($uri === $this->uri) {
- return $this;
- }
-
- $new = clone $this;
- $new->uri = $uri;
-
- if (!$preserveHost) {
- $new->updateHostFromUri();
- }
-
- return $new;
- }
-
- private function updateHostFromUri()
- {
- $host = $this->uri->getHost();
-
- if ($host == '') {
- return;
- }
-
- if (($port = $this->uri->getPort()) !== null) {
- $host .= ':' . $port;
- }
-
- if (isset($this->headerNames['host'])) {
- $header = $this->headerNames['host'];
- } else {
- $header = 'Host';
- $this->headerNames['host'] = 'Host';
- }
- // Ensure Host is the first header.
- // See: http://tools.ietf.org/html/rfc7230#section-5.4
- $this->headers = [$header => [$host]] + $this->headers;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/Response.php b/server/vendor/guzzlehttp/psr7/src/Response.php
deleted file mode 100644
index 2830c6c..0000000
--- a/server/vendor/guzzlehttp/psr7/src/Response.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\StreamInterface;
-
-/**
- * PSR-7 response implementation.
- */
-class Response implements ResponseInterface
-{
- use MessageTrait;
-
- /** @var array Map of standard HTTP status code/reason phrases */
- private static $phrases = [
- 100 => 'Continue',
- 101 => 'Switching Protocols',
- 102 => 'Processing',
- 200 => 'OK',
- 201 => 'Created',
- 202 => 'Accepted',
- 203 => 'Non-Authoritative Information',
- 204 => 'No Content',
- 205 => 'Reset Content',
- 206 => 'Partial Content',
- 207 => 'Multi-status',
- 208 => 'Already Reported',
- 300 => 'Multiple Choices',
- 301 => 'Moved Permanently',
- 302 => 'Found',
- 303 => 'See Other',
- 304 => 'Not Modified',
- 305 => 'Use Proxy',
- 306 => 'Switch Proxy',
- 307 => 'Temporary Redirect',
- 400 => 'Bad Request',
- 401 => 'Unauthorized',
- 402 => 'Payment Required',
- 403 => 'Forbidden',
- 404 => 'Not Found',
- 405 => 'Method Not Allowed',
- 406 => 'Not Acceptable',
- 407 => 'Proxy Authentication Required',
- 408 => 'Request Time-out',
- 409 => 'Conflict',
- 410 => 'Gone',
- 411 => 'Length Required',
- 412 => 'Precondition Failed',
- 413 => 'Request Entity Too Large',
- 414 => 'Request-URI Too Large',
- 415 => 'Unsupported Media Type',
- 416 => 'Requested range not satisfiable',
- 417 => 'Expectation Failed',
- 418 => 'I\'m a teapot',
- 422 => 'Unprocessable Entity',
- 423 => 'Locked',
- 424 => 'Failed Dependency',
- 425 => 'Unordered Collection',
- 426 => 'Upgrade Required',
- 428 => 'Precondition Required',
- 429 => 'Too Many Requests',
- 431 => 'Request Header Fields Too Large',
- 451 => 'Unavailable For Legal Reasons',
- 500 => 'Internal Server Error',
- 501 => 'Not Implemented',
- 502 => 'Bad Gateway',
- 503 => 'Service Unavailable',
- 504 => 'Gateway Time-out',
- 505 => 'HTTP Version not supported',
- 506 => 'Variant Also Negotiates',
- 507 => 'Insufficient Storage',
- 508 => 'Loop Detected',
- 511 => 'Network Authentication Required',
- ];
-
- /** @var string */
- private $reasonPhrase = '';
-
- /** @var int */
- private $statusCode = 200;
-
- /**
- * @param int $status Status code
- * @param array $headers Response headers
- * @param string|null|resource|StreamInterface $body Response body
- * @param string $version Protocol version
- * @param string|null $reason Reason phrase (when empty a default will be used based on the status code)
- */
- public function __construct(
- $status = 200,
- array $headers = [],
- $body = null,
- $version = '1.1',
- $reason = null
- ) {
- $this->statusCode = (int) $status;
-
- if ($body !== '' && $body !== null) {
- $this->stream = stream_for($body);
- }
-
- $this->setHeaders($headers);
- if ($reason == '' && isset(self::$phrases[$this->statusCode])) {
- $this->reasonPhrase = self::$phrases[$this->statusCode];
- } else {
- $this->reasonPhrase = (string) $reason;
- }
-
- $this->protocol = $version;
- }
-
- public function getStatusCode()
- {
- return $this->statusCode;
- }
-
- public function getReasonPhrase()
- {
- return $this->reasonPhrase;
- }
-
- public function withStatus($code, $reasonPhrase = '')
- {
- $new = clone $this;
- $new->statusCode = (int) $code;
- if ($reasonPhrase == '' && isset(self::$phrases[$new->statusCode])) {
- $reasonPhrase = self::$phrases[$new->statusCode];
- }
- $new->reasonPhrase = $reasonPhrase;
- return $new;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/ServerRequest.php b/server/vendor/guzzlehttp/psr7/src/ServerRequest.php
deleted file mode 100644
index 575aab8..0000000
--- a/server/vendor/guzzlehttp/psr7/src/ServerRequest.php
+++ /dev/null
@@ -1,358 +0,0 @@
-<?php
-
-namespace GuzzleHttp\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\UriInterface;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UploadedFileInterface;
-
-/**
- * Server-side HTTP request
- *
- * Extends the Request definition to add methods for accessing incoming data,
- * specifically server parameters, cookies, matched path parameters, query
- * string arguments, body parameters, and upload file information.
- *
- * "Attributes" are discovered via decomposing the request (and usually
- * specifically the URI path), and typically will be injected by the application.
- *
- * Requests are considered immutable; all methods that might change state are
- * implemented such that they retain the internal state of the current
- * message and return a new instance that contains the changed state.
- */
-class ServerRequest extends Request implements ServerRequestInterface
-{
- /**
- * @var array
- */
- private $attributes = [];
-
- /**
- * @var array
- */
- private $cookieParams = [];
-
- /**
- * @var null|array|object
- */
- private $parsedBody;
-
- /**
- * @var array
- */
- private $queryParams = [];
-
- /**
- * @var array
- */
- private $serverParams;
-
- /**
- * @var array
- */
- private $uploadedFiles = [];
-
- /**
- * @param string $method HTTP method
- * @param string|UriInterface $uri URI
- * @param array $headers Request headers
- * @param string|null|resource|StreamInterface $body Request body
- * @param string $version Protocol version
- * @param array $serverParams Typically the $_SERVER superglobal
- */
- public function __construct(
- $method,
- $uri,
- array $headers = [],
- $body = null,
- $version = '1.1',
- array $serverParams = []
- ) {
- $this->serverParams = $serverParams;
-
- parent::__construct($method, $uri, $headers, $body, $version);
- }
-
- /**
- * Return an UploadedFile instance array.
- *
- * @param array $files A array which respect $_FILES structure
- * @throws InvalidArgumentException for unrecognized values
- * @return array
- */
- public static function normalizeFiles(array $files)
- {
- $normalized = [];
-
- foreach ($files as $key => $value) {
- if ($value instanceof UploadedFileInterface) {
- $normalized[$key] = $value;
- } elseif (is_array($value) && isset($value['tmp_name'])) {
- $normalized[$key] = self::createUploadedFileFromSpec($value);
- } elseif (is_array($value)) {
- $normalized[$key] = self::normalizeFiles($value);
- continue;
- } else {
- throw new InvalidArgumentException('Invalid value in files specification');
- }
- }
-
- return $normalized;
- }
-
- /**
- * Create and return an UploadedFile instance from a $_FILES specification.
- *
- * If the specification represents an array of values, this method will
- * delegate to normalizeNestedFileSpec() and return that return value.
- *
- * @param array $value $_FILES struct
- * @return array|UploadedFileInterface
- */
- private static function createUploadedFileFromSpec(array $value)
- {
- if (is_array($value['tmp_name'])) {
- return self::normalizeNestedFileSpec($value);
- }
-
- return new UploadedFile(
- $value['tmp_name'],
- (int) $value['size'],
- (int) $value['error'],
- $value['name'],
- $value['type']
- );
- }
-
- /**
- * Normalize an array of file specifications.
- *
- * Loops through all nested files and returns a normalized array of
- * UploadedFileInterface instances.
- *
- * @param array $files
- * @return UploadedFileInterface[]
- */
- private static function normalizeNestedFileSpec(array $files = [])
- {
- $normalizedFiles = [];
-
- foreach (array_keys($files['tmp_name']) as $key) {
- $spec = [
- 'tmp_name' => $files['tmp_name'][$key],
- 'size' => $files['size'][$key],
- 'error' => $files['error'][$key],
- 'name' => $files['name'][$key],
- 'type' => $files['type'][$key],
- ];
- $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);
- }
-
- return $normalizedFiles;
- }
-
- /**
- * Return a ServerRequest populated with superglobals:
- * $_GET
- * $_POST
- * $_COOKIE
- * $_FILES
- * $_SERVER
- *
- * @return ServerRequestInterface
- */
- public static function fromGlobals()
- {
- $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET';
- $headers = function_exists('getallheaders') ? getallheaders() : [];
- $uri = self::getUriFromGlobals();
- $body = new LazyOpenStream('php://input', 'r+');
- $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1';
-
- $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER);
-
- return $serverRequest
- ->withCookieParams($_COOKIE)
- ->withQueryParams($_GET)
- ->withParsedBody($_POST)
- ->withUploadedFiles(self::normalizeFiles($_FILES));
- }
-
- /**
- * Get a Uri populated with values from $_SERVER.
- *
- * @return UriInterface
- */
- public static function getUriFromGlobals() {
- $uri = new Uri('');
-
- $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http');
-
- $hasPort = false;
- if (isset($_SERVER['HTTP_HOST'])) {
- $hostHeaderParts = explode(':', $_SERVER['HTTP_HOST']);
- $uri = $uri->withHost($hostHeaderParts[0]);
- if (isset($hostHeaderParts[1])) {
- $hasPort = true;
- $uri = $uri->withPort($hostHeaderParts[1]);
- }
- } elseif (isset($_SERVER['SERVER_NAME'])) {
- $uri = $uri->withHost($_SERVER['SERVER_NAME']);
- } elseif (isset($_SERVER['SERVER_ADDR'])) {
- $uri = $uri->withHost($_SERVER['SERVER_ADDR']);
- }
-
- if (!$hasPort && isset($_SERVER['SERVER_PORT'])) {
- $uri = $uri->withPort($_SERVER['SERVER_PORT']);
- }
-
- $hasQuery = false;
- if (isset($_SERVER['REQUEST_URI'])) {
- $requestUriParts = explode('?', $_SERVER['REQUEST_URI']);
- $uri = $uri->withPath($requestUriParts[0]);
- if (isset($requestUriParts[1])) {
- $hasQuery = true;
- $uri = $uri->withQuery($requestUriParts[1]);
- }
- }
-
- if (!$hasQuery && isset($_SERVER['QUERY_STRING'])) {
- $uri = $uri->withQuery($_SERVER['QUERY_STRING']);
- }
-
- return $uri;
- }
-
-
- /**
- * {@inheritdoc}
- */
- public function getServerParams()
- {
- return $this->serverParams;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getUploadedFiles()
- {
- return $this->uploadedFiles;
- }
-
- /**
- * {@inheritdoc}
- */
- public function withUploadedFiles(array $uploadedFiles)
- {
- $new = clone $this;
- $new->uploadedFiles = $uploadedFiles;
-
- return $new;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getCookieParams()
- {
- return $this->cookieParams;
- }
-
- /**
- * {@inheritdoc}
- */
- public function withCookieParams(array $cookies)
- {
- $new = clone $this;
- $new->cookieParams = $cookies;
-
- return $new;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getQueryParams()
- {
- return $this->queryParams;
- }
-
- /**
- * {@inheritdoc}
- */
- public function withQueryParams(array $query)
- {
- $new = clone $this;
- $new->queryParams = $query;
-
- return $new;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getParsedBody()
- {
- return $this->parsedBody;
- }
-
- /**
- * {@inheritdoc}
- */
- public function withParsedBody($data)
- {
- $new = clone $this;
- $new->parsedBody = $data;
-
- return $new;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getAttributes()
- {
- return $this->attributes;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getAttribute($attribute, $default = null)
- {
- if (false === array_key_exists($attribute, $this->attributes)) {
- return $default;
- }
-
- return $this->attributes[$attribute];
- }
-
- /**
- * {@inheritdoc}
- */
- public function withAttribute($attribute, $value)
- {
- $new = clone $this;
- $new->attributes[$attribute] = $value;
-
- return $new;
- }
-
- /**
- * {@inheritdoc}
- */
- public function withoutAttribute($attribute)
- {
- if (false === array_key_exists($attribute, $this->attributes)) {
- return $this;
- }
-
- $new = clone $this;
- unset($new->attributes[$attribute]);
-
- return $new;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/Stream.php b/server/vendor/guzzlehttp/psr7/src/Stream.php
deleted file mode 100644
index e336628..0000000
--- a/server/vendor/guzzlehttp/psr7/src/Stream.php
+++ /dev/null
@@ -1,257 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * PHP stream implementation.
- *
- * @var $stream
- */
-class Stream implements StreamInterface
-{
- private $stream;
- private $size;
- private $seekable;
- private $readable;
- private $writable;
- private $uri;
- private $customMetadata;
-
- /** @var array Hash of readable and writable stream types */
- private static $readWriteHash = [
- 'read' => [
- 'r' => true, 'w+' => true, 'r+' => true, 'x+' => true, 'c+' => true,
- 'rb' => true, 'w+b' => true, 'r+b' => true, 'x+b' => true,
- 'c+b' => true, 'rt' => true, 'w+t' => true, 'r+t' => true,
- 'x+t' => true, 'c+t' => true, 'a+' => true
- ],
- 'write' => [
- 'w' => true, 'w+' => true, 'rw' => true, 'r+' => true, 'x+' => true,
- 'c+' => true, 'wb' => true, 'w+b' => true, 'r+b' => true,
- 'x+b' => true, 'c+b' => true, 'w+t' => true, 'r+t' => true,
- 'x+t' => true, 'c+t' => true, 'a' => true, 'a+' => true
- ]
- ];
-
- /**
- * This constructor accepts an associative array of options.
- *
- * - size: (int) If a read stream would otherwise have an indeterminate
- * size, but the size is known due to foreknowledge, then you can
- * provide that size, in bytes.
- * - metadata: (array) Any additional metadata to return when the metadata
- * of the stream is accessed.
- *
- * @param resource $stream Stream resource to wrap.
- * @param array $options Associative array of options.
- *
- * @throws \InvalidArgumentException if the stream is not a stream resource
- */
- public function __construct($stream, $options = [])
- {
- if (!is_resource($stream)) {
- throw new \InvalidArgumentException('Stream must be a resource');
- }
-
- if (isset($options['size'])) {
- $this->size = $options['size'];
- }
-
- $this->customMetadata = isset($options['metadata'])
- ? $options['metadata']
- : [];
-
- $this->stream = $stream;
- $meta = stream_get_meta_data($this->stream);
- $this->seekable = $meta['seekable'];
- $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]);
- $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]);
- $this->uri = $this->getMetadata('uri');
- }
-
- public function __get($name)
- {
- if ($name == 'stream') {
- throw new \RuntimeException('The stream is detached');
- }
-
- throw new \BadMethodCallException('No value for ' . $name);
- }
-
- /**
- * Closes the stream when the destructed
- */
- public function __destruct()
- {
- $this->close();
- }
-
- public function __toString()
- {
- try {
- $this->seek(0);
- return (string) stream_get_contents($this->stream);
- } catch (\Exception $e) {
- return '';
- }
- }
-
- public function getContents()
- {
- $contents = stream_get_contents($this->stream);
-
- if ($contents === false) {
- throw new \RuntimeException('Unable to read stream contents');
- }
-
- return $contents;
- }
-
- public function close()
- {
- if (isset($this->stream)) {
- if (is_resource($this->stream)) {
- fclose($this->stream);
- }
- $this->detach();
- }
- }
-
- public function detach()
- {
- if (!isset($this->stream)) {
- return null;
- }
-
- $result = $this->stream;
- unset($this->stream);
- $this->size = $this->uri = null;
- $this->readable = $this->writable = $this->seekable = false;
-
- return $result;
- }
-
- public function getSize()
- {
- if ($this->size !== null) {
- return $this->size;
- }
-
- if (!isset($this->stream)) {
- return null;
- }
-
- // Clear the stat cache if the stream has a URI
- if ($this->uri) {
- clearstatcache(true, $this->uri);
- }
-
- $stats = fstat($this->stream);
- if (isset($stats['size'])) {
- $this->size = $stats['size'];
- return $this->size;
- }
-
- return null;
- }
-
- public function isReadable()
- {
- return $this->readable;
- }
-
- public function isWritable()
- {
- return $this->writable;
- }
-
- public function isSeekable()
- {
- return $this->seekable;
- }
-
- public function eof()
- {
- return !$this->stream || feof($this->stream);
- }
-
- public function tell()
- {
- $result = ftell($this->stream);
-
- if ($result === false) {
- throw new \RuntimeException('Unable to determine stream position');
- }
-
- return $result;
- }
-
- public function rewind()
- {
- $this->seek(0);
- }
-
- public function seek($offset, $whence = SEEK_SET)
- {
- if (!$this->seekable) {
- throw new \RuntimeException('Stream is not seekable');
- } elseif (fseek($this->stream, $offset, $whence) === -1) {
- throw new \RuntimeException('Unable to seek to stream position '
- . $offset . ' with whence ' . var_export($whence, true));
- }
- }
-
- public function read($length)
- {
- if (!$this->readable) {
- throw new \RuntimeException('Cannot read from non-readable stream');
- }
- if ($length < 0) {
- throw new \RuntimeException('Length parameter cannot be negative');
- }
-
- if (0 === $length) {
- return '';
- }
-
- $string = fread($this->stream, $length);
- if (false === $string) {
- throw new \RuntimeException('Unable to read from stream');
- }
-
- return $string;
- }
-
- public function write($string)
- {
- if (!$this->writable) {
- throw new \RuntimeException('Cannot write to a non-writable stream');
- }
-
- // We can't know the size after writing anything
- $this->size = null;
- $result = fwrite($this->stream, $string);
-
- if ($result === false) {
- throw new \RuntimeException('Unable to write to stream');
- }
-
- return $result;
- }
-
- public function getMetadata($key = null)
- {
- if (!isset($this->stream)) {
- return $key ? null : [];
- } elseif (!$key) {
- return $this->customMetadata + stream_get_meta_data($this->stream);
- } elseif (isset($this->customMetadata[$key])) {
- return $this->customMetadata[$key];
- }
-
- $meta = stream_get_meta_data($this->stream);
-
- return isset($meta[$key]) ? $meta[$key] : null;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/server/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php
deleted file mode 100644
index daec6f5..0000000
--- a/server/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Stream decorator trait
- * @property StreamInterface stream
- */
-trait StreamDecoratorTrait
-{
- /**
- * @param StreamInterface $stream Stream to decorate
- */
- public function __construct(StreamInterface $stream)
- {
- $this->stream = $stream;
- }
-
- /**
- * Magic method used to create a new stream if streams are not added in
- * the constructor of a decorator (e.g., LazyOpenStream).
- *
- * @param string $name Name of the property (allows "stream" only).
- *
- * @return StreamInterface
- */
- public function __get($name)
- {
- if ($name == 'stream') {
- $this->stream = $this->createStream();
- return $this->stream;
- }
-
- throw new \UnexpectedValueException("$name not found on class");
- }
-
- public function __toString()
- {
- try {
- if ($this->isSeekable()) {
- $this->seek(0);
- }
- return $this->getContents();
- } catch (\Exception $e) {
- // Really, PHP? https://bugs.php.net/bug.php?id=53648
- trigger_error('StreamDecorator::__toString exception: '
- . (string) $e, E_USER_ERROR);
- return '';
- }
- }
-
- public function getContents()
- {
- return copy_to_string($this);
- }
-
- /**
- * Allow decorators to implement custom methods
- *
- * @param string $method Missing method name
- * @param array $args Method arguments
- *
- * @return mixed
- */
- public function __call($method, array $args)
- {
- $result = call_user_func_array([$this->stream, $method], $args);
-
- // Always return the wrapped object if the result is a return $this
- return $result === $this->stream ? $this : $result;
- }
-
- public function close()
- {
- $this->stream->close();
- }
-
- public function getMetadata($key = null)
- {
- return $this->stream->getMetadata($key);
- }
-
- public function detach()
- {
- return $this->stream->detach();
- }
-
- public function getSize()
- {
- return $this->stream->getSize();
- }
-
- public function eof()
- {
- return $this->stream->eof();
- }
-
- public function tell()
- {
- return $this->stream->tell();
- }
-
- public function isReadable()
- {
- return $this->stream->isReadable();
- }
-
- public function isWritable()
- {
- return $this->stream->isWritable();
- }
-
- public function isSeekable()
- {
- return $this->stream->isSeekable();
- }
-
- public function rewind()
- {
- $this->seek(0);
- }
-
- public function seek($offset, $whence = SEEK_SET)
- {
- $this->stream->seek($offset, $whence);
- }
-
- public function read($length)
- {
- return $this->stream->read($length);
- }
-
- public function write($string)
- {
- return $this->stream->write($string);
- }
-
- /**
- * Implement in subclasses to dynamically create streams when requested.
- *
- * @return StreamInterface
- * @throws \BadMethodCallException
- */
- protected function createStream()
- {
- throw new \BadMethodCallException('Not implemented');
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/server/vendor/guzzlehttp/psr7/src/StreamWrapper.php
deleted file mode 100644
index cf7b223..0000000
--- a/server/vendor/guzzlehttp/psr7/src/StreamWrapper.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Converts Guzzle streams into PHP stream resources.
- */
-class StreamWrapper
-{
- /** @var resource */
- public $context;
-
- /** @var StreamInterface */
- private $stream;
-
- /** @var string r, r+, or w */
- private $mode;
-
- /**
- * Returns a resource representing the stream.
- *
- * @param StreamInterface $stream The stream to get a resource for
- *
- * @return resource
- * @throws \InvalidArgumentException if stream is not readable or writable
- */
- public static function getResource(StreamInterface $stream)
- {
- self::register();
-
- if ($stream->isReadable()) {
- $mode = $stream->isWritable() ? 'r+' : 'r';
- } elseif ($stream->isWritable()) {
- $mode = 'w';
- } else {
- throw new \InvalidArgumentException('The stream must be readable, '
- . 'writable, or both.');
- }
-
- return fopen('guzzle://stream', $mode, null, stream_context_create([
- 'guzzle' => ['stream' => $stream]
- ]));
- }
-
- /**
- * Registers the stream wrapper if needed
- */
- public static function register()
- {
- if (!in_array('guzzle', stream_get_wrappers())) {
- stream_wrapper_register('guzzle', __CLASS__);
- }
- }
-
- public function stream_open($path, $mode, $options, &$opened_path)
- {
- $options = stream_context_get_options($this->context);
-
- if (!isset($options['guzzle']['stream'])) {
- return false;
- }
-
- $this->mode = $mode;
- $this->stream = $options['guzzle']['stream'];
-
- return true;
- }
-
- public function stream_read($count)
- {
- return $this->stream->read($count);
- }
-
- public function stream_write($data)
- {
- return (int) $this->stream->write($data);
- }
-
- public function stream_tell()
- {
- return $this->stream->tell();
- }
-
- public function stream_eof()
- {
- return $this->stream->eof();
- }
-
- public function stream_seek($offset, $whence)
- {
- $this->stream->seek($offset, $whence);
-
- return true;
- }
-
- public function stream_stat()
- {
- static $modeMap = [
- 'r' => 33060,
- 'r+' => 33206,
- 'w' => 33188
- ];
-
- return [
- 'dev' => 0,
- 'ino' => 0,
- 'mode' => $modeMap[$this->mode],
- 'nlink' => 0,
- 'uid' => 0,
- 'gid' => 0,
- 'rdev' => 0,
- 'size' => $this->stream->getSize() ?: 0,
- 'atime' => 0,
- 'mtime' => 0,
- 'ctime' => 0,
- 'blksize' => 0,
- 'blocks' => 0
- ];
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/UploadedFile.php b/server/vendor/guzzlehttp/psr7/src/UploadedFile.php
deleted file mode 100644
index e62bd5c..0000000
--- a/server/vendor/guzzlehttp/psr7/src/UploadedFile.php
+++ /dev/null
@@ -1,316 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use InvalidArgumentException;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UploadedFileInterface;
-use RuntimeException;
-
-class UploadedFile implements UploadedFileInterface
-{
- /**
- * @var int[]
- */
- private static $errors = [
- UPLOAD_ERR_OK,
- UPLOAD_ERR_INI_SIZE,
- UPLOAD_ERR_FORM_SIZE,
- UPLOAD_ERR_PARTIAL,
- UPLOAD_ERR_NO_FILE,
- UPLOAD_ERR_NO_TMP_DIR,
- UPLOAD_ERR_CANT_WRITE,
- UPLOAD_ERR_EXTENSION,
- ];
-
- /**
- * @var string
- */
- private $clientFilename;
-
- /**
- * @var string
- */
- private $clientMediaType;
-
- /**
- * @var int
- */
- private $error;
-
- /**
- * @var null|string
- */
- private $file;
-
- /**
- * @var bool
- */
- private $moved = false;
-
- /**
- * @var int
- */
- private $size;
-
- /**
- * @var StreamInterface|null
- */
- private $stream;
-
- /**
- * @param StreamInterface|string|resource $streamOrFile
- * @param int $size
- * @param int $errorStatus
- * @param string|null $clientFilename
- * @param string|null $clientMediaType
- */
- public function __construct(
- $streamOrFile,
- $size,
- $errorStatus,
- $clientFilename = null,
- $clientMediaType = null
- ) {
- $this->setError($errorStatus);
- $this->setSize($size);
- $this->setClientFilename($clientFilename);
- $this->setClientMediaType($clientMediaType);
-
- if ($this->isOk()) {
- $this->setStreamOrFile($streamOrFile);
- }
- }
-
- /**
- * Depending on the value set file or stream variable
- *
- * @param mixed $streamOrFile
- * @throws InvalidArgumentException
- */
- private function setStreamOrFile($streamOrFile)
- {
- if (is_string($streamOrFile)) {
- $this->file = $streamOrFile;
- } elseif (is_resource($streamOrFile)) {
- $this->stream = new Stream($streamOrFile);
- } elseif ($streamOrFile instanceof StreamInterface) {
- $this->stream = $streamOrFile;
- } else {
- throw new InvalidArgumentException(
- 'Invalid stream or file provided for UploadedFile'
- );
- }
- }
-
- /**
- * @param int $error
- * @throws InvalidArgumentException
- */
- private function setError($error)
- {
- if (false === is_int($error)) {
- throw new InvalidArgumentException(
- 'Upload file error status must be an integer'
- );
- }
-
- if (false === in_array($error, UploadedFile::$errors)) {
- throw new InvalidArgumentException(
- 'Invalid error status for UploadedFile'
- );
- }
-
- $this->error = $error;
- }
-
- /**
- * @param int $size
- * @throws InvalidArgumentException
- */
- private function setSize($size)
- {
- if (false === is_int($size)) {
- throw new InvalidArgumentException(
- 'Upload file size must be an integer'
- );
- }
-
- $this->size = $size;
- }
-
- /**
- * @param mixed $param
- * @return boolean
- */
- private function isStringOrNull($param)
- {
- return in_array(gettype($param), ['string', 'NULL']);
- }
-
- /**
- * @param mixed $param
- * @return boolean
- */
- private function isStringNotEmpty($param)
- {
- return is_string($param) && false === empty($param);
- }
-
- /**
- * @param string|null $clientFilename
- * @throws InvalidArgumentException
- */
- private function setClientFilename($clientFilename)
- {
- if (false === $this->isStringOrNull($clientFilename)) {
- throw new InvalidArgumentException(
- 'Upload file client filename must be a string or null'
- );
- }
-
- $this->clientFilename = $clientFilename;
- }
-
- /**
- * @param string|null $clientMediaType
- * @throws InvalidArgumentException
- */
- private function setClientMediaType($clientMediaType)
- {
- if (false === $this->isStringOrNull($clientMediaType)) {
- throw new InvalidArgumentException(
- 'Upload file client media type must be a string or null'
- );
- }
-
- $this->clientMediaType = $clientMediaType;
- }
-
- /**
- * Return true if there is no upload error
- *
- * @return boolean
- */
- private function isOk()
- {
- return $this->error === UPLOAD_ERR_OK;
- }
-
- /**
- * @return boolean
- */
- public function isMoved()
- {
- return $this->moved;
- }
-
- /**
- * @throws RuntimeException if is moved or not ok
- */
- private function validateActive()
- {
- if (false === $this->isOk()) {
- throw new RuntimeException('Cannot retrieve stream due to upload error');
- }
-
- if ($this->isMoved()) {
- throw new RuntimeException('Cannot retrieve stream after it has already been moved');
- }
- }
-
- /**
- * {@inheritdoc}
- * @throws RuntimeException if the upload was not successful.
- */
- public function getStream()
- {
- $this->validateActive();
-
- if ($this->stream instanceof StreamInterface) {
- return $this->stream;
- }
-
- return new LazyOpenStream($this->file, 'r+');
- }
-
- /**
- * {@inheritdoc}
- *
- * @see http://php.net/is_uploaded_file
- * @see http://php.net/move_uploaded_file
- * @param string $targetPath Path to which to move the uploaded file.
- * @throws RuntimeException if the upload was not successful.
- * @throws InvalidArgumentException if the $path specified is invalid.
- * @throws RuntimeException on any error during the move operation, or on
- * the second or subsequent call to the method.
- */
- public function moveTo($targetPath)
- {
- $this->validateActive();
-
- if (false === $this->isStringNotEmpty($targetPath)) {
- throw new InvalidArgumentException(
- 'Invalid path provided for move operation; must be a non-empty string'
- );
- }
-
- if ($this->file) {
- $this->moved = php_sapi_name() == 'cli'
- ? rename($this->file, $targetPath)
- : move_uploaded_file($this->file, $targetPath);
- } else {
- copy_to_stream(
- $this->getStream(),
- new LazyOpenStream($targetPath, 'w')
- );
-
- $this->moved = true;
- }
-
- if (false === $this->moved) {
- throw new RuntimeException(
- sprintf('Uploaded file could not be moved to %s', $targetPath)
- );
- }
- }
-
- /**
- * {@inheritdoc}
- *
- * @return int|null The file size in bytes or null if unknown.
- */
- public function getSize()
- {
- return $this->size;
- }
-
- /**
- * {@inheritdoc}
- *
- * @see http://php.net/manual/en/features.file-upload.errors.php
- * @return int One of PHP's UPLOAD_ERR_XXX constants.
- */
- public function getError()
- {
- return $this->error;
- }
-
- /**
- * {@inheritdoc}
- *
- * @return string|null The filename sent by the client or null if none
- * was provided.
- */
- public function getClientFilename()
- {
- return $this->clientFilename;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getClientMediaType()
- {
- return $this->clientMediaType;
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/Uri.php b/server/vendor/guzzlehttp/psr7/src/Uri.php
deleted file mode 100644
index f46c1db..0000000
--- a/server/vendor/guzzlehttp/psr7/src/Uri.php
+++ /dev/null
@@ -1,702 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\UriInterface;
-
-/**
- * PSR-7 URI implementation.
- *
- * @author Michael Dowling
- * @author Tobias Schultze
- * @author Matthew Weier O'Phinney
- */
-class Uri implements UriInterface
-{
- /**
- * Absolute http and https URIs require a host per RFC 7230 Section 2.7
- * but in generic URIs the host can be empty. So for http(s) URIs
- * we apply this default host when no host is given yet to form a
- * valid URI.
- */
- const HTTP_DEFAULT_HOST = 'localhost';
-
- private static $defaultPorts = [
- 'http' => 80,
- 'https' => 443,
- 'ftp' => 21,
- 'gopher' => 70,
- 'nntp' => 119,
- 'news' => 119,
- 'telnet' => 23,
- 'tn3270' => 23,
- 'imap' => 143,
- 'pop' => 110,
- 'ldap' => 389,
- ];
-
- private static $charUnreserved = 'a-zA-Z0-9_\-\.~';
- private static $charSubDelims = '!\$&\'\(\)\*\+,;=';
- private static $replaceQuery = ['=' => '%3D', '&' => '%26'];
-
- /** @var string Uri scheme. */
- private $scheme = '';
-
- /** @var string Uri user info. */
- private $userInfo = '';
-
- /** @var string Uri host. */
- private $host = '';
-
- /** @var int|null Uri port. */
- private $port;
-
- /** @var string Uri path. */
- private $path = '';
-
- /** @var string Uri query string. */
- private $query = '';
-
- /** @var string Uri fragment. */
- private $fragment = '';
-
- /**
- * @param string $uri URI to parse
- */
- public function __construct($uri = '')
- {
- // weak type check to also accept null until we can add scalar type hints
- if ($uri != '') {
- $parts = parse_url($uri);
- if ($parts === false) {
- throw new \InvalidArgumentException("Unable to parse URI: $uri");
- }
- $this->applyParts($parts);
- }
- }
-
- public function __toString()
- {
- return self::composeComponents(
- $this->scheme,
- $this->getAuthority(),
- $this->path,
- $this->query,
- $this->fragment
- );
- }
-
- /**
- * Composes a URI reference string from its various components.
- *
- * Usually this method does not need to be called manually but instead is used indirectly via
- * `Psr\Http\Message\UriInterface::__toString`.
- *
- * PSR-7 UriInterface treats an empty component the same as a missing component as
- * getQuery(), getFragment() etc. always return a string. This explains the slight
- * difference to RFC 3986 Section 5.3.
- *
- * Another adjustment is that the authority separator is added even when the authority is missing/empty
- * for the "file" scheme. This is because PHP stream functions like `file_get_contents` only work with
- * `file:///myfile` but not with `file:/myfile` although they are equivalent according to RFC 3986. But
- * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to
- * that format).
- *
- * @param string $scheme
- * @param string $authority
- * @param string $path
- * @param string $query
- * @param string $fragment
- *
- * @return string
- *
- * @link https://tools.ietf.org/html/rfc3986#section-5.3
- */
- public static function composeComponents($scheme, $authority, $path, $query, $fragment)
- {
- $uri = '';
-
- // weak type checks to also accept null until we can add scalar type hints
- if ($scheme != '') {
- $uri .= $scheme . ':';
- }
-
- if ($authority != ''|| $scheme === 'file') {
- $uri .= '//' . $authority;
- }
-
- $uri .= $path;
-
- if ($query != '') {
- $uri .= '?' . $query;
- }
-
- if ($fragment != '') {
- $uri .= '#' . $fragment;
- }
-
- return $uri;
- }
-
- /**
- * Whether the URI has the default port of the current scheme.
- *
- * `Psr\Http\Message\UriInterface::getPort` may return null or the standard port. This method can be used
- * independently of the implementation.
- *
- * @param UriInterface $uri
- *
- * @return bool
- */
- public static function isDefaultPort(UriInterface $uri)
- {
- return $uri->getPort() === null
- || (isset(self::$defaultPorts[$uri->getScheme()]) && $uri->getPort() === self::$defaultPorts[$uri->getScheme()]);
- }
-
- /**
- * Whether the URI is absolute, i.e. it has a scheme.
- *
- * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true
- * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative
- * to another URI, the base URI. Relative references can be divided into several forms:
- * - network-path references, e.g. '//example.com/path'
- * - absolute-path references, e.g. '/path'
- * - relative-path references, e.g. 'subpath'
- *
- * @param UriInterface $uri
- *
- * @return bool
- * @see Uri::isNetworkPathReference
- * @see Uri::isAbsolutePathReference
- * @see Uri::isRelativePathReference
- * @link https://tools.ietf.org/html/rfc3986#section-4
- */
- public static function isAbsolute(UriInterface $uri)
- {
- return $uri->getScheme() !== '';
- }
-
- /**
- * Whether the URI is a network-path reference.
- *
- * A relative reference that begins with two slash characters is termed an network-path reference.
- *
- * @param UriInterface $uri
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.2
- */
- public static function isNetworkPathReference(UriInterface $uri)
- {
- return $uri->getScheme() === '' && $uri->getAuthority() !== '';
- }
-
- /**
- * Whether the URI is a absolute-path reference.
- *
- * A relative reference that begins with a single slash character is termed an absolute-path reference.
- *
- * @param UriInterface $uri
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.2
- */
- public static function isAbsolutePathReference(UriInterface $uri)
- {
- return $uri->getScheme() === ''
- && $uri->getAuthority() === ''
- && isset($uri->getPath()[0])
- && $uri->getPath()[0] === '/';
- }
-
- /**
- * Whether the URI is a relative-path reference.
- *
- * A relative reference that does not begin with a slash character is termed a relative-path reference.
- *
- * @param UriInterface $uri
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.2
- */
- public static function isRelativePathReference(UriInterface $uri)
- {
- return $uri->getScheme() === ''
- && $uri->getAuthority() === ''
- && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/');
- }
-
- /**
- * Whether the URI is a same-document reference.
- *
- * A same-document reference refers to a URI that is, aside from its fragment
- * component, identical to the base URI. When no base URI is given, only an empty
- * URI reference (apart from its fragment) is considered a same-document reference.
- *
- * @param UriInterface $uri The URI to check
- * @param UriInterface|null $base An optional base URI to compare against
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.4
- */
- public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null)
- {
- if ($base !== null) {
- $uri = UriResolver::resolve($base, $uri);
-
- return ($uri->getScheme() === $base->getScheme())
- && ($uri->getAuthority() === $base->getAuthority())
- && ($uri->getPath() === $base->getPath())
- && ($uri->getQuery() === $base->getQuery());
- }
-
- return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === '';
- }
-
- /**
- * Removes dot segments from a path and returns the new path.
- *
- * @param string $path
- *
- * @return string
- *
- * @deprecated since version 1.4. Use UriResolver::removeDotSegments instead.
- * @see UriResolver::removeDotSegments
- */
- public static function removeDotSegments($path)
- {
- return UriResolver::removeDotSegments($path);
- }
-
- /**
- * Converts the relative URI into a new URI that is resolved against the base URI.
- *
- * @param UriInterface $base Base URI
- * @param string|UriInterface $rel Relative URI
- *
- * @return UriInterface
- *
- * @deprecated since version 1.4. Use UriResolver::resolve instead.
- * @see UriResolver::resolve
- */
- public static function resolve(UriInterface $base, $rel)
- {
- if (!($rel instanceof UriInterface)) {
- $rel = new self($rel);
- }
-
- return UriResolver::resolve($base, $rel);
- }
-
- /**
- * Creates a new URI with a specific query string value removed.
- *
- * Any existing query string values that exactly match the provided key are
- * removed.
- *
- * @param UriInterface $uri URI to use as a base.
- * @param string $key Query string key to remove.
- *
- * @return UriInterface
- */
- public static function withoutQueryValue(UriInterface $uri, $key)
- {
- $current = $uri->getQuery();
- if ($current === '') {
- return $uri;
- }
-
- $decodedKey = rawurldecode($key);
- $result = array_filter(explode('&', $current), function ($part) use ($decodedKey) {
- return rawurldecode(explode('=', $part)[0]) !== $decodedKey;
- });
-
- return $uri->withQuery(implode('&', $result));
- }
-
- /**
- * Creates a new URI with a specific query string value.
- *
- * Any existing query string values that exactly match the provided key are
- * removed and replaced with the given key value pair.
- *
- * A value of null will set the query string key without a value, e.g. "key"
- * instead of "key=value".
- *
- * @param UriInterface $uri URI to use as a base.
- * @param string $key Key to set.
- * @param string|null $value Value to set
- *
- * @return UriInterface
- */
- public static function withQueryValue(UriInterface $uri, $key, $value)
- {
- $current = $uri->getQuery();
-
- if ($current === '') {
- $result = [];
- } else {
- $decodedKey = rawurldecode($key);
- $result = array_filter(explode('&', $current), function ($part) use ($decodedKey) {
- return rawurldecode(explode('=', $part)[0]) !== $decodedKey;
- });
- }
-
- // Query string separators ("=", "&") within the key or value need to be encoded
- // (while preventing double-encoding) before setting the query string. All other
- // chars that need percent-encoding will be encoded by withQuery().
- $key = strtr($key, self::$replaceQuery);
-
- if ($value !== null) {
- $result[] = $key . '=' . strtr($value, self::$replaceQuery);
- } else {
- $result[] = $key;
- }
-
- return $uri->withQuery(implode('&', $result));
- }
-
- /**
- * Creates a URI from a hash of `parse_url` components.
- *
- * @param array $parts
- *
- * @return UriInterface
- * @link http://php.net/manual/en/function.parse-url.php
- *
- * @throws \InvalidArgumentException If the components do not form a valid URI.
- */
- public static function fromParts(array $parts)
- {
- $uri = new self();
- $uri->applyParts($parts);
- $uri->validateState();
-
- return $uri;
- }
-
- public function getScheme()
- {
- return $this->scheme;
- }
-
- public function getAuthority()
- {
- $authority = $this->host;
- if ($this->userInfo !== '') {
- $authority = $this->userInfo . '@' . $authority;
- }
-
- if ($this->port !== null) {
- $authority .= ':' . $this->port;
- }
-
- return $authority;
- }
-
- public function getUserInfo()
- {
- return $this->userInfo;
- }
-
- public function getHost()
- {
- return $this->host;
- }
-
- public function getPort()
- {
- return $this->port;
- }
-
- public function getPath()
- {
- return $this->path;
- }
-
- public function getQuery()
- {
- return $this->query;
- }
-
- public function getFragment()
- {
- return $this->fragment;
- }
-
- public function withScheme($scheme)
- {
- $scheme = $this->filterScheme($scheme);
-
- if ($this->scheme === $scheme) {
- return $this;
- }
-
- $new = clone $this;
- $new->scheme = $scheme;
- $new->removeDefaultPort();
- $new->validateState();
-
- return $new;
- }
-
- public function withUserInfo($user, $password = null)
- {
- $info = $user;
- if ($password != '') {
- $info .= ':' . $password;
- }
-
- if ($this->userInfo === $info) {
- return $this;
- }
-
- $new = clone $this;
- $new->userInfo = $info;
- $new->validateState();
-
- return $new;
- }
-
- public function withHost($host)
- {
- $host = $this->filterHost($host);
-
- if ($this->host === $host) {
- return $this;
- }
-
- $new = clone $this;
- $new->host = $host;
- $new->validateState();
-
- return $new;
- }
-
- public function withPort($port)
- {
- $port = $this->filterPort($port);
-
- if ($this->port === $port) {
- return $this;
- }
-
- $new = clone $this;
- $new->port = $port;
- $new->removeDefaultPort();
- $new->validateState();
-
- return $new;
- }
-
- public function withPath($path)
- {
- $path = $this->filterPath($path);
-
- if ($this->path === $path) {
- return $this;
- }
-
- $new = clone $this;
- $new->path = $path;
- $new->validateState();
-
- return $new;
- }
-
- public function withQuery($query)
- {
- $query = $this->filterQueryAndFragment($query);
-
- if ($this->query === $query) {
- return $this;
- }
-
- $new = clone $this;
- $new->query = $query;
-
- return $new;
- }
-
- public function withFragment($fragment)
- {
- $fragment = $this->filterQueryAndFragment($fragment);
-
- if ($this->fragment === $fragment) {
- return $this;
- }
-
- $new = clone $this;
- $new->fragment = $fragment;
-
- return $new;
- }
-
- /**
- * Apply parse_url parts to a URI.
- *
- * @param array $parts Array of parse_url parts to apply.
- */
- private function applyParts(array $parts)
- {
- $this->scheme = isset($parts['scheme'])
- ? $this->filterScheme($parts['scheme'])
- : '';
- $this->userInfo = isset($parts['user']) ? $parts['user'] : '';
- $this->host = isset($parts['host'])
- ? $this->filterHost($parts['host'])
- : '';
- $this->port = isset($parts['port'])
- ? $this->filterPort($parts['port'])
- : null;
- $this->path = isset($parts['path'])
- ? $this->filterPath($parts['path'])
- : '';
- $this->query = isset($parts['query'])
- ? $this->filterQueryAndFragment($parts['query'])
- : '';
- $this->fragment = isset($parts['fragment'])
- ? $this->filterQueryAndFragment($parts['fragment'])
- : '';
- if (isset($parts['pass'])) {
- $this->userInfo .= ':' . $parts['pass'];
- }
-
- $this->removeDefaultPort();
- }
-
- /**
- * @param string $scheme
- *
- * @return string
- *
- * @throws \InvalidArgumentException If the scheme is invalid.
- */
- private function filterScheme($scheme)
- {
- if (!is_string($scheme)) {
- throw new \InvalidArgumentException('Scheme must be a string');
- }
-
- return strtolower($scheme);
- }
-
- /**
- * @param string $host
- *
- * @return string
- *
- * @throws \InvalidArgumentException If the host is invalid.
- */
- private function filterHost($host)
- {
- if (!is_string($host)) {
- throw new \InvalidArgumentException('Host must be a string');
- }
-
- return strtolower($host);
- }
-
- /**
- * @param int|null $port
- *
- * @return int|null
- *
- * @throws \InvalidArgumentException If the port is invalid.
- */
- private function filterPort($port)
- {
- if ($port === null) {
- return null;
- }
-
- $port = (int) $port;
- if (1 > $port || 0xffff < $port) {
- throw new \InvalidArgumentException(
- sprintf('Invalid port: %d. Must be between 1 and 65535', $port)
- );
- }
-
- return $port;
- }
-
- private function removeDefaultPort()
- {
- if ($this->port !== null && self::isDefaultPort($this)) {
- $this->port = null;
- }
- }
-
- /**
- * Filters the path of a URI
- *
- * @param string $path
- *
- * @return string
- *
- * @throws \InvalidArgumentException If the path is invalid.
- */
- private function filterPath($path)
- {
- if (!is_string($path)) {
- throw new \InvalidArgumentException('Path must be a string');
- }
-
- return preg_replace_callback(
- '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/',
- [$this, 'rawurlencodeMatchZero'],
- $path
- );
- }
-
- /**
- * Filters the query string or fragment of a URI.
- *
- * @param string $str
- *
- * @return string
- *
- * @throws \InvalidArgumentException If the query or fragment is invalid.
- */
- private function filterQueryAndFragment($str)
- {
- if (!is_string($str)) {
- throw new \InvalidArgumentException('Query and fragment must be a string');
- }
-
- return preg_replace_callback(
- '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/',
- [$this, 'rawurlencodeMatchZero'],
- $str
- );
- }
-
- private function rawurlencodeMatchZero(array $match)
- {
- return rawurlencode($match[0]);
- }
-
- private function validateState()
- {
- if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) {
- $this->host = self::HTTP_DEFAULT_HOST;
- }
-
- if ($this->getAuthority() === '') {
- if (0 === strpos($this->path, '//')) {
- throw new \InvalidArgumentException('The path of a URI without an authority must not start with two slashes "//"');
- }
- if ($this->scheme === '' && false !== strpos(explode('/', $this->path, 2)[0], ':')) {
- throw new \InvalidArgumentException('A relative URI must not have a path beginning with a segment containing a colon');
- }
- } elseif (isset($this->path[0]) && $this->path[0] !== '/') {
- @trigger_error(
- 'The path of a URI with an authority must start with a slash "/" or be empty. Automagically fixing the URI ' .
- 'by adding a leading slash to the path is deprecated since version 1.4 and will throw an exception instead.',
- E_USER_DEPRECATED
- );
- $this->path = '/'. $this->path;
- //throw new \InvalidArgumentException('The path of a URI with an authority must start with a slash "/" or be empty');
- }
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/server/vendor/guzzlehttp/psr7/src/UriNormalizer.php
deleted file mode 100644
index 384c29e..0000000
--- a/server/vendor/guzzlehttp/psr7/src/UriNormalizer.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\UriInterface;
-
-/**
- * Provides methods to normalize and compare URIs.
- *
- * @author Tobias Schultze
- *
- * @link https://tools.ietf.org/html/rfc3986#section-6
- */
-final class UriNormalizer
-{
- /**
- * Default normalizations which only include the ones that preserve semantics.
- *
- * self::CAPITALIZE_PERCENT_ENCODING | self::DECODE_UNRESERVED_CHARACTERS | self::CONVERT_EMPTY_PATH |
- * self::REMOVE_DEFAULT_HOST | self::REMOVE_DEFAULT_PORT | self::REMOVE_DOT_SEGMENTS
- */
- const PRESERVING_NORMALIZATIONS = 63;
-
- /**
- * All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized.
- *
- * Example: http://example.org/a%c2%b1b → http://example.org/a%C2%B1b
- */
- const CAPITALIZE_PERCENT_ENCODING = 1;
-
- /**
- * Decodes percent-encoded octets of unreserved characters.
- *
- * For consistency, percent-encoded octets in the ranges of ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39),
- * hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should not be created by URI producers and,
- * when found in a URI, should be decoded to their corresponding unreserved characters by URI normalizers.
- *
- * Example: http://example.org/%7Eusern%61me/ → http://example.org/~username/
- */
- const DECODE_UNRESERVED_CHARACTERS = 2;
-
- /**
- * Converts the empty path to "/" for http and https URIs.
- *
- * Example: http://example.org → http://example.org/
- */
- const CONVERT_EMPTY_PATH = 4;
-
- /**
- * Removes the default host of the given URI scheme from the URI.
- *
- * Only the "file" scheme defines the default host "localhost".
- * All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile`
- * are equivalent according to RFC 3986. The first format is not accepted
- * by PHPs stream functions and thus already normalized implicitly to the
- * second format in the Uri class. See `GuzzleHttp\Psr7\Uri::composeComponents`.
- *
- * Example: file://localhost/myfile → file:///myfile
- */
- const REMOVE_DEFAULT_HOST = 8;
-
- /**
- * Removes the default port of the given URI scheme from the URI.
- *
- * Example: http://example.org:80/ → http://example.org/
- */
- const REMOVE_DEFAULT_PORT = 16;
-
- /**
- * Removes unnecessary dot-segments.
- *
- * Dot-segments in relative-path references are not removed as it would
- * change the semantics of the URI reference.
- *
- * Example: http://example.org/../a/b/../c/./d.html → http://example.org/a/c/d.html
- */
- const REMOVE_DOT_SEGMENTS = 32;
-
- /**
- * Paths which include two or more adjacent slashes are converted to one.
- *
- * Webservers usually ignore duplicate slashes and treat those URIs equivalent.
- * But in theory those URIs do not need to be equivalent. So this normalization
- * may change the semantics. Encoded slashes (%2F) are not removed.
- *
- * Example: http://example.org//foo///bar.html → http://example.org/foo/bar.html
- */
- const REMOVE_DUPLICATE_SLASHES = 64;
-
- /**
- * Sort query parameters with their values in alphabetical order.
- *
- * However, the order of parameters in a URI may be significant (this is not defined by the standard).
- * So this normalization is not safe and may change the semantics of the URI.
- *
- * Example: ?lang=en&article=fred → ?article=fred&lang=en
- *
- * Note: The sorting is neither locale nor Unicode aware (the URI query does not get decoded at all) as the
- * purpose is to be able to compare URIs in a reproducible way, not to have the params sorted perfectly.
- */
- const SORT_QUERY_PARAMETERS = 128;
-
- /**
- * Returns a normalized URI.
- *
- * The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.
- * This methods adds additional normalizations that can be configured with the $flags parameter.
- *
- * PSR-7 UriInterface cannot distinguish between an empty component and a missing component as
- * getQuery(), getFragment() etc. always return a string. This means the URIs "/?#" and "/" are
- * treated equivalent which is not necessarily true according to RFC 3986. But that difference
- * is highly uncommon in reality. So this potential normalization is implied in PSR-7 as well.
- *
- * @param UriInterface $uri The URI to normalize
- * @param int $flags A bitmask of normalizations to apply, see constants
- *
- * @return UriInterface The normalized URI
- * @link https://tools.ietf.org/html/rfc3986#section-6.2
- */
- public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS)
- {
- if ($flags & self::CAPITALIZE_PERCENT_ENCODING) {
- $uri = self::capitalizePercentEncoding($uri);
- }
-
- if ($flags & self::DECODE_UNRESERVED_CHARACTERS) {
- $uri = self::decodeUnreservedCharacters($uri);
- }
-
- if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' &&
- ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')
- ) {
- $uri = $uri->withPath('/');
- }
-
- if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') {
- $uri = $uri->withHost('');
- }
-
- if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) {
- $uri = $uri->withPort(null);
- }
-
- if ($flags & self::REMOVE_DOT_SEGMENTS && !Uri::isRelativePathReference($uri)) {
- $uri = $uri->withPath(UriResolver::removeDotSegments($uri->getPath()));
- }
-
- if ($flags & self::REMOVE_DUPLICATE_SLASHES) {
- $uri = $uri->withPath(preg_replace('#//++#', '/', $uri->getPath()));
- }
-
- if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') {
- $queryKeyValues = explode('&', $uri->getQuery());
- sort($queryKeyValues);
- $uri = $uri->withQuery(implode('&', $queryKeyValues));
- }
-
- return $uri;
- }
-
- /**
- * Whether two URIs can be considered equivalent.
- *
- * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also
- * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be
- * resolved against the same base URI. If this is not the case, determination of equivalence or difference of
- * relative references does not mean anything.
- *
- * @param UriInterface $uri1 An URI to compare
- * @param UriInterface $uri2 An URI to compare
- * @param int $normalizations A bitmask of normalizations to apply, see constants
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-6.1
- */
- public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS)
- {
- return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations);
- }
-
- private static function capitalizePercentEncoding(UriInterface $uri)
- {
- $regex = '/(?:%[A-Fa-f0-9]{2})++/';
-
- $callback = function (array $match) {
- return strtoupper($match[0]);
- };
-
- return
- $uri->withPath(
- preg_replace_callback($regex, $callback, $uri->getPath())
- )->withQuery(
- preg_replace_callback($regex, $callback, $uri->getQuery())
- );
- }
-
- private static function decodeUnreservedCharacters(UriInterface $uri)
- {
- $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i';
-
- $callback = function (array $match) {
- return rawurldecode($match[0]);
- };
-
- return
- $uri->withPath(
- preg_replace_callback($regex, $callback, $uri->getPath())
- )->withQuery(
- preg_replace_callback($regex, $callback, $uri->getQuery())
- );
- }
-
- private function __construct()
- {
- // cannot be instantiated
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/UriResolver.php b/server/vendor/guzzlehttp/psr7/src/UriResolver.php
deleted file mode 100644
index c1cb8a2..0000000
--- a/server/vendor/guzzlehttp/psr7/src/UriResolver.php
+++ /dev/null
@@ -1,219 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\UriInterface;
-
-/**
- * Resolves a URI reference in the context of a base URI and the opposite way.
- *
- * @author Tobias Schultze
- *
- * @link https://tools.ietf.org/html/rfc3986#section-5
- */
-final class UriResolver
-{
- /**
- * Removes dot segments from a path and returns the new path.
- *
- * @param string $path
- *
- * @return string
- * @link http://tools.ietf.org/html/rfc3986#section-5.2.4
- */
- public static function removeDotSegments($path)
- {
- if ($path === '' || $path === '/') {
- return $path;
- }
-
- $results = [];
- $segments = explode('/', $path);
- foreach ($segments as $segment) {
- if ($segment === '..') {
- array_pop($results);
- } elseif ($segment !== '.') {
- $results[] = $segment;
- }
- }
-
- $newPath = implode('/', $results);
-
- if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) {
- // Re-add the leading slash if necessary for cases like "/.."
- $newPath = '/' . $newPath;
- } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) {
- // Add the trailing slash if necessary
- // If newPath is not empty, then $segment must be set and is the last segment from the foreach
- $newPath .= '/';
- }
-
- return $newPath;
- }
-
- /**
- * Converts the relative URI into a new URI that is resolved against the base URI.
- *
- * @param UriInterface $base Base URI
- * @param UriInterface $rel Relative URI
- *
- * @return UriInterface
- * @link http://tools.ietf.org/html/rfc3986#section-5.2
- */
- public static function resolve(UriInterface $base, UriInterface $rel)
- {
- if ((string) $rel === '') {
- // we can simply return the same base URI instance for this same-document reference
- return $base;
- }
-
- if ($rel->getScheme() != '') {
- return $rel->withPath(self::removeDotSegments($rel->getPath()));
- }
-
- if ($rel->getAuthority() != '') {
- $targetAuthority = $rel->getAuthority();
- $targetPath = self::removeDotSegments($rel->getPath());
- $targetQuery = $rel->getQuery();
- } else {
- $targetAuthority = $base->getAuthority();
- if ($rel->getPath() === '') {
- $targetPath = $base->getPath();
- $targetQuery = $rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery();
- } else {
- if ($rel->getPath()[0] === '/') {
- $targetPath = $rel->getPath();
- } else {
- if ($targetAuthority != '' && $base->getPath() === '') {
- $targetPath = '/' . $rel->getPath();
- } else {
- $lastSlashPos = strrpos($base->getPath(), '/');
- if ($lastSlashPos === false) {
- $targetPath = $rel->getPath();
- } else {
- $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath();
- }
- }
- }
- $targetPath = self::removeDotSegments($targetPath);
- $targetQuery = $rel->getQuery();
- }
- }
-
- return new Uri(Uri::composeComponents(
- $base->getScheme(),
- $targetAuthority,
- $targetPath,
- $targetQuery,
- $rel->getFragment()
- ));
- }
-
- /**
- * Returns the target URI as a relative reference from the base URI.
- *
- * This method is the counterpart to resolve():
- *
- * (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))
- *
- * One use-case is to use the current request URI as base URI and then generate relative links in your documents
- * to reduce the document size or offer self-contained downloadable document archives.
- *
- * $base = new Uri('http://example.com/a/b/');
- * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'.
- * echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'.
- * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.
- * echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'.
- *
- * This method also accepts a target that is already relative and will try to relativize it further. Only a
- * relative-path reference will be returned as-is.
- *
- * echo UriResolver::relativize($base, new Uri('/a/b/c')); // prints 'c' as well
- *
- * @param UriInterface $base Base URI
- * @param UriInterface $target Target URI
- *
- * @return UriInterface The relative URI reference
- */
- public static function relativize(UriInterface $base, UriInterface $target)
- {
- if ($target->getScheme() !== '' &&
- ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')
- ) {
- return $target;
- }
-
- if (Uri::isRelativePathReference($target)) {
- // As the target is already highly relative we return it as-is. It would be possible to resolve
- // the target with `$target = self::resolve($base, $target);` and then try make it more relative
- // by removing a duplicate query. But let's not do that automatically.
- return $target;
- }
-
- if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) {
- return $target->withScheme('');
- }
-
- // We must remove the path before removing the authority because if the path starts with two slashes, the URI
- // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also
- // invalid.
- $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost('');
-
- if ($base->getPath() !== $target->getPath()) {
- return $emptyPathUri->withPath(self::getRelativePath($base, $target));
- }
-
- if ($base->getQuery() === $target->getQuery()) {
- // Only the target fragment is left. And it must be returned even if base and target fragment are the same.
- return $emptyPathUri->withQuery('');
- }
-
- // If the base URI has a query but the target has none, we cannot return an empty path reference as it would
- // inherit the base query component when resolving.
- if ($target->getQuery() === '') {
- $segments = explode('/', $target->getPath());
- $lastSegment = end($segments);
-
- return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment);
- }
-
- return $emptyPathUri;
- }
-
- private static function getRelativePath(UriInterface $base, UriInterface $target)
- {
- $sourceSegments = explode('/', $base->getPath());
- $targetSegments = explode('/', $target->getPath());
- array_pop($sourceSegments);
- $targetLastSegment = array_pop($targetSegments);
- foreach ($sourceSegments as $i => $segment) {
- if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) {
- unset($sourceSegments[$i], $targetSegments[$i]);
- } else {
- break;
- }
- }
- $targetSegments[] = $targetLastSegment;
- $relativePath = str_repeat('../', count($sourceSegments)) . implode('/', $targetSegments);
-
- // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./".
- // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used
- // as the first segment of a relative-path reference, as it would be mistaken for a scheme name.
- if ('' === $relativePath || false !== strpos(explode('/', $relativePath, 2)[0], ':')) {
- $relativePath = "./$relativePath";
- } elseif ('/' === $relativePath[0]) {
- if ($base->getAuthority() != '' && $base->getPath() === '') {
- // In this case an extra slash is added by resolve() automatically. So we must not add one here.
- $relativePath = ".$relativePath";
- } else {
- $relativePath = "./$relativePath";
- }
- }
-
- return $relativePath;
- }
-
- private function __construct()
- {
- // cannot be instantiated
- }
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/functions.php b/server/vendor/guzzlehttp/psr7/src/functions.php
deleted file mode 100644
index e40348d..0000000
--- a/server/vendor/guzzlehttp/psr7/src/functions.php
+++ /dev/null
@@ -1,828 +0,0 @@
-<?php
-namespace GuzzleHttp\Psr7;
-
-use Psr\Http\Message\MessageInterface;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UriInterface;
-
-/**
- * Returns the string representation of an HTTP message.
- *
- * @param MessageInterface $message Message to convert to a string.
- *
- * @return string
- */
-function str(MessageInterface $message)
-{
- if ($message instanceof RequestInterface) {
- $msg = trim($message->getMethod() . ' '
- . $message->getRequestTarget())
- . ' HTTP/' . $message->getProtocolVersion();
- if (!$message->hasHeader('host')) {
- $msg .= "\r\nHost: " . $message->getUri()->getHost();
- }
- } elseif ($message instanceof ResponseInterface) {
- $msg = 'HTTP/' . $message->getProtocolVersion() . ' '
- . $message->getStatusCode() . ' '
- . $message->getReasonPhrase();
- } else {
- throw new \InvalidArgumentException('Unknown message type');
- }
-
- foreach ($message->getHeaders() as $name => $values) {
- $msg .= "\r\n{$name}: " . implode(', ', $values);
- }
-
- return "{$msg}\r\n\r\n" . $message->getBody();
-}
-
-/**
- * Returns a UriInterface for the given value.
- *
- * This function accepts a string or {@see Psr\Http\Message\UriInterface} and
- * returns a UriInterface for the given value. If the value is already a
- * `UriInterface`, it is returned as-is.
- *
- * @param string|UriInterface $uri
- *
- * @return UriInterface
- * @throws \InvalidArgumentException
- */
-function uri_for($uri)
-{
- if ($uri instanceof UriInterface) {
- return $uri;
- } elseif (is_string($uri)) {
- return new Uri($uri);
- }
-
- throw new \InvalidArgumentException('URI must be a string or UriInterface');
-}
-
-/**
- * Create a new stream based on the input type.
- *
- * Options is an associative array that can contain the following keys:
- * - metadata: Array of custom metadata.
- * - size: Size of the stream.
- *
- * @param resource|string|null|int|float|bool|StreamInterface|callable $resource Entity body data
- * @param array $options Additional options
- *
- * @return Stream
- * @throws \InvalidArgumentException if the $resource arg is not valid.
- */
-function stream_for($resource = '', array $options = [])
-{
- if (is_scalar($resource)) {
- $stream = fopen('php://temp', 'r+');
- if ($resource !== '') {
- fwrite($stream, $resource);
- fseek($stream, 0);
- }
- return new Stream($stream, $options);
- }
-
- switch (gettype($resource)) {
- case 'resource':
- return new Stream($resource, $options);
- case 'object':
- if ($resource instanceof StreamInterface) {
- return $resource;
- } elseif ($resource instanceof \Iterator) {
- return new PumpStream(function () use ($resource) {
- if (!$resource->valid()) {
- return false;
- }
- $result = $resource->current();
- $resource->next();
- return $result;
- }, $options);
- } elseif (method_exists($resource, '__toString')) {
- return stream_for((string) $resource, $options);
- }
- break;
- case 'NULL':
- return new Stream(fopen('php://temp', 'r+'), $options);
- }
-
- if (is_callable($resource)) {
- return new PumpStream($resource, $options);
- }
-
- throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource));
-}
-
-/**
- * Parse an array of header values containing ";" separated data into an
- * array of associative arrays representing the header key value pair
- * data of the header. When a parameter does not contain a value, but just
- * contains a key, this function will inject a key with a '' string value.
- *
- * @param string|array $header Header to parse into components.
- *
- * @return array Returns the parsed header values.
- */
-function parse_header($header)
-{
- static $trimmed = "\"' \n\t\r";
- $params = $matches = [];
-
- foreach (normalize_header($header) as $val) {
- $part = [];
- foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
- if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
- $m = $matches[0];
- if (isset($m[1])) {
- $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);
- } else {
- $part[] = trim($m[0], $trimmed);
- }
- }
- }
- if ($part) {
- $params[] = $part;
- }
- }
-
- return $params;
-}
-
-/**
- * Converts an array of header values that may contain comma separated
- * headers into an array of headers with no comma separated values.
- *
- * @param string|array $header Header to normalize.
- *
- * @return array Returns the normalized header field values.
- */
-function normalize_header($header)
-{
- if (!is_array($header)) {
- return array_map('trim', explode(',', $header));
- }
-
- $result = [];
- foreach ($header as $value) {
- foreach ((array) $value as $v) {
- if (strpos($v, ',') === false) {
- $result[] = $v;
- continue;
- }
- foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) {
- $result[] = trim($vv);
- }
- }
- }
-
- return $result;
-}
-
-/**
- * Clone and modify a request with the given changes.
- *
- * The changes can be one of:
- * - method: (string) Changes the HTTP method.
- * - set_headers: (array) Sets the given headers.
- * - remove_headers: (array) Remove the given headers.
- * - body: (mixed) Sets the given body.
- * - uri: (UriInterface) Set the URI.
- * - query: (string) Set the query string value of the URI.
- * - version: (string) Set the protocol version.
- *
- * @param RequestInterface $request Request to clone and modify.
- * @param array $changes Changes to apply.
- *
- * @return RequestInterface
- */
-function modify_request(RequestInterface $request, array $changes)
-{
- if (!$changes) {
- return $request;
- }
-
- $headers = $request->getHeaders();
-
- if (!isset($changes['uri'])) {
- $uri = $request->getUri();
- } else {
- // Remove the host header if one is on the URI
- if ($host = $changes['uri']->getHost()) {
- $changes['set_headers']['Host'] = $host;
-
- if ($port = $changes['uri']->getPort()) {
- $standardPorts = ['http' => 80, 'https' => 443];
- $scheme = $changes['uri']->getScheme();
- if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) {
- $changes['set_headers']['Host'] .= ':'.$port;
- }
- }
- }
- $uri = $changes['uri'];
- }
-
- if (!empty($changes['remove_headers'])) {
- $headers = _caseless_remove($changes['remove_headers'], $headers);
- }
-
- if (!empty($changes['set_headers'])) {
- $headers = _caseless_remove(array_keys($changes['set_headers']), $headers);
- $headers = $changes['set_headers'] + $headers;
- }
-
- if (isset($changes['query'])) {
- $uri = $uri->withQuery($changes['query']);
- }
-
- if ($request instanceof ServerRequestInterface) {
- return new ServerRequest(
- isset($changes['method']) ? $changes['method'] : $request->getMethod(),
- $uri,
- $headers,
- isset($changes['body']) ? $changes['body'] : $request->getBody(),
- isset($changes['version'])
- ? $changes['version']
- : $request->getProtocolVersion(),
- $request->getServerParams()
- );
- }
-
- return new Request(
- isset($changes['method']) ? $changes['method'] : $request->getMethod(),
- $uri,
- $headers,
- isset($changes['body']) ? $changes['body'] : $request->getBody(),
- isset($changes['version'])
- ? $changes['version']
- : $request->getProtocolVersion()
- );
-}
-
-/**
- * Attempts to rewind a message body and throws an exception on failure.
- *
- * The body of the message will only be rewound if a call to `tell()` returns a
- * value other than `0`.
- *
- * @param MessageInterface $message Message to rewind
- *
- * @throws \RuntimeException
- */
-function rewind_body(MessageInterface $message)
-{
- $body = $message->getBody();
-
- if ($body->tell()) {
- $body->rewind();
- }
-}
-
-/**
- * Safely opens a PHP stream resource using a filename.
- *
- * When fopen fails, PHP normally raises a warning. This function adds an
- * error handler that checks for errors and throws an exception instead.
- *
- * @param string $filename File to open
- * @param string $mode Mode used to open the file
- *
- * @return resource
- * @throws \RuntimeException if the file cannot be opened
- */
-function try_fopen($filename, $mode)
-{
- $ex = null;
- set_error_handler(function () use ($filename, $mode, &$ex) {
- $ex = new \RuntimeException(sprintf(
- 'Unable to open %s using mode %s: %s',
- $filename,
- $mode,
- func_get_args()[1]
- ));
- });
-
- $handle = fopen($filename, $mode);
- restore_error_handler();
-
- if ($ex) {
- /** @var $ex \RuntimeException */
- throw $ex;
- }
-
- return $handle;
-}
-
-/**
- * Copy the contents of a stream into a string until the given number of
- * bytes have been read.
- *
- * @param StreamInterface $stream Stream to read
- * @param int $maxLen Maximum number of bytes to read. Pass -1
- * to read the entire stream.
- * @return string
- * @throws \RuntimeException on error.
- */
-function copy_to_string(StreamInterface $stream, $maxLen = -1)
-{
- $buffer = '';
-
- if ($maxLen === -1) {
- while (!$stream->eof()) {
- $buf = $stream->read(1048576);
- // Using a loose equality here to match on '' and false.
- if ($buf == null) {
- break;
- }
- $buffer .= $buf;
- }
- return $buffer;
- }
-
- $len = 0;
- while (!$stream->eof() && $len < $maxLen) {
- $buf = $stream->read($maxLen - $len);
- // Using a loose equality here to match on '' and false.
- if ($buf == null) {
- break;
- }
- $buffer .= $buf;
- $len = strlen($buffer);
- }
-
- return $buffer;
-}
-
-/**
- * Copy the contents of a stream into another stream until the given number
- * of bytes have been read.
- *
- * @param StreamInterface $source Stream to read from
- * @param StreamInterface $dest Stream to write to
- * @param int $maxLen Maximum number of bytes to read. Pass -1
- * to read the entire stream.
- *
- * @throws \RuntimeException on error.
- */
-function copy_to_stream(
- StreamInterface $source,
- StreamInterface $dest,
- $maxLen = -1
-) {
- $bufferSize = 8192;
-
- if ($maxLen === -1) {
- while (!$source->eof()) {
- if (!$dest->write($source->read($bufferSize))) {
- break;
- }
- }
- } else {
- $remaining = $maxLen;
- while ($remaining > 0 && !$source->eof()) {
- $buf = $source->read(min($bufferSize, $remaining));
- $len = strlen($buf);
- if (!$len) {
- break;
- }
- $remaining -= $len;
- $dest->write($buf);
- }
- }
-}
-
-/**
- * Calculate a hash of a Stream
- *
- * @param StreamInterface $stream Stream to calculate the hash for
- * @param string $algo Hash algorithm (e.g. md5, crc32, etc)
- * @param bool $rawOutput Whether or not to use raw output
- *
- * @return string Returns the hash of the stream
- * @throws \RuntimeException on error.
- */
-function hash(
- StreamInterface $stream,
- $algo,
- $rawOutput = false
-) {
- $pos = $stream->tell();
-
- if ($pos > 0) {
- $stream->rewind();
- }
-
- $ctx = hash_init($algo);
- while (!$stream->eof()) {
- hash_update($ctx, $stream->read(1048576));
- }
-
- $out = hash_final($ctx, (bool) $rawOutput);
- $stream->seek($pos);
-
- return $out;
-}
-
-/**
- * Read a line from the stream up to the maximum allowed buffer length
- *
- * @param StreamInterface $stream Stream to read from
- * @param int $maxLength Maximum buffer length
- *
- * @return string|bool
- */
-function readline(StreamInterface $stream, $maxLength = null)
-{
- $buffer = '';
- $size = 0;
-
- while (!$stream->eof()) {
- // Using a loose equality here to match on '' and false.
- if (null == ($byte = $stream->read(1))) {
- return $buffer;
- }
- $buffer .= $byte;
- // Break when a new line is found or the max length - 1 is reached
- if ($byte === "\n" || ++$size === $maxLength - 1) {
- break;
- }
- }
-
- return $buffer;
-}
-
-/**
- * Parses a request message string into a request object.
- *
- * @param string $message Request message string.
- *
- * @return Request
- */
-function parse_request($message)
-{
- $data = _parse_message($message);
- $matches = [];
- if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) {
- throw new \InvalidArgumentException('Invalid request string');
- }
- $parts = explode(' ', $data['start-line'], 3);
- $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1';
-
- $request = new Request(
- $parts[0],
- $matches[1] === '/' ? _parse_request_uri($parts[1], $data['headers']) : $parts[1],
- $data['headers'],
- $data['body'],
- $version
- );
-
- return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]);
-}
-
-/**
- * Parses a response message string into a response object.
- *
- * @param string $message Response message string.
- *
- * @return Response
- */
-function parse_response($message)
-{
- $data = _parse_message($message);
- // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space
- // between status-code and reason-phrase is required. But browsers accept
- // responses without space and reason as well.
- if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) {
- throw new \InvalidArgumentException('Invalid response string');
- }
- $parts = explode(' ', $data['start-line'], 3);
-
- return new Response(
- $parts[1],
- $data['headers'],
- $data['body'],
- explode('/', $parts[0])[1],
- isset($parts[2]) ? $parts[2] : null
- );
-}
-
-/**
- * Parse a query string into an associative array.
- *
- * If multiple values are found for the same key, the value of that key
- * value pair will become an array. This function does not parse nested
- * PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will
- * be parsed into ['foo[a]' => '1', 'foo[b]' => '2']).
- *
- * @param string $str Query string to parse
- * @param bool|string $urlEncoding How the query string is encoded
- *
- * @return array
- */
-function parse_query($str, $urlEncoding = true)
-{
- $result = [];
-
- if ($str === '') {
- return $result;
- }
-
- if ($urlEncoding === true) {
- $decoder = function ($value) {
- return rawurldecode(str_replace('+', ' ', $value));
- };
- } elseif ($urlEncoding == PHP_QUERY_RFC3986) {
- $decoder = 'rawurldecode';
- } elseif ($urlEncoding == PHP_QUERY_RFC1738) {
- $decoder = 'urldecode';
- } else {
- $decoder = function ($str) { return $str; };
- }
-
- foreach (explode('&', $str) as $kvp) {
- $parts = explode('=', $kvp, 2);
- $key = $decoder($parts[0]);
- $value = isset($parts[1]) ? $decoder($parts[1]) : null;
- if (!isset($result[$key])) {
- $result[$key] = $value;
- } else {
- if (!is_array($result[$key])) {
- $result[$key] = [$result[$key]];
- }
- $result[$key][] = $value;
- }
- }
-
- return $result;
-}
-
-/**
- * Build a query string from an array of key value pairs.
- *
- * This function can use the return value of parse_query() to build a query
- * string. This function does not modify the provided keys when an array is
- * encountered (like http_build_query would).
- *
- * @param array $params Query string parameters.
- * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986
- * to encode using RFC3986, or PHP_QUERY_RFC1738
- * to encode using RFC1738.
- * @return string
- */
-function build_query(array $params, $encoding = PHP_QUERY_RFC3986)
-{
- if (!$params) {
- return '';
- }
-
- if ($encoding === false) {
- $encoder = function ($str) { return $str; };
- } elseif ($encoding === PHP_QUERY_RFC3986) {
- $encoder = 'rawurlencode';
- } elseif ($encoding === PHP_QUERY_RFC1738) {
- $encoder = 'urlencode';
- } else {
- throw new \InvalidArgumentException('Invalid type');
- }
-
- $qs = '';
- foreach ($params as $k => $v) {
- $k = $encoder($k);
- if (!is_array($v)) {
- $qs .= $k;
- if ($v !== null) {
- $qs .= '=' . $encoder($v);
- }
- $qs .= '&';
- } else {
- foreach ($v as $vv) {
- $qs .= $k;
- if ($vv !== null) {
- $qs .= '=' . $encoder($vv);
- }
- $qs .= '&';
- }
- }
- }
-
- return $qs ? (string) substr($qs, 0, -1) : '';
-}
-
-/**
- * Determines the mimetype of a file by looking at its extension.
- *
- * @param $filename
- *
- * @return null|string
- */
-function mimetype_from_filename($filename)
-{
- return mimetype_from_extension(pathinfo($filename, PATHINFO_EXTENSION));
-}
-
-/**
- * Maps a file extensions to a mimetype.
- *
- * @param $extension string The file extension.
- *
- * @return string|null
- * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types
- */
-function mimetype_from_extension($extension)
-{
- static $mimetypes = [
- '7z' => 'application/x-7z-compressed',
- 'aac' => 'audio/x-aac',
- 'ai' => 'application/postscript',
- 'aif' => 'audio/x-aiff',
- 'asc' => 'text/plain',
- 'asf' => 'video/x-ms-asf',
- 'atom' => 'application/atom+xml',
- 'avi' => 'video/x-msvideo',
- 'bmp' => 'image/bmp',
- 'bz2' => 'application/x-bzip2',
- 'cer' => 'application/pkix-cert',
- 'crl' => 'application/pkix-crl',
- 'crt' => 'application/x-x509-ca-cert',
- 'css' => 'text/css',
- 'csv' => 'text/csv',
- 'cu' => 'application/cu-seeme',
- 'deb' => 'application/x-debian-package',
- 'doc' => 'application/msword',
- 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
- 'dvi' => 'application/x-dvi',
- 'eot' => 'application/vnd.ms-fontobject',
- 'eps' => 'application/postscript',
- 'epub' => 'application/epub+zip',
- 'etx' => 'text/x-setext',
- 'flac' => 'audio/flac',
- 'flv' => 'video/x-flv',
- 'gif' => 'image/gif',
- 'gz' => 'application/gzip',
- 'htm' => 'text/html',
- 'html' => 'text/html',
- 'ico' => 'image/x-icon',
- 'ics' => 'text/calendar',
- 'ini' => 'text/plain',
- 'iso' => 'application/x-iso9660-image',
- 'jar' => 'application/java-archive',
- 'jpe' => 'image/jpeg',
- 'jpeg' => 'image/jpeg',
- 'jpg' => 'image/jpeg',
- 'js' => 'text/javascript',
- 'json' => 'application/json',
- 'latex' => 'application/x-latex',
- 'log' => 'text/plain',
- 'm4a' => 'audio/mp4',
- 'm4v' => 'video/mp4',
- 'mid' => 'audio/midi',
- 'midi' => 'audio/midi',
- 'mov' => 'video/quicktime',
- 'mp3' => 'audio/mpeg',
- 'mp4' => 'video/mp4',
- 'mp4a' => 'audio/mp4',
- 'mp4v' => 'video/mp4',
- 'mpe' => 'video/mpeg',
- 'mpeg' => 'video/mpeg',
- 'mpg' => 'video/mpeg',
- 'mpg4' => 'video/mp4',
- 'oga' => 'audio/ogg',
- 'ogg' => 'audio/ogg',
- 'ogv' => 'video/ogg',
- 'ogx' => 'application/ogg',
- 'pbm' => 'image/x-portable-bitmap',
- 'pdf' => 'application/pdf',
- 'pgm' => 'image/x-portable-graymap',
- 'png' => 'image/png',
- 'pnm' => 'image/x-portable-anymap',
- 'ppm' => 'image/x-portable-pixmap',
- 'ppt' => 'application/vnd.ms-powerpoint',
- 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
- 'ps' => 'application/postscript',
- 'qt' => 'video/quicktime',
- 'rar' => 'application/x-rar-compressed',
- 'ras' => 'image/x-cmu-raster',
- 'rss' => 'application/rss+xml',
- 'rtf' => 'application/rtf',
- 'sgm' => 'text/sgml',
- 'sgml' => 'text/sgml',
- 'svg' => 'image/svg+xml',
- 'swf' => 'application/x-shockwave-flash',
- 'tar' => 'application/x-tar',
- 'tif' => 'image/tiff',
- 'tiff' => 'image/tiff',
- 'torrent' => 'application/x-bittorrent',
- 'ttf' => 'application/x-font-ttf',
- 'txt' => 'text/plain',
- 'wav' => 'audio/x-wav',
- 'webm' => 'video/webm',
- 'wma' => 'audio/x-ms-wma',
- 'wmv' => 'video/x-ms-wmv',
- 'woff' => 'application/x-font-woff',
- 'wsdl' => 'application/wsdl+xml',
- 'xbm' => 'image/x-xbitmap',
- 'xls' => 'application/vnd.ms-excel',
- 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
- 'xml' => 'application/xml',
- 'xpm' => 'image/x-xpixmap',
- 'xwd' => 'image/x-xwindowdump',
- 'yaml' => 'text/yaml',
- 'yml' => 'text/yaml',
- 'zip' => 'application/zip',
- ];
-
- $extension = strtolower($extension);
-
- return isset($mimetypes[$extension])
- ? $mimetypes[$extension]
- : null;
-}
-
-/**
- * Parses an HTTP message into an associative array.
- *
- * The array contains the "start-line" key containing the start line of
- * the message, "headers" key containing an associative array of header
- * array values, and a "body" key containing the body of the message.
- *
- * @param string $message HTTP request or response to parse.
- *
- * @return array
- * @internal
- */
-function _parse_message($message)
-{
- if (!$message) {
- throw new \InvalidArgumentException('Invalid message');
- }
-
- // Iterate over each line in the message, accounting for line endings
- $lines = preg_split('/(\\r?\\n)/', $message, -1, PREG_SPLIT_DELIM_CAPTURE);
- $result = ['start-line' => array_shift($lines), 'headers' => [], 'body' => ''];
- array_shift($lines);
-
- for ($i = 0, $totalLines = count($lines); $i < $totalLines; $i += 2) {
- $line = $lines[$i];
- // If two line breaks were encountered, then this is the end of body
- if (empty($line)) {
- if ($i < $totalLines - 1) {
- $result['body'] = implode('', array_slice($lines, $i + 2));
- }
- break;
- }
- if (strpos($line, ':')) {
- $parts = explode(':', $line, 2);
- $key = trim($parts[0]);
- $value = isset($parts[1]) ? trim($parts[1]) : '';
- $result['headers'][$key][] = $value;
- }
- }
-
- return $result;
-}
-
-/**
- * Constructs a URI for an HTTP request message.
- *
- * @param string $path Path from the start-line
- * @param array $headers Array of headers (each value an array).
- *
- * @return string
- * @internal
- */
-function _parse_request_uri($path, array $headers)
-{
- $hostKey = array_filter(array_keys($headers), function ($k) {
- return strtolower($k) === 'host';
- });
-
- // If no host is found, then a full URI cannot be constructed.
- if (!$hostKey) {
- return $path;
- }
-
- $host = $headers[reset($hostKey)][0];
- $scheme = substr($host, -4) === ':443' ? 'https' : 'http';
-
- return $scheme . '://' . $host . '/' . ltrim($path, '/');
-}
-
-/** @internal */
-function _caseless_remove($keys, array $data)
-{
- $result = [];
-
- foreach ($keys as &$key) {
- $key = strtolower($key);
- }
-
- foreach ($data as $k => $v) {
- if (!in_array(strtolower($k), $keys)) {
- $result[$k] = $v;
- }
- }
-
- return $result;
-}
diff --git a/server/vendor/guzzlehttp/psr7/src/functions_include.php b/server/vendor/guzzlehttp/psr7/src/functions_include.php
deleted file mode 100644
index 96a4a83..0000000
--- a/server/vendor/guzzlehttp/psr7/src/functions_include.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-// Don't redefine the functions if included multiple times.
-if (!function_exists('GuzzleHttp\Psr7\str')) {
- require __DIR__ . '/functions.php';
-}
diff --git a/server/vendor/nikic/fast-route/.gitignore b/server/vendor/nikic/fast-route/.gitignore
deleted file mode 100644
index e378a07..0000000
--- a/server/vendor/nikic/fast-route/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-/vendor/
-.idea/
-
-# ignore lock file since we have no extra dependencies
-composer.lock
diff --git a/server/vendor/nikic/fast-route/.hhconfig b/server/vendor/nikic/fast-route/.hhconfig
deleted file mode 100644
index 0c2153c..0000000
--- a/server/vendor/nikic/fast-route/.hhconfig
+++ /dev/null
@@ -1 +0,0 @@
-assume_php=false
diff --git a/server/vendor/nikic/fast-route/.travis.yml b/server/vendor/nikic/fast-route/.travis.yml
deleted file mode 100644
index e16ed63..0000000
--- a/server/vendor/nikic/fast-route/.travis.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-language: php
-
-php:
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - hhvm
-
-matrix:
- allow_failures:
- - php: 7.0
diff --git a/server/vendor/nikic/fast-route/FastRoute.hhi b/server/vendor/nikic/fast-route/FastRoute.hhi
deleted file mode 100644
index c34bb8e..0000000
--- a/server/vendor/nikic/fast-route/FastRoute.hhi
+++ /dev/null
@@ -1,126 +0,0 @@
-<?hh // decl
-
-namespace FastRoute {
- class BadRouteException extends \LogicException {
- }
-
- interface RouteParser {
- public function parse(string $route): array<array>;
- }
-
- class RouteCollector {
- public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator);
- public function addRoute(mixed $httpMethod, string $route, mixed $handler): void;
- public function getData(): array;
- }
-
- class Route {
- public function __construct(string $httpMethod, mixed $handler, string $regex, array $variables);
- public function matches(string $str): bool;
- }
-
- interface DataGenerator {
- public function addRoute(string $httpMethod, array $routeData, mixed $handler);
- public function getData(): array;
- }
-
- interface Dispatcher {
- const int NOT_FOUND = 0;
- const int FOUND = 1;
- const int METHOD_NOT_ALLOWED = 2;
- public function dispatch(string $httpMethod, string $uri): array;
- }
-
- function simpleDispatcher(
- (function(RouteCollector): void) $routeDefinitionCallback,
- shape(
- 'routeParser' => ?classname<RouteParser>,
- 'dataGenerator' => ?classname<DataGenerator>,
- 'dispatcher' => ?classname<Dispatcher>,
- 'routeCollector' => ?classname<RouteCollector>,
- ) $options = shape()): Dispatcher;
-
- function cachedDispatcher(
- (function(RouteCollector): void) $routeDefinitionCallback,
- shape(
- 'routeParser' => ?classname<RouteParser>,
- 'dataGenerator' => ?classname<DataGenerator>,
- 'dispatcher' => ?classname<Dispatcher>,
- 'routeCollector' => ?classname<RouteCollector>,
- 'cacheDisabled' => ?bool,
- 'cacheFile' => ?string,
- ) $options = shape()): Dispatcher;
-}
-
-namespace FastRoute\DataGenerator {
- abstract class RegexBasedAbstract implements \FastRoute\DataGenerator {
- protected abstract function getApproxChunkSize();
- protected abstract function processChunk($regexToRoutesMap);
-
- public function addRoute(string $httpMethod, array $routeData, mixed $handler): void;
- public function getData(): array;
- }
-
- class CharCountBased extends RegexBasedAbstract {
- protected function getApproxChunkSize(): int;
- protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
- }
-
- class GroupCountBased extends RegexBasedAbstract {
- protected function getApproxChunkSize(): int;
- protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
- }
-
- class GroupPosBased extends RegexBasedAbstract {
- protected function getApproxChunkSize(): int;
- protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
- }
-
- class MarkBased extends RegexBasedAbstract {
- protected function getApproxChunkSize(): int;
- protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
- }
-}
-
-namespace FastRoute\Dispatcher {
- abstract class RegexBasedAbstract implements \FastRoute\Dispatcher {
- protected abstract function dispatchVariableRoute(array<array> $routeData, string $uri): array;
-
- public function dispatch(string $httpMethod, string $uri): array;
- }
-
- class GroupPosBased extends RegexBasedAbstract {
- public function __construct(array $data);
- protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
- }
-
- class GroupCountBased extends RegexBasedAbstract {
- public function __construct(array $data);
- protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
- }
-
- class CharCountBased extends RegexBasedAbstract {
- public function __construct(array $data);
- protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
- }
-
- class MarkBased extends RegexBasedAbstract {
- public function __construct(array $data);
- protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
- }
-}
-
-namespace FastRoute\RouteParser {
- class Std implements \FastRoute\RouteParser {
- const string VARIABLE_REGEX = <<<'REGEX'
-\{
- \s* ([a-zA-Z][a-zA-Z0-9_]*) \s*
- (?:
- : \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*)
- )?
-\}
-REGEX;
- const string DEFAULT_DISPATCH_REGEX = '[^/]+';
- public function parse(string $route): array<array>;
- }
-}
diff --git a/server/vendor/nikic/fast-route/LICENSE b/server/vendor/nikic/fast-route/LICENSE
deleted file mode 100644
index 478e764..0000000
--- a/server/vendor/nikic/fast-route/LICENSE
+++ /dev/null
@@ -1,31 +0,0 @@
-Copyright (c) 2013 by Nikita Popov.
-
-Some rights reserved.
-
-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.
-
- * The names of the contributors may not 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/server/vendor/nikic/fast-route/README.md b/server/vendor/nikic/fast-route/README.md
deleted file mode 100644
index 91bd466..0000000
--- a/server/vendor/nikic/fast-route/README.md
+++ /dev/null
@@ -1,313 +0,0 @@
-FastRoute - Fast request router for PHP
-=======================================
-
-This library provides a fast implementation of a regular expression based router. [Blog post explaining how the
-implementation works and why it is fast.][blog_post]
-
-Install
--------
-
-To install with composer:
-
-```sh
-composer require nikic/fast-route
-```
-
-Requires PHP 5.4 or newer.
-
-Usage
------
-
-Here's a basic usage example:
-
-```php
-<?php
-
-require '/path/to/vendor/autoload.php';
-
-$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
- $r->addRoute('GET', '/users', 'get_all_users_handler');
- // {id} must be a number (\d+)
- $r->addRoute('GET', '/user/{id:\d+}', 'get_user_handler');
- // The /{title} suffix is optional
- $r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler');
-});
-
-// Fetch method and URI from somewhere
-$httpMethod = $_SERVER['REQUEST_METHOD'];
-$uri = $_SERVER['REQUEST_URI'];
-
-// Strip query string (?foo=bar) and decode URI
-if (false !== $pos = strpos($uri, '?')) {
- $uri = substr($uri, 0, $pos);
-}
-$uri = rawurldecode($uri);
-
-$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
-switch ($routeInfo[0]) {
- case FastRoute\Dispatcher::NOT_FOUND:
- // ... 404 Not Found
- break;
- case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
- $allowedMethods = $routeInfo[1];
- // ... 405 Method Not Allowed
- break;
- case FastRoute\Dispatcher::FOUND:
- $handler = $routeInfo[1];
- $vars = $routeInfo[2];
- // ... call $handler with $vars
- break;
-}
-```
-
-### Defining routes
-
-The routes are defined by calling the `FastRoute\simpleDispatcher()` function, which accepts
-a callable taking a `FastRoute\RouteCollector` instance. The routes are added by calling
-`addRoute()` on the collector instance:
-
-```php
-$r->addRoute($method, $routePattern, $handler);
-```
-
-The `$method` is an uppercase HTTP method string for which a certain route should match. It
-is possible to specify multiple valid methods using an array:
-
-```php
-// These two calls
-$r->addRoute('GET', '/test', 'handler');
-$r->addRoute('POST', '/test', 'handler');
-// Are equivalent to this one call
-$r->addRoute(['GET', 'POST'], '/test', 'handler');
-```
-
-By default the `$routePattern` uses a syntax where `{foo}` specifies a placeholder with name `foo`
-and matching the regex `[^/]+`. To adjust the pattern the placeholder matches, you can specify
-a custom pattern by writing `{bar:[0-9]+}`. Some examples:
-
-```php
-// Matches /user/42, but not /user/xyz
-$r->addRoute('GET', '/user/{id:\d+}', 'handler');
-
-// Matches /user/foobar, but not /user/foo/bar
-$r->addRoute('GET', '/user/{name}', 'handler');
-
-// Matches /user/foo/bar as well
-$r->addRoute('GET', '/user/{name:.+}', 'handler');
-```
-
-Custom patterns for route placeholders cannot use capturing groups. For example `{lang:(en|de)}`
-is not a valid placeholder, because `()` is a capturing group. Instead you can use either
-`{lang:en|de}` or `{lang:(?:en|de)}`.
-
-Furthermore parts of the route enclosed in `[...]` are considered optional, so that `/foo[bar]`
-will match both `/foo` and `/foobar`. Optional parts are only supported in a trailing position,
-not in the middle of a route.
-
-```php
-// This route
-$r->addRoute('GET', '/user/{id:\d+}[/{name}]', 'handler');
-// Is equivalent to these two routes
-$r->addRoute('GET', '/user/{id:\d+}', 'handler');
-$r->addRoute('GET', '/user/{id:\d+}/{name}', 'handler');
-
-// Multiple nested optional parts are possible as well
-$r->addRoute('GET', '/user[/{id:\d+}[/{name}]]', 'handler');
-
-// This route is NOT valid, because optional parts can only occur at the end
-$r->addRoute('GET', '/user[/{id:\d+}]/{name}', 'handler');
-```
-
-The `$handler` parameter does not necessarily have to be a callback, it could also be a controller
-class name or any other kind of data you wish to associate with the route. FastRoute only tells you
-which handler corresponds to your URI, how you interpret it is up to you.
-
-#### Shorcut methods for common request methods
-
-For the `GET`, `POST`, `PUT`, `PATCH`, `DELETE` and `HEAD` request methods shortcut methods are available. For example:
-
-```php
-$r->get('/get-route', 'get_handler');
-$r->post('/post-route', 'post_handler');
-```
-
-Is equivalent to:
-
-```php
-$r->addRoute('GET', '/get-route', 'get_handler');
-$r->addRoute('POST', '/post-route', 'post_handler');
-```
-
-#### Route Groups
-
-Additionally, you can specify routes inside of a group. All routes defined inside a group will have a common prefix.
-
-For example, defining your routes as:
-
-```php
-$r->addGroup('/admin', function (RouteCollector $r) {
- $r->addRoute('GET', '/do-something', 'handler');
- $r->addRoute('GET', '/do-another-thing', 'handler');
- $r->addRoute('GET', '/do-something-else', 'handler');
-});
-```
-
-Will have the same result as:
-
- ```php
-$r->addRoute('GET', '/admin/do-something', 'handler');
-$r->addRoute('GET', '/admin/do-another-thing', 'handler');
-$r->addRoute('GET', '/admin/do-something-else', 'handler');
- ```
-
-Nested groups are also supported, in which case the prefixes of all the nested groups are combined.
-
-### Caching
-
-The reason `simpleDispatcher` accepts a callback for defining the routes is to allow seamless
-caching. By using `cachedDispatcher` instead of `simpleDispatcher` you can cache the generated
-routing data and construct the dispatcher from the cached information:
-
-```php
-<?php
-
-$dispatcher = FastRoute\cachedDispatcher(function(FastRoute\RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
- $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1');
- $r->addRoute('GET', '/user/{name}', 'handler2');
-}, [
- 'cacheFile' => __DIR__ . '/route.cache', /* required */
- 'cacheDisabled' => IS_DEBUG_ENABLED, /* optional, enabled by default */
-]);
-```
-
-The second parameter to the function is an options array, which can be used to specify the cache
-file location, among other things.
-
-### Dispatching a URI
-
-A URI is dispatched by calling the `dispatch()` method of the created dispatcher. This method
-accepts the HTTP method and a URI. Getting those two bits of information (and normalizing them
-appropriately) is your job - this library is not bound to the PHP web SAPIs.
-
-The `dispatch()` method returns an array whose first element contains a status code. It is one
-of `Dispatcher::NOT_FOUND`, `Dispatcher::METHOD_NOT_ALLOWED` and `Dispatcher::FOUND`. For the
-method not allowed status the second array element contains a list of HTTP methods allowed for
-the supplied URI. For example:
-
- [FastRoute\Dispatcher::METHOD_NOT_ALLOWED, ['GET', 'POST']]
-
-> **NOTE:** The HTTP specification requires that a `405 Method Not Allowed` response include the
-`Allow:` header to detail available methods for the requested resource. Applications using FastRoute
-should use the second array element to add this header when relaying a 405 response.
-
-For the found status the second array element is the handler that was associated with the route
-and the third array element is a dictionary of placeholder names to their values. For example:
-
- /* Routing against GET /user/nikic/42 */
-
- [FastRoute\Dispatcher::FOUND, 'handler0', ['name' => 'nikic', 'id' => '42']]
-
-### Overriding the route parser and dispatcher
-
-The routing process makes use of three components: A route parser, a data generator and a
-dispatcher. The three components adhere to the following interfaces:
-
-```php
-<?php
-
-namespace FastRoute;
-
-interface RouteParser {
- public function parse($route);
-}
-
-interface DataGenerator {
- public function addRoute($httpMethod, $routeData, $handler);
- public function getData();
-}
-
-interface Dispatcher {
- const NOT_FOUND = 0, FOUND = 1, METHOD_NOT_ALLOWED = 2;
-
- public function dispatch($httpMethod, $uri);
-}
-```
-
-The route parser takes a route pattern string and converts it into an array of route infos, where
-each route info is again an array of it's parts. The structure is best understood using an example:
-
- /* The route /user/{id:\d+}[/{name}] converts to the following array: */
- [
- [
- '/user/',
- ['id', '\d+'],
- ],
- [
- '/user/',
- ['id', '\d+'],
- '/',
- ['name', '[^/]+'],
- ],
- ]
-
-This array can then be passed to the `addRoute()` method of a data generator. After all routes have
-been added the `getData()` of the generator is invoked, which returns all the routing data required
-by the dispatcher. The format of this data is not further specified - it is tightly coupled to
-the corresponding dispatcher.
-
-The dispatcher accepts the routing data via a constructor and provides a `dispatch()` method, which
-you're already familiar with.
-
-The route parser can be overwritten individually (to make use of some different pattern syntax),
-however the data generator and dispatcher should always be changed as a pair, as the output from
-the former is tightly coupled to the input of the latter. The reason the generator and the
-dispatcher are separate is that only the latter is needed when using caching (as the output of
-the former is what is being cached.)
-
-When using the `simpleDispatcher` / `cachedDispatcher` functions from above the override happens
-through the options array:
-
-```php
-<?php
-
-$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
- /* ... */
-}, [
- 'routeParser' => 'FastRoute\\RouteParser\\Std',
- 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
- 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
-]);
-```
-
-The above options array corresponds to the defaults. By replacing `GroupCountBased` by
-`GroupPosBased` you could switch to a different dispatching strategy.
-
-### A Note on HEAD Requests
-
-The HTTP spec requires servers to [support both GET and HEAD methods][2616-511]:
-
-> The methods GET and HEAD MUST be supported by all general-purpose servers
-
-To avoid forcing users to manually register HEAD routes for each resource we fallback to matching an
-available GET route for a given resource. The PHP web SAPI transparently removes the entity body
-from HEAD responses so this behavior has no effect on the vast majority of users.
-
-However, implementers using FastRoute outside the web SAPI environment (e.g. a custom server) MUST
-NOT send entity bodies generated in response to HEAD requests. If you are a non-SAPI user this is
-*your responsibility*; FastRoute has no purview to prevent you from breaking HTTP in such cases.
-
-Finally, note that applications MAY always specify their own HEAD method route for a given
-resource to bypass this behavior entirely.
-
-### Credits
-
-This library is based on a router that [Levi Morrison][levi] implemented for the Aerys server.
-
-A large number of tests, as well as HTTP compliance considerations, were provided by [Daniel Lowrey][rdlowrey].
-
-
-[2616-511]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.1 "RFC 2616 Section 5.1.1"
-[blog_post]: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html
-[levi]: https://github.com/morrisonlevi
-[rdlowrey]: https://github.com/rdlowrey
diff --git a/server/vendor/nikic/fast-route/composer.json b/server/vendor/nikic/fast-route/composer.json
deleted file mode 100644
index 62aad22..0000000
--- a/server/vendor/nikic/fast-route/composer.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "nikic/fast-route",
- "description": "Fast request router for PHP",
- "keywords": ["routing", "router"],
- "license": "BSD-3-Clause",
- "authors": [
- {
- "name": "Nikita Popov",
- "email": "nikic@php.net"
- }
- ],
- "require": {
- "php": ">=5.4.0"
- },
- "autoload": {
- "psr-4": {
- "FastRoute\\": "src/"
- },
- "files": ["src/functions.php"]
- }
-}
diff --git a/server/vendor/nikic/fast-route/phpunit.xml b/server/vendor/nikic/fast-route/phpunit.xml
deleted file mode 100644
index 3c807b6..0000000
--- a/server/vendor/nikic/fast-route/phpunit.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="false"
- backupStaticAttributes="false"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- processIsolation="false"
- syntaxCheck="false"
- bootstrap="test/bootstrap.php"
- >
- <testsuites>
- <testsuite name="FastRoute Tests">
- <directory>./test/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./src/</directory>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/server/vendor/nikic/fast-route/src/BadRouteException.php b/server/vendor/nikic/fast-route/src/BadRouteException.php
deleted file mode 100644
index 7e38479..0000000
--- a/server/vendor/nikic/fast-route/src/BadRouteException.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-class BadRouteException extends \LogicException {
-}
diff --git a/server/vendor/nikic/fast-route/src/DataGenerator.php b/server/vendor/nikic/fast-route/src/DataGenerator.php
deleted file mode 100644
index 16053db..0000000
--- a/server/vendor/nikic/fast-route/src/DataGenerator.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-interface DataGenerator {
- /**
- * Adds a route to the data generator. The route data uses the
- * same format that is returned by RouterParser::parser().
- *
- * The handler doesn't necessarily need to be a callable, it
- * can be arbitrary data that will be returned when the route
- * matches.
- *
- * @param string $httpMethod
- * @param array $routeData
- * @param mixed $handler
- */
- public function addRoute($httpMethod, $routeData, $handler);
-
- /**
- * Returns dispatcher data in some unspecified format, which
- * depends on the used method of dispatch.
- */
- public function getData();
-}
diff --git a/server/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php b/server/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php
deleted file mode 100644
index 5c38b89..0000000
--- a/server/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace FastRoute\DataGenerator;
-
-class CharCountBased extends RegexBasedAbstract {
- protected function getApproxChunkSize() {
- return 30;
- }
-
- protected function processChunk($regexToRoutesMap) {
- $routeMap = [];
- $regexes = [];
-
- $suffixLen = 0;
- $suffix = '';
- $count = count($regexToRoutesMap);
- foreach ($regexToRoutesMap as $regex => $route) {
- $suffixLen++;
- $suffix .= "\t";
-
- $regexes[] = '(?:' . $regex . '/(\t{' . $suffixLen . '})\t{' . ($count - $suffixLen) . '})';
- $routeMap[$suffix] = [$route->handler, $route->variables];
- }
-
- $regex = '~^(?|' . implode('|', $regexes) . ')$~';
- return ['regex' => $regex, 'suffix' => '/' . $suffix, 'routeMap' => $routeMap];
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php b/server/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php
deleted file mode 100644
index d51807f..0000000
--- a/server/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace FastRoute\DataGenerator;
-
-class GroupCountBased extends RegexBasedAbstract {
- protected function getApproxChunkSize() {
- return 10;
- }
-
- protected function processChunk($regexToRoutesMap) {
- $routeMap = [];
- $regexes = [];
- $numGroups = 0;
- foreach ($regexToRoutesMap as $regex => $route) {
- $numVariables = count($route->variables);
- $numGroups = max($numGroups, $numVariables);
-
- $regexes[] = $regex . str_repeat('()', $numGroups - $numVariables);
- $routeMap[$numGroups + 1] = [$route->handler, $route->variables];
-
- ++$numGroups;
- }
-
- $regex = '~^(?|' . implode('|', $regexes) . ')$~';
- return ['regex' => $regex, 'routeMap' => $routeMap];
- }
-}
-
diff --git a/server/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php b/server/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php
deleted file mode 100644
index 4152f7a..0000000
--- a/server/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace FastRoute\DataGenerator;
-
-class GroupPosBased extends RegexBasedAbstract {
- protected function getApproxChunkSize() {
- return 10;
- }
-
- protected function processChunk($regexToRoutesMap) {
- $routeMap = [];
- $regexes = [];
- $offset = 1;
- foreach ($regexToRoutesMap as $regex => $route) {
- $regexes[] = $regex;
- $routeMap[$offset] = [$route->handler, $route->variables];
-
- $offset += count($route->variables);
- }
-
- $regex = '~^(?:' . implode('|', $regexes) . ')$~';
- return ['regex' => $regex, 'routeMap' => $routeMap];
- }
-}
-
diff --git a/server/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php b/server/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php
deleted file mode 100644
index 61359f5..0000000
--- a/server/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace FastRoute\DataGenerator;
-
-class MarkBased extends RegexBasedAbstract {
- protected function getApproxChunkSize() {
- return 30;
- }
-
- protected function processChunk($regexToRoutesMap) {
- $routeMap = [];
- $regexes = [];
- $markName = 'a';
- foreach ($regexToRoutesMap as $regex => $route) {
- $regexes[] = $regex . '(*MARK:' . $markName . ')';
- $routeMap[$markName] = [$route->handler, $route->variables];
-
- ++$markName;
- }
-
- $regex = '~^(?|' . implode('|', $regexes) . ')$~';
- return ['regex' => $regex, 'routeMap' => $routeMap];
- }
-}
-
diff --git a/server/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php b/server/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php
deleted file mode 100644
index 713d897..0000000
--- a/server/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-
-namespace FastRoute\DataGenerator;
-
-use FastRoute\DataGenerator;
-use FastRoute\BadRouteException;
-use FastRoute\Route;
-
-abstract class RegexBasedAbstract implements DataGenerator {
- protected $staticRoutes = [];
- protected $methodToRegexToRoutesMap = [];
-
- protected abstract function getApproxChunkSize();
- protected abstract function processChunk($regexToRoutesMap);
-
- public function addRoute($httpMethod, $routeData, $handler) {
- if ($this->isStaticRoute($routeData)) {
- $this->addStaticRoute($httpMethod, $routeData, $handler);
- } else {
- $this->addVariableRoute($httpMethod, $routeData, $handler);
- }
- }
-
- public function getData() {
- if (empty($this->methodToRegexToRoutesMap)) {
- return [$this->staticRoutes, []];
- }
-
- return [$this->staticRoutes, $this->generateVariableRouteData()];
- }
-
- private function generateVariableRouteData() {
- $data = [];
- foreach ($this->methodToRegexToRoutesMap as $method => $regexToRoutesMap) {
- $chunkSize = $this->computeChunkSize(count($regexToRoutesMap));
- $chunks = array_chunk($regexToRoutesMap, $chunkSize, true);
- $data[$method] = array_map([$this, 'processChunk'], $chunks);
- }
- return $data;
- }
-
- private function computeChunkSize($count) {
- $numParts = max(1, round($count / $this->getApproxChunkSize()));
- return ceil($count / $numParts);
- }
-
- private function isStaticRoute($routeData) {
- return count($routeData) === 1 && is_string($routeData[0]);
- }
-
- private function addStaticRoute($httpMethod, $routeData, $handler) {
- $routeStr = $routeData[0];
-
- if (isset($this->staticRoutes[$httpMethod][$routeStr])) {
- throw new BadRouteException(sprintf(
- 'Cannot register two routes matching "%s" for method "%s"',
- $routeStr, $httpMethod
- ));
- }
-
- if (isset($this->methodToRegexToRoutesMap[$httpMethod])) {
- foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) {
- if ($route->matches($routeStr)) {
- throw new BadRouteException(sprintf(
- 'Static route "%s" is shadowed by previously defined variable route "%s" for method "%s"',
- $routeStr, $route->regex, $httpMethod
- ));
- }
- }
- }
-
- $this->staticRoutes[$httpMethod][$routeStr] = $handler;
- }
-
- private function addVariableRoute($httpMethod, $routeData, $handler) {
- list($regex, $variables) = $this->buildRegexForRoute($routeData);
-
- if (isset($this->methodToRegexToRoutesMap[$httpMethod][$regex])) {
- throw new BadRouteException(sprintf(
- 'Cannot register two routes matching "%s" for method "%s"',
- $regex, $httpMethod
- ));
- }
-
- $this->methodToRegexToRoutesMap[$httpMethod][$regex] = new Route(
- $httpMethod, $handler, $regex, $variables
- );
- }
-
- private function buildRegexForRoute($routeData) {
- $regex = '';
- $variables = [];
- foreach ($routeData as $part) {
- if (is_string($part)) {
- $regex .= preg_quote($part, '~');
- continue;
- }
-
- list($varName, $regexPart) = $part;
-
- if (isset($variables[$varName])) {
- throw new BadRouteException(sprintf(
- 'Cannot use the same placeholder "%s" twice', $varName
- ));
- }
-
- if ($this->regexHasCapturingGroups($regexPart)) {
- throw new BadRouteException(sprintf(
- 'Regex "%s" for parameter "%s" contains a capturing group',
- $regexPart, $varName
- ));
- }
-
- $variables[$varName] = $varName;
- $regex .= '(' . $regexPart . ')';
- }
-
- return [$regex, $variables];
- }
-
- private function regexHasCapturingGroups($regex) {
- if (false === strpos($regex, '(')) {
- // Needs to have at least a ( to contain a capturing group
- return false;
- }
-
- // Semi-accurate detection for capturing groups
- return preg_match(
- '~
- (?:
- \(\?\(
- | \[ [^\]\\\\]* (?: \\\\ . [^\]\\\\]* )* \]
- | \\\\ .
- ) (*SKIP)(*FAIL) |
- \(
- (?!
- \? (?! <(?![!=]) | P< | \' )
- | \*
- )
- ~x',
- $regex
- );
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/Dispatcher.php b/server/vendor/nikic/fast-route/src/Dispatcher.php
deleted file mode 100644
index ea98009..0000000
--- a/server/vendor/nikic/fast-route/src/Dispatcher.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-interface Dispatcher {
- const NOT_FOUND = 0;
- const FOUND = 1;
- const METHOD_NOT_ALLOWED = 2;
-
- /**
- * Dispatches against the provided HTTP method verb and URI.
- *
- * Returns array with one of the following formats:
- *
- * [self::NOT_FOUND]
- * [self::METHOD_NOT_ALLOWED, ['GET', 'OTHER_ALLOWED_METHODS']]
- * [self::FOUND, $handler, ['varName' => 'value', ...]]
- *
- * @param string $httpMethod
- * @param string $uri
- *
- * @return array
- */
- public function dispatch($httpMethod, $uri);
-}
diff --git a/server/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php b/server/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php
deleted file mode 100644
index 22ba240..0000000
--- a/server/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class CharCountBased extends RegexBasedAbstract {
- public function __construct($data) {
- list($this->staticRouteMap, $this->variableRouteData) = $data;
- }
-
- protected function dispatchVariableRoute($routeData, $uri) {
- foreach ($routeData as $data) {
- if (!preg_match($data['regex'], $uri . $data['suffix'], $matches)) {
- continue;
- }
-
- list($handler, $varNames) = $data['routeMap'][end($matches)];
-
- $vars = [];
- $i = 0;
- foreach ($varNames as $varName) {
- $vars[$varName] = $matches[++$i];
- }
- return [self::FOUND, $handler, $vars];
- }
-
- return [self::NOT_FOUND];
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php b/server/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php
deleted file mode 100644
index 0abd322..0000000
--- a/server/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class GroupCountBased extends RegexBasedAbstract {
- public function __construct($data) {
- list($this->staticRouteMap, $this->variableRouteData) = $data;
- }
-
- protected function dispatchVariableRoute($routeData, $uri) {
- foreach ($routeData as $data) {
- if (!preg_match($data['regex'], $uri, $matches)) {
- continue;
- }
-
- list($handler, $varNames) = $data['routeMap'][count($matches)];
-
- $vars = [];
- $i = 0;
- foreach ($varNames as $varName) {
- $vars[$varName] = $matches[++$i];
- }
- return [self::FOUND, $handler, $vars];
- }
-
- return [self::NOT_FOUND];
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php b/server/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php
deleted file mode 100644
index 32227d4..0000000
--- a/server/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class GroupPosBased extends RegexBasedAbstract {
- public function __construct($data) {
- list($this->staticRouteMap, $this->variableRouteData) = $data;
- }
-
- protected function dispatchVariableRoute($routeData, $uri) {
- foreach ($routeData as $data) {
- if (!preg_match($data['regex'], $uri, $matches)) {
- continue;
- }
-
- // find first non-empty match
- for ($i = 1; '' === $matches[$i]; ++$i);
-
- list($handler, $varNames) = $data['routeMap'][$i];
-
- $vars = [];
- foreach ($varNames as $varName) {
- $vars[$varName] = $matches[$i++];
- }
- return [self::FOUND, $handler, $vars];
- }
-
- return [self::NOT_FOUND];
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php b/server/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php
deleted file mode 100644
index fefa711..0000000
--- a/server/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class MarkBased extends RegexBasedAbstract {
- public function __construct($data) {
- list($this->staticRouteMap, $this->variableRouteData) = $data;
- }
-
- protected function dispatchVariableRoute($routeData, $uri) {
- foreach ($routeData as $data) {
- if (!preg_match($data['regex'], $uri, $matches)) {
- continue;
- }
-
- list($handler, $varNames) = $data['routeMap'][$matches['MARK']];
-
- $vars = [];
- $i = 0;
- foreach ($varNames as $varName) {
- $vars[$varName] = $matches[++$i];
- }
- return [self::FOUND, $handler, $vars];
- }
-
- return [self::NOT_FOUND];
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php b/server/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php
deleted file mode 100644
index 8823b9b..0000000
--- a/server/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-use FastRoute\Dispatcher;
-
-abstract class RegexBasedAbstract implements Dispatcher {
- protected $staticRouteMap;
- protected $variableRouteData;
-
- protected abstract function dispatchVariableRoute($routeData, $uri);
-
- public function dispatch($httpMethod, $uri) {
- if (isset($this->staticRouteMap[$httpMethod][$uri])) {
- $handler = $this->staticRouteMap[$httpMethod][$uri];
- return [self::FOUND, $handler, []];
- }
-
- $varRouteData = $this->variableRouteData;
- if (isset($varRouteData[$httpMethod])) {
- $result = $this->dispatchVariableRoute($varRouteData[$httpMethod], $uri);
- if ($result[0] === self::FOUND) {
- return $result;
- }
- }
-
- // For HEAD requests, attempt fallback to GET
- if ($httpMethod === 'HEAD') {
- if (isset($this->staticRouteMap['GET'][$uri])) {
- $handler = $this->staticRouteMap['GET'][$uri];
- return [self::FOUND, $handler, []];
- }
- if (isset($varRouteData['GET'])) {
- $result = $this->dispatchVariableRoute($varRouteData['GET'], $uri);
- if ($result[0] === self::FOUND) {
- return $result;
- }
- }
- }
-
- // If nothing else matches, try fallback routes
- if (isset($this->staticRouteMap['*'][$uri])) {
- $handler = $this->staticRouteMap['*'][$uri];
- return [self::FOUND, $handler, []];
- }
- if (isset($varRouteData['*'])) {
- $result = $this->dispatchVariableRoute($varRouteData['*'], $uri);
- if ($result[0] === self::FOUND) {
- return $result;
- }
- }
-
- // Find allowed methods for this URI by matching against all other HTTP methods as well
- $allowedMethods = [];
-
- foreach ($this->staticRouteMap as $method => $uriMap) {
- if ($method !== $httpMethod && isset($uriMap[$uri])) {
- $allowedMethods[] = $method;
- }
- }
-
- foreach ($varRouteData as $method => $routeData) {
- if ($method === $httpMethod) {
- continue;
- }
-
- $result = $this->dispatchVariableRoute($routeData, $uri);
- if ($result[0] === self::FOUND) {
- $allowedMethods[] = $method;
- }
- }
-
- // If there are no allowed methods the route simply does not exist
- if ($allowedMethods) {
- return [self::METHOD_NOT_ALLOWED, $allowedMethods];
- } else {
- return [self::NOT_FOUND];
- }
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/Route.php b/server/vendor/nikic/fast-route/src/Route.php
deleted file mode 100644
index d71ded1..0000000
--- a/server/vendor/nikic/fast-route/src/Route.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-class Route {
- public $httpMethod;
- public $regex;
- public $variables;
- public $handler;
-
- /**
- * Constructs a route (value object).
- *
- * @param string $httpMethod
- * @param mixed $handler
- * @param string $regex
- * @param array $variables
- */
- public function __construct($httpMethod, $handler, $regex, $variables) {
- $this->httpMethod = $httpMethod;
- $this->handler = $handler;
- $this->regex = $regex;
- $this->variables = $variables;
- }
-
- /**
- * Tests whether this route matches the given string.
- *
- * @param string $str
- *
- * @return bool
- */
- public function matches($str) {
- $regex = '~^' . $this->regex . '$~';
- return (bool) preg_match($regex, $str);
- }
-}
-
diff --git a/server/vendor/nikic/fast-route/src/RouteCollector.php b/server/vendor/nikic/fast-route/src/RouteCollector.php
deleted file mode 100644
index 7d7667b..0000000
--- a/server/vendor/nikic/fast-route/src/RouteCollector.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-class RouteCollector {
- protected $routeParser;
- protected $dataGenerator;
- protected $currentGroupPrefix;
-
- /**
- * Constructs a route collector.
- *
- * @param RouteParser $routeParser
- * @param DataGenerator $dataGenerator
- */
- public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator) {
- $this->routeParser = $routeParser;
- $this->dataGenerator = $dataGenerator;
- $this->currentGroupPrefix = '';
- }
-
- /**
- * Adds a route to the collection.
- *
- * The syntax used in the $route string depends on the used route parser.
- *
- * @param string|string[] $httpMethod
- * @param string $route
- * @param mixed $handler
- */
- public function addRoute($httpMethod, $route, $handler) {
- $route = $this->currentGroupPrefix . $route;
- $routeDatas = $this->routeParser->parse($route);
- foreach ((array) $httpMethod as $method) {
- foreach ($routeDatas as $routeData) {
- $this->dataGenerator->addRoute($method, $routeData, $handler);
- }
- }
- }
-
- /**
- * Create a route group with a common prefix.
- *
- * All routes created in the passed callback will have the given group prefix prepended.
- *
- * @param string $prefix
- * @param callable $callback
- */
- public function addGroup($prefix, callable $callback) {
- $previousGroupPrefix = $this->currentGroupPrefix;
- $this->currentGroupPrefix = $previousGroupPrefix . $prefix;
- $callback($this);
- $this->currentGroupPrefix = $previousGroupPrefix;
- }
-
- /**
- * Adds a GET route to the collection
- *
- * This is simply an alias of $this->addRoute('GET', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function get($route, $handler) {
- $this->addRoute('GET', $route, $handler);
- }
-
- /**
- * Adds a POST route to the collection
- *
- * This is simply an alias of $this->addRoute('POST', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function post($route, $handler) {
- $this->addRoute('POST', $route, $handler);
- }
-
- /**
- * Adds a PUT route to the collection
- *
- * This is simply an alias of $this->addRoute('PUT', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function put($route, $handler) {
- $this->addRoute('PUT', $route, $handler);
- }
-
- /**
- * Adds a DELETE route to the collection
- *
- * This is simply an alias of $this->addRoute('DELETE', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function delete($route, $handler) {
- $this->addRoute('DELETE', $route, $handler);
- }
-
- /**
- * Adds a PATCH route to the collection
- *
- * This is simply an alias of $this->addRoute('PATCH', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function patch($route, $handler) {
- $this->addRoute('PATCH', $route, $handler);
- }
-
- /**
- * Adds a HEAD route to the collection
- *
- * This is simply an alias of $this->addRoute('HEAD', $route, $handler)
- *
- * @param string $route
- * @param mixed $handler
- */
- public function head($route, $handler) {
- $this->addRoute('HEAD', $route, $handler);
- }
-
- /**
- * Returns the collected route data, as provided by the data generator.
- *
- * @return array
- */
- public function getData() {
- return $this->dataGenerator->getData();
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/RouteParser.php b/server/vendor/nikic/fast-route/src/RouteParser.php
deleted file mode 100644
index c089c31..0000000
--- a/server/vendor/nikic/fast-route/src/RouteParser.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-interface RouteParser {
- /**
- * Parses a route string into multiple route data arrays.
- *
- * The expected output is defined using an example:
- *
- * For the route string "/fixedRoutePart/{varName}[/moreFixed/{varName2:\d+}]", if {varName} is interpreted as
- * a placeholder and [...] is interpreted as an optional route part, the expected result is:
- *
- * [
- * // first route: without optional part
- * [
- * "/fixedRoutePart/",
- * ["varName", "[^/]+"],
- * ],
- * // second route: with optional part
- * [
- * "/fixedRoutePart/",
- * ["varName", "[^/]+"],
- * "/moreFixed/",
- * ["varName2", [0-9]+"],
- * ],
- * ]
- *
- * Here one route string was converted into two route data arrays.
- *
- * @param string $route Route string to parse
- *
- * @return mixed[][] Array of route data arrays
- */
- public function parse($route);
-}
diff --git a/server/vendor/nikic/fast-route/src/RouteParser/Std.php b/server/vendor/nikic/fast-route/src/RouteParser/Std.php
deleted file mode 100644
index a6c21bd..0000000
--- a/server/vendor/nikic/fast-route/src/RouteParser/Std.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-namespace FastRoute\RouteParser;
-
-use FastRoute\BadRouteException;
-use FastRoute\RouteParser;
-
-/**
- * Parses route strings of the following form:
- *
- * "/user/{name}[/{id:[0-9]+}]"
- */
-class Std implements RouteParser {
- const VARIABLE_REGEX = <<<'REGEX'
-\{
- \s* ([a-zA-Z_][a-zA-Z0-9_-]*) \s*
- (?:
- : \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*)
- )?
-\}
-REGEX;
- const DEFAULT_DISPATCH_REGEX = '[^/]+';
-
- public function parse($route) {
- $routeWithoutClosingOptionals = rtrim($route, ']');
- $numOptionals = strlen($route) - strlen($routeWithoutClosingOptionals);
-
- // Split on [ while skipping placeholders
- $segments = preg_split('~' . self::VARIABLE_REGEX . '(*SKIP)(*F) | \[~x', $routeWithoutClosingOptionals);
- if ($numOptionals !== count($segments) - 1) {
- // If there are any ] in the middle of the route, throw a more specific error message
- if (preg_match('~' . self::VARIABLE_REGEX . '(*SKIP)(*F) | \]~x', $routeWithoutClosingOptionals)) {
- throw new BadRouteException("Optional segments can only occur at the end of a route");
- }
- throw new BadRouteException("Number of opening '[' and closing ']' does not match");
- }
-
- $currentRoute = '';
- $routeDatas = [];
- foreach ($segments as $n => $segment) {
- if ($segment === '' && $n !== 0) {
- throw new BadRouteException("Empty optional part");
- }
-
- $currentRoute .= $segment;
- $routeDatas[] = $this->parsePlaceholders($currentRoute);
- }
- return $routeDatas;
- }
-
- /**
- * Parses a route string that does not contain optional segments.
- */
- private function parsePlaceholders($route) {
- if (!preg_match_all(
- '~' . self::VARIABLE_REGEX . '~x', $route, $matches,
- PREG_OFFSET_CAPTURE | PREG_SET_ORDER
- )) {
- return [$route];
- }
-
- $offset = 0;
- $routeData = [];
- foreach ($matches as $set) {
- if ($set[0][1] > $offset) {
- $routeData[] = substr($route, $offset, $set[0][1] - $offset);
- }
- $routeData[] = [
- $set[1][0],
- isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX
- ];
- $offset = $set[0][1] + strlen($set[0][0]);
- }
-
- if ($offset != strlen($route)) {
- $routeData[] = substr($route, $offset);
- }
-
- return $routeData;
- }
-}
diff --git a/server/vendor/nikic/fast-route/src/bootstrap.php b/server/vendor/nikic/fast-route/src/bootstrap.php
deleted file mode 100644
index add216c..0000000
--- a/server/vendor/nikic/fast-route/src/bootstrap.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-require __DIR__ . '/functions.php';
-
-spl_autoload_register(function($class) {
- if (strpos($class, 'FastRoute\\') === 0) {
- $name = substr($class, strlen('FastRoute'));
- require __DIR__ . strtr($name, '\\', DIRECTORY_SEPARATOR) . '.php';
- }
-});
diff --git a/server/vendor/nikic/fast-route/src/functions.php b/server/vendor/nikic/fast-route/src/functions.php
deleted file mode 100644
index 46bc805..0000000
--- a/server/vendor/nikic/fast-route/src/functions.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-if (!function_exists('FastRoute\simpleDispatcher')) {
- /**
- * @param callable $routeDefinitionCallback
- * @param array $options
- *
- * @return Dispatcher
- */
- function simpleDispatcher(callable $routeDefinitionCallback, array $options = []) {
- $options += [
- 'routeParser' => 'FastRoute\\RouteParser\\Std',
- 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
- 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
- 'routeCollector' => 'FastRoute\\RouteCollector',
- ];
-
- /** @var RouteCollector $routeCollector */
- $routeCollector = new $options['routeCollector'](
- new $options['routeParser'], new $options['dataGenerator']
- );
- $routeDefinitionCallback($routeCollector);
-
- return new $options['dispatcher']($routeCollector->getData());
- }
-
- /**
- * @param callable $routeDefinitionCallback
- * @param array $options
- *
- * @return Dispatcher
- */
- function cachedDispatcher(callable $routeDefinitionCallback, array $options = []) {
- $options += [
- 'routeParser' => 'FastRoute\\RouteParser\\Std',
- 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
- 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
- 'routeCollector' => 'FastRoute\\RouteCollector',
- 'cacheDisabled' => false,
- ];
-
- if (!isset($options['cacheFile'])) {
- throw new \LogicException('Must specify "cacheFile" option');
- }
-
- if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) {
- $dispatchData = require $options['cacheFile'];
- if (!is_array($dispatchData)) {
- throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"');
- }
- return new $options['dispatcher']($dispatchData);
- }
-
- $routeCollector = new $options['routeCollector'](
- new $options['routeParser'], new $options['dataGenerator']
- );
- $routeDefinitionCallback($routeCollector);
-
- /** @var RouteCollector $routeCollector */
- $dispatchData = $routeCollector->getData();
- if (!$options['cacheDisabled']) {
- file_put_contents(
- $options['cacheFile'],
- '<?php return ' . var_export($dispatchData, true) . ';'
- );
- }
-
- return new $options['dispatcher']($dispatchData);
- }
-}
diff --git a/server/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php b/server/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php
deleted file mode 100644
index 8168498..0000000
--- a/server/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class CharCountBasedTest extends DispatcherTest {
- protected function getDispatcherClass() {
- return 'FastRoute\\Dispatcher\\CharCountBased';
- }
-
- protected function getDataGeneratorClass() {
- return 'FastRoute\\DataGenerator\\CharCountBased';
- }
-}
diff --git a/server/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php b/server/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php
deleted file mode 100644
index a6d6205..0000000
--- a/server/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php
+++ /dev/null
@@ -1,561 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-use FastRoute\RouteCollector;
-
-abstract class DispatcherTest extends \PHPUnit_Framework_TestCase {
-
- /**
- * Delegate dispatcher selection to child test classes
- */
- abstract protected function getDispatcherClass();
-
- /**
- * Delegate dataGenerator selection to child test classes
- */
- abstract protected function getDataGeneratorClass();
-
- /**
- * Set appropriate options for the specific Dispatcher class we're testing
- */
- private function generateDispatcherOptions() {
- return [
- 'dataGenerator' => $this->getDataGeneratorClass(),
- 'dispatcher' => $this->getDispatcherClass()
- ];
- }
-
- /**
- * @dataProvider provideFoundDispatchCases
- */
- public function testFoundDispatches($method, $uri, $callback, $handler, $argDict) {
- $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions());
- $info = $dispatcher->dispatch($method, $uri);
- $this->assertSame($dispatcher::FOUND, $info[0]);
- $this->assertSame($handler, $info[1]);
- $this->assertSame($argDict, $info[2]);
- }
-
- /**
- * @dataProvider provideNotFoundDispatchCases
- */
- public function testNotFoundDispatches($method, $uri, $callback) {
- $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions());
- $routeInfo = $dispatcher->dispatch($method, $uri);
- $this->assertFalse(isset($routeInfo[1]),
- "NOT_FOUND result must only contain a single element in the returned info array"
- );
- $this->assertSame($dispatcher::NOT_FOUND, $routeInfo[0]);
- }
-
- /**
- * @dataProvider provideMethodNotAllowedDispatchCases
- */
- public function testMethodNotAllowedDispatches($method, $uri, $callback, $availableMethods) {
- $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions());
- $routeInfo = $dispatcher->dispatch($method, $uri);
- $this->assertTrue(isset($routeInfo[1]),
- "METHOD_NOT_ALLOWED result must return an array of allowed methods at index 1"
- );
-
- list($routedStatus, $methodArray) = $dispatcher->dispatch($method, $uri);
- $this->assertSame($dispatcher::METHOD_NOT_ALLOWED, $routedStatus);
- $this->assertSame($availableMethods, $methodArray);
- }
-
- /**
- * @expectedException \FastRoute\BadRouteException
- * @expectedExceptionMessage Cannot use the same placeholder "test" twice
- */
- public function testDuplicateVariableNameError() {
- \FastRoute\simpleDispatcher(function(RouteCollector $r) {
- $r->addRoute('GET', '/foo/{test}/{test:\d+}', 'handler0');
- }, $this->generateDispatcherOptions());
- }
-
- /**
- * @expectedException \FastRoute\BadRouteException
- * @expectedExceptionMessage Cannot register two routes matching "/user/([^/]+)" for method "GET"
- */
- public function testDuplicateVariableRoute() {
- \FastRoute\simpleDispatcher(function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{id}', 'handler0'); // oops, forgot \d+ restriction ;)
- $r->addRoute('GET', '/user/{name}', 'handler1');
- }, $this->generateDispatcherOptions());
- }
-
- /**
- * @expectedException \FastRoute\BadRouteException
- * @expectedExceptionMessage Cannot register two routes matching "/user" for method "GET"
- */
- public function testDuplicateStaticRoute() {
- \FastRoute\simpleDispatcher(function(RouteCollector $r) {
- $r->addRoute('GET', '/user', 'handler0');
- $r->addRoute('GET', '/user', 'handler1');
- }, $this->generateDispatcherOptions());
- }
-
- /**
- * @expectedException \FastRoute\BadRouteException
- * @expectedExceptionMessage Static route "/user/nikic" is shadowed by previously defined variable route "/user/([^/]+)" for method "GET"
- */
- public function testShadowedStaticRoute() {
- \FastRoute\simpleDispatcher(function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}', 'handler0');
- $r->addRoute('GET', '/user/nikic', 'handler1');
- }, $this->generateDispatcherOptions());
- }
-
- /**
- * @expectedException \FastRoute\BadRouteException
- * @expectedExceptionMessage Regex "(en|de)" for parameter "lang" contains a capturing group
- */
- public function testCapturing() {
- \FastRoute\simpleDispatcher(function(RouteCollector $r) {
- $r->addRoute('GET', '/{lang:(en|de)}', 'handler0');
- }, $this->generateDispatcherOptions());
- }
-
- public function provideFoundDispatchCases() {
- $cases = [];
-
- // 0 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/resource/123/456', 'handler0');
- };
-
- $method = 'GET';
- $uri = '/resource/123/456';
- $handler = 'handler0';
- $argDict = [];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 1 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/handler0', 'handler0');
- $r->addRoute('GET', '/handler1', 'handler1');
- $r->addRoute('GET', '/handler2', 'handler2');
- };
-
- $method = 'GET';
- $uri = '/handler2';
- $handler = 'handler2';
- $argDict = [];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 2 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
- $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1');
- $r->addRoute('GET', '/user/{name}', 'handler2');
- };
-
- $method = 'GET';
- $uri = '/user/rdlowrey';
- $handler = 'handler2';
- $argDict = ['name' => 'rdlowrey'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 3 -------------------------------------------------------------------------------------->
-
- // reuse $callback from #2
-
- $method = 'GET';
- $uri = '/user/12345';
- $handler = 'handler1';
- $argDict = ['id' => '12345'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 4 -------------------------------------------------------------------------------------->
-
- // reuse $callback from #3
-
- $method = 'GET';
- $uri = '/user/NaN';
- $handler = 'handler2';
- $argDict = ['name' => 'NaN'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 5 -------------------------------------------------------------------------------------->
-
- // reuse $callback from #4
-
- $method = 'GET';
- $uri = '/user/rdlowrey/12345';
- $handler = 'handler0';
- $argDict = ['name' => 'rdlowrey', 'id' => '12345'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 6 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler0');
- $r->addRoute('GET', '/user/12345/extension', 'handler1');
- $r->addRoute('GET', '/user/{id:[0-9]+}.{extension}', 'handler2');
-
- };
-
- $method = 'GET';
- $uri = '/user/12345.svg';
- $handler = 'handler2';
- $argDict = ['id' => '12345', 'extension' => 'svg'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 7 ----- Test GET method fallback on HEAD route miss ------------------------------------>
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}', 'handler0');
- $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler1');
- $r->addRoute('GET', '/static0', 'handler2');
- $r->addRoute('GET', '/static1', 'handler3');
- $r->addRoute('HEAD', '/static1', 'handler4');
- };
-
- $method = 'HEAD';
- $uri = '/user/rdlowrey';
- $handler = 'handler0';
- $argDict = ['name' => 'rdlowrey'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 8 ----- Test GET method fallback on HEAD route miss ------------------------------------>
-
- // reuse $callback from #7
-
- $method = 'HEAD';
- $uri = '/user/rdlowrey/1234';
- $handler = 'handler1';
- $argDict = ['name' => 'rdlowrey', 'id' => '1234'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 9 ----- Test GET method fallback on HEAD route miss ------------------------------------>
-
- // reuse $callback from #8
-
- $method = 'HEAD';
- $uri = '/static0';
- $handler = 'handler2';
- $argDict = [];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 10 ---- Test existing HEAD route used if available (no fallback) ----------------------->
-
- // reuse $callback from #9
-
- $method = 'HEAD';
- $uri = '/static1';
- $handler = 'handler4';
- $argDict = [];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 11 ---- More specified routes are not shadowed by less specific of another method ------>
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}', 'handler0');
- $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1');
- };
-
- $method = 'POST';
- $uri = '/user/rdlowrey';
- $handler = 'handler1';
- $argDict = ['name' => 'rdlowrey'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 12 ---- Handler of more specific routes is used, if it occurs first -------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}', 'handler0');
- $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1');
- $r->addRoute('POST', '/user/{name}', 'handler2');
- };
-
- $method = 'POST';
- $uri = '/user/rdlowrey';
- $handler = 'handler1';
- $argDict = ['name' => 'rdlowrey'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 13 ---- Route with constant suffix ----------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}', 'handler0');
- $r->addRoute('GET', '/user/{name}/edit', 'handler1');
- };
-
- $method = 'GET';
- $uri = '/user/rdlowrey/edit';
- $handler = 'handler1';
- $argDict = ['name' => 'rdlowrey'];
-
- $cases[] = [$method, $uri, $callback, $handler, $argDict];
-
- // 14 ---- Handle multiple methods with the same handler ---------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost');
- $r->addRoute(['DELETE'], '/user', 'handlerDelete');
- $r->addRoute([], '/user', 'handlerNone');
- };
-
- $argDict = [];
- $cases[] = ['GET', '/user', $callback, 'handlerGetPost', $argDict];
- $cases[] = ['POST', '/user', $callback, 'handlerGetPost', $argDict];
- $cases[] = ['DELETE', '/user', $callback, 'handlerDelete', $argDict];
-
- // 15 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('POST', '/user.json', 'handler0');
- $r->addRoute('GET', '/{entity}.json', 'handler1');
- };
-
- $cases[] = ['GET', '/user.json', $callback, 'handler1', ['entity' => 'user']];
-
- // 16 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '', 'handler0');
- };
-
- $cases[] = ['GET', '', $callback, 'handler0', []];
-
- // 17 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('HEAD', '/a/{foo}', 'handler0');
- $r->addRoute('GET', '/b/{foo}', 'handler1');
- };
-
- $cases[] = ['HEAD', '/b/bar', $callback, 'handler1', ['foo' => 'bar']];
-
- // 18 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('HEAD', '/a', 'handler0');
- $r->addRoute('GET', '/b', 'handler1');
- };
-
- $cases[] = ['HEAD', '/b', $callback, 'handler1', []];
-
- // 19 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/foo', 'handler0');
- $r->addRoute('HEAD', '/{bar}', 'handler1');
- };
-
- $cases[] = ['HEAD', '/foo', $callback, 'handler1', ['bar' => 'foo']];
-
- // 20 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('*', '/user', 'handler0');
- $r->addRoute('*', '/{user}', 'handler1');
- $r->addRoute('GET', '/user', 'handler2');
- };
-
- $cases[] = ['GET', '/user', $callback, 'handler2', []];
-
- // 21 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('*', '/user', 'handler0');
- $r->addRoute('GET', '/user', 'handler1');
- };
-
- $cases[] = ['POST', '/user', $callback, 'handler0', []];
-
- // 22 ----
-
- $cases[] = ['HEAD', '/user', $callback, 'handler1', []];
-
- // 23 ----
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/{bar}', 'handler0');
- $r->addRoute('*', '/foo', 'handler1');
- };
-
- $cases[] = ['GET', '/foo', $callback, 'handler0', ['bar' => 'foo']];
-
- // x -------------------------------------------------------------------------------------->
-
- return $cases;
- }
-
- public function provideNotFoundDispatchCases() {
- $cases = [];
-
- // 0 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/resource/123/456', 'handler0');
- };
-
- $method = 'GET';
- $uri = '/not-found';
-
- $cases[] = [$method, $uri, $callback];
-
- // 1 -------------------------------------------------------------------------------------->
-
- // reuse callback from #0
- $method = 'POST';
- $uri = '/not-found';
-
- $cases[] = [$method, $uri, $callback];
-
- // 2 -------------------------------------------------------------------------------------->
-
- // reuse callback from #1
- $method = 'PUT';
- $uri = '/not-found';
-
- $cases[] = [$method, $uri, $callback];
-
- // 3 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/handler0', 'handler0');
- $r->addRoute('GET', '/handler1', 'handler1');
- $r->addRoute('GET', '/handler2', 'handler2');
- };
-
- $method = 'GET';
- $uri = '/not-found';
-
- $cases[] = [$method, $uri, $callback];
-
- // 4 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
- $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1');
- $r->addRoute('GET', '/user/{name}', 'handler2');
- };
-
- $method = 'GET';
- $uri = '/not-found';
-
- $cases[] = [$method, $uri, $callback];
-
- // 5 -------------------------------------------------------------------------------------->
-
- // reuse callback from #4
- $method = 'GET';
- $uri = '/user/rdlowrey/12345/not-found';
-
- $cases[] = [$method, $uri, $callback];
-
- // 6 -------------------------------------------------------------------------------------->
-
- // reuse callback from #5
- $method = 'HEAD';
-
- $cases[] = array($method, $uri, $callback);
-
- // x -------------------------------------------------------------------------------------->
-
- return $cases;
- }
-
- public function provideMethodNotAllowedDispatchCases() {
- $cases = [];
-
- // 0 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/resource/123/456', 'handler0');
- };
-
- $method = 'POST';
- $uri = '/resource/123/456';
- $allowedMethods = ['GET'];
-
- $cases[] = [$method, $uri, $callback, $allowedMethods];
-
- // 1 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/resource/123/456', 'handler0');
- $r->addRoute('POST', '/resource/123/456', 'handler1');
- $r->addRoute('PUT', '/resource/123/456', 'handler2');
- $r->addRoute('*', '/', 'handler3');
- };
-
- $method = 'DELETE';
- $uri = '/resource/123/456';
- $allowedMethods = ['GET', 'POST', 'PUT'];
-
- $cases[] = [$method, $uri, $callback, $allowedMethods];
-
- // 2 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
- $r->addRoute('POST', '/user/{name}/{id:[0-9]+}', 'handler1');
- $r->addRoute('PUT', '/user/{name}/{id:[0-9]+}', 'handler2');
- $r->addRoute('PATCH', '/user/{name}/{id:[0-9]+}', 'handler3');
- };
-
- $method = 'DELETE';
- $uri = '/user/rdlowrey/42';
- $allowedMethods = ['GET', 'POST', 'PUT', 'PATCH'];
-
- $cases[] = [$method, $uri, $callback, $allowedMethods];
-
- // 3 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('POST', '/user/{name}', 'handler1');
- $r->addRoute('PUT', '/user/{name:[a-z]+}', 'handler2');
- $r->addRoute('PATCH', '/user/{name:[a-z]+}', 'handler3');
- };
-
- $method = 'GET';
- $uri = '/user/rdlowrey';
- $allowedMethods = ['POST', 'PUT', 'PATCH'];
-
- $cases[] = [$method, $uri, $callback, $allowedMethods];
-
- // 4 -------------------------------------------------------------------------------------->
-
- $callback = function(RouteCollector $r) {
- $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost');
- $r->addRoute(['DELETE'], '/user', 'handlerDelete');
- $r->addRoute([], '/user', 'handlerNone');
- };
-
- $cases[] = ['PUT', '/user', $callback, ['GET', 'POST', 'DELETE']];
-
- // 5
-
- $callback = function(RouteCollector $r) {
- $r->addRoute('POST', '/user.json', 'handler0');
- $r->addRoute('GET', '/{entity}.json', 'handler1');
- };
-
- $cases[] = ['PUT', '/user.json', $callback, ['POST', 'GET']];
-
- // x -------------------------------------------------------------------------------------->
-
- return $cases;
- }
-
-}
diff --git a/server/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php b/server/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php
deleted file mode 100644
index 74820fc..0000000
--- a/server/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class GroupCountBasedTest extends DispatcherTest {
- protected function getDispatcherClass() {
- return 'FastRoute\\Dispatcher\\GroupCountBased';
- }
-
- protected function getDataGeneratorClass() {
- return 'FastRoute\\DataGenerator\\GroupCountBased';
- }
-}
diff --git a/server/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php b/server/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php
deleted file mode 100644
index c3d4f8d..0000000
--- a/server/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class GroupPosBasedTest extends DispatcherTest {
- protected function getDispatcherClass() {
- return 'FastRoute\\Dispatcher\\GroupPosBased';
- }
-
- protected function getDataGeneratorClass() {
- return 'FastRoute\\DataGenerator\\GroupPosBased';
- }
-}
diff --git a/server/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php b/server/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php
deleted file mode 100644
index 04b0af9..0000000
--- a/server/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-namespace FastRoute\Dispatcher;
-
-class MarkBasedTest extends DispatcherTest {
- public function setUp() {
- preg_match('/(*MARK:A)a/', 'a', $matches);
- if (!isset($matches['MARK'])) {
- $this->markTestSkipped('PHP 5.6 required for MARK support');
- }
- }
-
- protected function getDispatcherClass() {
- return 'FastRoute\\Dispatcher\\MarkBased';
- }
-
- protected function getDataGeneratorClass() {
- return 'FastRoute\\DataGenerator\\MarkBased';
- }
-}
diff --git a/server/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php b/server/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php
deleted file mode 100644
index 7bc6ebb..0000000
--- a/server/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-class HackTypecheckerTest extends \PhpUnit_Framework_TestCase {
- const SERVER_ALREADY_RUNNING_CODE = 77;
- public function testTypechecks($recurse = true) {
- if (!defined('HHVM_VERSION')) {
- $this->markTestSkipped("HHVM only");
- }
- if (!version_compare(HHVM_VERSION, '3.9.0', '>=')) {
- $this->markTestSkipped('classname<T> requires HHVM 3.9+');
- }
-
- // The typechecker recurses the whole tree, so it makes sure
- // that everything in fixtures/ is valid when this runs.
-
- $output = array();
- $exit_code = null;
- exec(
- 'hh_server --check '.escapeshellarg(__DIR__.'/../../').' 2>&1',
- $output,
- $exit_code
- );
- if ($exit_code === self::SERVER_ALREADY_RUNNING_CODE) {
- $this->assertTrue(
- $recurse,
- "Typechecker still running after running hh_client stop"
- );
- // Server already running - 3.10 => 3.11 regression:
- // https://github.com/facebook/hhvm/issues/6646
- exec('hh_client stop 2>/dev/null');
- $this->testTypechecks(/* recurse = */ false);
- return;
-
- }
- $this->assertSame(0, $exit_code, implode("\n", $output));
- }
-}
diff --git a/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php b/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php
deleted file mode 100644
index 05a9af2..0000000
--- a/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?hh
-
-namespace FastRoute\TestFixtures;
-
-function all_options_simple(): \FastRoute\Dispatcher {
- return \FastRoute\simpleDispatcher(
- $collector ==> {},
- shape(
- 'routeParser' => \FastRoute\RouteParser\Std::class,
- 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class,
- 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class,
- 'routeCollector' => \FastRoute\RouteCollector::class,
- ),
- );
-}
-
-function all_options_cached(): \FastRoute\Dispatcher {
- return \FastRoute\cachedDispatcher(
- $collector ==> {},
- shape(
- 'routeParser' => \FastRoute\RouteParser\Std::class,
- 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class,
- 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class,
- 'routeCollector' => \FastRoute\RouteCollector::class,
- 'cacheFile' => '/dev/null',
- 'cacheDisabled' => false,
- ),
- );
-}
diff --git a/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php b/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php
deleted file mode 100644
index 61eb541..0000000
--- a/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?hh
-
-namespace FastRoute\TestFixtures;
-
-function empty_options_simple(): \FastRoute\Dispatcher {
- return \FastRoute\simpleDispatcher($collector ==> {}, shape());
-}
-
-function empty_options_cached(): \FastRoute\Dispatcher {
- return \FastRoute\cachedDispatcher($collector ==> {}, shape());
-}
diff --git a/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php b/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php
deleted file mode 100644
index 44b5422..0000000
--- a/server/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?hh
-
-namespace FastRoute\TestFixtures;
-
-function no_options_simple(): \FastRoute\Dispatcher {
- return \FastRoute\simpleDispatcher($collector ==> {});
-}
-
-function no_options_cached(): \FastRoute\Dispatcher {
- return \FastRoute\cachedDispatcher($collector ==> {});
-}
diff --git a/server/vendor/nikic/fast-route/test/RouteCollectorTest.php b/server/vendor/nikic/fast-route/test/RouteCollectorTest.php
deleted file mode 100644
index 11bcf1c..0000000
--- a/server/vendor/nikic/fast-route/test/RouteCollectorTest.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-namespace FastRoute;
-
-class RouteCollectorTest extends \PHPUnit_Framework_TestCase {
- public function testShortcuts() {
- $r = new DummyRouteCollector();
-
- $r->delete('/delete', 'delete');
- $r->get('/get', 'get');
- $r->head('/head', 'head');
- $r->patch('/patch', 'patch');
- $r->post('/post', 'post');
- $r->put('/put', 'put');
-
- $expected = [
- ['DELETE', '/delete', 'delete'],
- ['GET', '/get', 'get'],
- ['HEAD', '/head', 'head'],
- ['PATCH', '/patch', 'patch'],
- ['POST', '/post', 'post'],
- ['PUT', '/put', 'put'],
- ];
-
- $this->assertSame($expected, $r->routes);
- }
-
- public function testGroups() {
- $r = new DummyRouteCollector();
-
- $r->delete('/delete', 'delete');
- $r->get('/get', 'get');
- $r->head('/head', 'head');
- $r->patch('/patch', 'patch');
- $r->post('/post', 'post');
- $r->put('/put', 'put');
-
- $r->addGroup('/group-one', function (DummyRouteCollector $r) {
- $r->delete('/delete', 'delete');
- $r->get('/get', 'get');
- $r->head('/head', 'head');
- $r->patch('/patch', 'patch');
- $r->post('/post', 'post');
- $r->put('/put', 'put');
-
- $r->addGroup('/group-two', function (DummyRouteCollector $r) {
- $r->delete('/delete', 'delete');
- $r->get('/get', 'get');
- $r->head('/head', 'head');
- $r->patch('/patch', 'patch');
- $r->post('/post', 'post');
- $r->put('/put', 'put');
- });
- });
-
- $r->addGroup('/admin', function (DummyRouteCollector $r) {
- $r->get('-some-info', 'admin-some-info');
- });
- $r->addGroup('/admin-', function (DummyRouteCollector $r) {
- $r->get('more-info', 'admin-more-info');
- });
-
- $expected = [
- ['DELETE', '/delete', 'delete'],
- ['GET', '/get', 'get'],
- ['HEAD', '/head', 'head'],
- ['PATCH', '/patch', 'patch'],
- ['POST', '/post', 'post'],
- ['PUT', '/put', 'put'],
- ['DELETE', '/group-one/delete', 'delete'],
- ['GET', '/group-one/get', 'get'],
- ['HEAD', '/group-one/head', 'head'],
- ['PATCH', '/group-one/patch', 'patch'],
- ['POST', '/group-one/post', 'post'],
- ['PUT', '/group-one/put', 'put'],
- ['DELETE', '/group-one/group-two/delete', 'delete'],
- ['GET', '/group-one/group-two/get', 'get'],
- ['HEAD', '/group-one/group-two/head', 'head'],
- ['PATCH', '/group-one/group-two/patch', 'patch'],
- ['POST', '/group-one/group-two/post', 'post'],
- ['PUT', '/group-one/group-two/put', 'put'],
- ['GET', '/admin-some-info', 'admin-some-info'],
- ['GET', '/admin-more-info', 'admin-more-info'],
- ];
-
- $this->assertSame($expected, $r->routes);
- }
-}
-
-class DummyRouteCollector extends RouteCollector {
- public $routes = [];
- public function __construct() {}
- public function addRoute($method, $route, $handler) {
- $route = $this->currentGroupPrefix . $route;
- $this->routes[] = [$method, $route, $handler];
- }
-} \ No newline at end of file
diff --git a/server/vendor/nikic/fast-route/test/RouteParser/StdTest.php b/server/vendor/nikic/fast-route/test/RouteParser/StdTest.php
deleted file mode 100644
index 41f194b..0000000
--- a/server/vendor/nikic/fast-route/test/RouteParser/StdTest.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-namespace FastRoute\RouteParser;
-
-class StdTest extends \PhpUnit_Framework_TestCase {
- /** @dataProvider provideTestParse */
- public function testParse($routeString, $expectedRouteDatas) {
- $parser = new Std();
- $routeDatas = $parser->parse($routeString);
- $this->assertSame($expectedRouteDatas, $routeDatas);
- }
-
- /** @dataProvider provideTestParseError */
- public function testParseError($routeString, $expectedExceptionMessage) {
- $parser = new Std();
- $this->setExpectedException('FastRoute\\BadRouteException', $expectedExceptionMessage);
- $parser->parse($routeString);
- }
-
- public function provideTestParse() {
- return [
- [
- '/test',
- [
- ['/test'],
- ]
- ],
- [
- '/test/{param}',
- [
- ['/test/', ['param', '[^/]+']],
- ]
- ],
- [
- '/te{ param }st',
- [
- ['/te', ['param', '[^/]+'], 'st']
- ]
- ],
- [
- '/test/{param1}/test2/{param2}',
- [
- ['/test/', ['param1', '[^/]+'], '/test2/', ['param2', '[^/]+']]
- ]
- ],
- [
- '/test/{param:\d+}',
- [
- ['/test/', ['param', '\d+']]
- ]
- ],
- [
- '/test/{ param : \d{1,9} }',
- [
- ['/test/', ['param', '\d{1,9}']]
- ]
- ],
- [
- '/test[opt]',
- [
- ['/test'],
- ['/testopt'],
- ]
- ],
- [
- '/test[/{param}]',
- [
- ['/test'],
- ['/test/', ['param', '[^/]+']],
- ]
- ],
- [
- '/{param}[opt]',
- [
- ['/', ['param', '[^/]+']],
- ['/', ['param', '[^/]+'], 'opt']
- ]
- ],
- [
- '/test[/{name}[/{id:[0-9]+}]]',
- [
- ['/test'],
- ['/test/', ['name', '[^/]+']],
- ['/test/', ['name', '[^/]+'], '/', ['id', '[0-9]+']],
- ]
- ],
- [
- '',
- [
- [''],
- ]
- ],
- [
- '[test]',
- [
- [''],
- ['test'],
- ]
- ],
- [
- '/{foo-bar}',
- [
- ['/', ['foo-bar', '[^/]+']]
- ]
- ],
- [
- '/{_foo:.*}',
- [
- ['/', ['_foo', '.*']]
- ]
- ],
- ];
- }
-
- public function provideTestParseError() {
- return [
- [
- '/test[opt',
- "Number of opening '[' and closing ']' does not match"
- ],
- [
- '/test[opt[opt2]',
- "Number of opening '[' and closing ']' does not match"
- ],
- [
- '/testopt]',
- "Number of opening '[' and closing ']' does not match"
- ],
- [
- '/test[]',
- "Empty optional part"
- ],
- [
- '/test[[opt]]',
- "Empty optional part"
- ],
- [
- '[[test]]',
- "Empty optional part"
- ],
- [
- '/test[/opt]/required',
- "Optional segments can only occur at the end of a route"
- ],
- ];
- }
-}
diff --git a/server/vendor/nikic/fast-route/test/bootstrap.php b/server/vendor/nikic/fast-route/test/bootstrap.php
deleted file mode 100644
index 27e6d4c..0000000
--- a/server/vendor/nikic/fast-route/test/bootstrap.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-require_once __DIR__ . '/../src/functions.php';
-
-spl_autoload_register(function($class) {
- if (strpos($class, 'FastRoute\\') === 0) {
- $dir = strcasecmp(substr($class, -4), 'Test') ? 'src/' : 'test/';
- $name = substr($class, strlen('FastRoute'));
- require __DIR__ . '/../' . $dir . strtr($name, '\\', DIRECTORY_SEPARATOR) . '.php';
- }
-});
diff --git a/server/vendor/pimple/pimple/.gitignore b/server/vendor/pimple/pimple/.gitignore
deleted file mode 100644
index c089b09..0000000
--- a/server/vendor/pimple/pimple/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-phpunit.xml
-composer.lock
-/vendor/
diff --git a/server/vendor/pimple/pimple/.travis.yml b/server/vendor/pimple/pimple/.travis.yml
deleted file mode 100644
index 5f8bb7c..0000000
--- a/server/vendor/pimple/pimple/.travis.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-language: php
-
-env:
- matrix:
- - PIMPLE_EXT=no
- - PIMPLE_EXT=yes
- global:
- - REPORT_EXIT_STATUS=1
-
-php:
- - 5.3
- - 5.4
- - 5.5
- - 5.6
- - hhvm
-
-before_script:
- - composer self-update
- - COMPOSER_ROOT_VERSION=dev-master composer dump-autoload
- - if [ "$PIMPLE_EXT" == "yes" ]; then sh -c "cd ext/pimple && phpize && ./configure && make && sudo make install"; fi
- - if [ "$PIMPLE_EXT" == "yes" ]; then echo "extension=pimple.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`; fi
-
-script:
- - cd ext/pimple
- - if [ "$PIMPLE_EXT" == "yes" ]; then yes n | make test | tee output ; grep -E 'Tests failed +. +0' output; fi
- - cd ../..
- - phpunit
-
-matrix:
- exclude:
- - php: hhvm
- env: PIMPLE_EXT=yes
diff --git a/server/vendor/pimple/pimple/CHANGELOG b/server/vendor/pimple/pimple/CHANGELOG
deleted file mode 100644
index cc67997..0000000
--- a/server/vendor/pimple/pimple/CHANGELOG
+++ /dev/null
@@ -1,35 +0,0 @@
-* 3.0.2 (2015-09-11)
-
- * refactored the C extension
- * minor non-significant changes
-
-* 3.0.1 (2015-07-30)
-
- * simplified some code
- * fixed a segfault in the C extension
-
-* 3.0.0 (2014-07-24)
-
- * removed the Pimple class alias (use Pimple\Container instead)
-
-* 2.1.1 (2014-07-24)
-
- * fixed compiler warnings for the C extension
- * fixed code when dealing with circular references
-
-* 2.1.0 (2014-06-24)
-
- * moved the Pimple to Pimple\Container (with a BC layer -- Pimple is now a
- deprecated alias which will be removed in Pimple 3.0)
- * added Pimple\ServiceProviderInterface (and Pimple::register())
-
-* 2.0.0 (2014-02-10)
-
- * changed extend to automatically re-assign the extended service and keep it as shared or factory
- (to keep BC, extend still returns the extended service)
- * changed services to be shared by default (use factory() for factory
- services)
-
-* 1.0.0
-
- * initial version
diff --git a/server/vendor/pimple/pimple/LICENSE b/server/vendor/pimple/pimple/LICENSE
deleted file mode 100644
index d7949e2..0000000
--- a/server/vendor/pimple/pimple/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2009-2015 Fabien Potencier
-
-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/server/vendor/pimple/pimple/README.rst b/server/vendor/pimple/pimple/README.rst
deleted file mode 100644
index 93fb35a..0000000
--- a/server/vendor/pimple/pimple/README.rst
+++ /dev/null
@@ -1,201 +0,0 @@
-Pimple
-======
-
-.. caution::
-
- This is the documentation for Pimple 3.x. If you are using Pimple 1.x, read
- the `Pimple 1.x documentation`_. Reading the Pimple 1.x code is also a good
- way to learn more about how to create a simple Dependency Injection
- Container (recent versions of Pimple are more focused on performance).
-
-Pimple is a small Dependency Injection Container for PHP.
-
-Installation
-------------
-
-Before using Pimple in your project, add it to your ``composer.json`` file:
-
-.. code-block:: bash
-
- $ ./composer.phar require pimple/pimple ~3.0
-
-Alternatively, Pimple is also available as a PHP C extension:
-
-.. code-block:: bash
-
- $ git clone https://github.com/silexphp/Pimple
- $ cd Pimple/ext/pimple
- $ phpize
- $ ./configure
- $ make
- $ make install
-
-Usage
------
-
-Creating a container is a matter of creating a ``Container`` instance:
-
-.. code-block:: php
-
- use Pimple\Container;
-
- $container = new Container();
-
-As many other dependency injection containers, Pimple manages two different
-kind of data: **services** and **parameters**.
-
-Defining Services
-~~~~~~~~~~~~~~~~~
-
-A service is an object that does something as part of a larger system. Examples
-of services: a database connection, a templating engine, or a mailer. Almost
-any **global** object can be a service.
-
-Services are defined by **anonymous functions** that return an instance of an
-object:
-
-.. code-block:: php
-
- // define some services
- $container['session_storage'] = function ($c) {
- return new SessionStorage('SESSION_ID');
- };
-
- $container['session'] = function ($c) {
- return new Session($c['session_storage']);
- };
-
-Notice that the anonymous function has access to the current container
-instance, allowing references to other services or parameters.
-
-As objects are only created when you get them, the order of the definitions
-does not matter.
-
-Using the defined services is also very easy:
-
-.. code-block:: php
-
- // get the session object
- $session = $container['session'];
-
- // the above call is roughly equivalent to the following code:
- // $storage = new SessionStorage('SESSION_ID');
- // $session = new Session($storage);
-
-Defining Factory Services
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-By default, each time you get a service, Pimple returns the **same instance**
-of it. If you want a different instance to be returned for all calls, wrap your
-anonymous function with the ``factory()`` method
-
-.. code-block:: php
-
- $container['session'] = $container->factory(function ($c) {
- return new Session($c['session_storage']);
- });
-
-Now, each call to ``$container['session']`` returns a new instance of the
-session.
-
-Defining Parameters
-~~~~~~~~~~~~~~~~~~~
-
-Defining a parameter allows to ease the configuration of your container from
-the outside and to store global values:
-
-.. code-block:: php
-
- // define some parameters
- $container['cookie_name'] = 'SESSION_ID';
- $container['session_storage_class'] = 'SessionStorage';
-
-If you change the ``session_storage`` service definition like below:
-
-.. code-block:: php
-
- $container['session_storage'] = function ($c) {
- return new $c['session_storage_class']($c['cookie_name']);
- };
-
-You can now easily change the cookie name by overriding the
-``session_storage_class`` parameter instead of redefining the service
-definition.
-
-Protecting Parameters
-~~~~~~~~~~~~~~~~~~~~~
-
-Because Pimple sees anonymous functions as service definitions, you need to
-wrap anonymous functions with the ``protect()`` method to store them as
-parameters:
-
-.. code-block:: php
-
- $container['random_func'] = $container->protect(function () {
- return rand();
- });
-
-Modifying Services after Definition
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In some cases you may want to modify a service definition after it has been
-defined. You can use the ``extend()`` method to define additional code to be
-run on your service just after it is created:
-
-.. code-block:: php
-
- $container['session_storage'] = function ($c) {
- return new $c['session_storage_class']($c['cookie_name']);
- };
-
- $container->extend('session_storage', function ($storage, $c) {
- $storage->...();
-
- return $storage;
- });
-
-The first argument is the name of the service to extend, the second a function
-that gets access to the object instance and the container.
-
-Extending a Container
-~~~~~~~~~~~~~~~~~~~~~
-
-If you use the same libraries over and over, you might want to reuse some
-services from one project to the next one; package your services into a
-**provider** by implementing ``Pimple\ServiceProviderInterface``:
-
-.. code-block:: php
-
- use Pimple\Container;
-
- class FooProvider implements Pimple\ServiceProviderInterface
- {
- public function register(Container $pimple)
- {
- // register some services and parameters
- // on $pimple
- }
- }
-
-Then, register the provider on a Container:
-
-.. code-block:: php
-
- $pimple->register(new FooProvider());
-
-Fetching the Service Creation Function
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-When you access an object, Pimple automatically calls the anonymous function
-that you defined, which creates the service object for you. If you want to get
-raw access to this function, you can use the ``raw()`` method:
-
-.. code-block:: php
-
- $container['session'] = function ($c) {
- return new Session($c['session_storage']);
- };
-
- $sessionFunction = $container->raw('session');
-
-.. _Pimple 1.x documentation: https://github.com/silexphp/Pimple/tree/1.1
diff --git a/server/vendor/pimple/pimple/composer.json b/server/vendor/pimple/pimple/composer.json
deleted file mode 100644
index a5268f1..0000000
--- a/server/vendor/pimple/pimple/composer.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "pimple/pimple",
- "type": "library",
- "description": "Pimple, a simple Dependency Injection Container",
- "keywords": ["dependency injection", "container"],
- "homepage": "http://pimple.sensiolabs.org",
- "license": "MIT",
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- }
- ],
- "require": {
- "php": ">=5.3.0"
- },
- "autoload": {
- "psr-0": { "Pimple": "src/" }
- },
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- }
-}
diff --git a/server/vendor/pimple/pimple/ext/pimple/.gitignore b/server/vendor/pimple/pimple/ext/pimple/.gitignore
deleted file mode 100644
index 1861088..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/.gitignore
+++ /dev/null
@@ -1,30 +0,0 @@
-*.sw*
-.deps
-Makefile
-Makefile.fragments
-Makefile.global
-Makefile.objects
-acinclude.m4
-aclocal.m4
-build/
-config.cache
-config.guess
-config.h
-config.h.in
-config.log
-config.nice
-config.status
-config.sub
-configure
-configure.in
-install-sh
-libtool
-ltmain.sh
-missing
-mkinstalldirs
-run-tests.php
-*.loT
-.libs/
-modules/
-*.la
-*.lo
diff --git a/server/vendor/pimple/pimple/ext/pimple/README.md b/server/vendor/pimple/pimple/ext/pimple/README.md
deleted file mode 100644
index 7b39eb2..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-This is Pimple 2 implemented in C
-
-* PHP >= 5.3
-* Not tested under Windows, might work
-
-Install
-=======
-
- > phpize
- > ./configure
- > make
- > make install
diff --git a/server/vendor/pimple/pimple/ext/pimple/config.m4 b/server/vendor/pimple/pimple/ext/pimple/config.m4
deleted file mode 100644
index c9ba17d..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/config.m4
+++ /dev/null
@@ -1,63 +0,0 @@
-dnl $Id$
-dnl config.m4 for extension pimple
-
-dnl Comments in this file start with the string 'dnl'.
-dnl Remove where necessary. This file will not work
-dnl without editing.
-
-dnl If your extension references something external, use with:
-
-dnl PHP_ARG_WITH(pimple, for pimple support,
-dnl Make sure that the comment is aligned:
-dnl [ --with-pimple Include pimple support])
-
-dnl Otherwise use enable:
-
-PHP_ARG_ENABLE(pimple, whether to enable pimple support,
-dnl Make sure that the comment is aligned:
-[ --enable-pimple Enable pimple support])
-
-if test "$PHP_PIMPLE" != "no"; then
- dnl Write more examples of tests here...
-
- dnl # --with-pimple -> check with-path
- dnl SEARCH_PATH="/usr/local /usr" # you might want to change this
- dnl SEARCH_FOR="/include/pimple.h" # you most likely want to change this
- dnl if test -r $PHP_PIMPLE/$SEARCH_FOR; then # path given as parameter
- dnl PIMPLE_DIR=$PHP_PIMPLE
- dnl else # search default path list
- dnl AC_MSG_CHECKING([for pimple files in default path])
- dnl for i in $SEARCH_PATH ; do
- dnl if test -r $i/$SEARCH_FOR; then
- dnl PIMPLE_DIR=$i
- dnl AC_MSG_RESULT(found in $i)
- dnl fi
- dnl done
- dnl fi
- dnl
- dnl if test -z "$PIMPLE_DIR"; then
- dnl AC_MSG_RESULT([not found])
- dnl AC_MSG_ERROR([Please reinstall the pimple distribution])
- dnl fi
-
- dnl # --with-pimple -> add include path
- dnl PHP_ADD_INCLUDE($PIMPLE_DIR/include)
-
- dnl # --with-pimple -> check for lib and symbol presence
- dnl LIBNAME=pimple # you may want to change this
- dnl LIBSYMBOL=pimple # you most likely want to change this
-
- dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
- dnl [
- dnl PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $PIMPLE_DIR/lib, PIMPLE_SHARED_LIBADD)
- dnl AC_DEFINE(HAVE_PIMPLELIB,1,[ ])
- dnl ],[
- dnl AC_MSG_ERROR([wrong pimple lib version or lib not found])
- dnl ],[
- dnl -L$PIMPLE_DIR/lib -lm
- dnl ])
- dnl
- dnl PHP_SUBST(PIMPLE_SHARED_LIBADD)
-
- PHP_NEW_EXTENSION(pimple, pimple.c, $ext_shared)
-fi
diff --git a/server/vendor/pimple/pimple/ext/pimple/config.w32 b/server/vendor/pimple/pimple/ext/pimple/config.w32
deleted file mode 100644
index 39857b3..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/config.w32
+++ /dev/null
@@ -1,13 +0,0 @@
-// $Id$
-// vim:ft=javascript
-
-// If your extension references something external, use ARG_WITH
-// ARG_WITH("pimple", "for pimple support", "no");
-
-// Otherwise, use ARG_ENABLE
-// ARG_ENABLE("pimple", "enable pimple support", "no");
-
-if (PHP_PIMPLE != "no") {
- EXTENSION("pimple", "pimple.c");
-}
-
diff --git a/server/vendor/pimple/pimple/ext/pimple/php_pimple.h b/server/vendor/pimple/pimple/ext/pimple/php_pimple.h
deleted file mode 100644
index 49431f0..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/php_pimple.h
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2014 Fabien Potencier
- *
- * 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.
- */
-
-#ifndef PHP_PIMPLE_H
-#define PHP_PIMPLE_H
-
-extern zend_module_entry pimple_module_entry;
-#define phpext_pimple_ptr &pimple_module_entry
-
-#ifdef PHP_WIN32
-# define PHP_PIMPLE_API __declspec(dllexport)
-#elif defined(__GNUC__) && __GNUC__ >= 4
-# define PHP_PIMPLE_API __attribute__ ((visibility("default")))
-#else
-# define PHP_PIMPLE_API
-#endif
-
-#ifdef ZTS
-#include "TSRM.h"
-#endif
-
-#define PIMPLE_VERSION "3.0.2"
-#define PIMPLE_NS "Pimple"
-
-#define PIMPLE_DEFAULT_ZVAL_CACHE_NUM 5
-#define PIMPLE_DEFAULT_ZVAL_VALUES_NUM 10
-
-zend_module_entry *get_module(void);
-
-PHP_MINIT_FUNCTION(pimple);
-PHP_MINFO_FUNCTION(pimple);
-
-PHP_METHOD(Pimple, __construct);
-PHP_METHOD(Pimple, factory);
-PHP_METHOD(Pimple, protect);
-PHP_METHOD(Pimple, raw);
-PHP_METHOD(Pimple, extend);
-PHP_METHOD(Pimple, keys);
-PHP_METHOD(Pimple, register);
-PHP_METHOD(Pimple, offsetSet);
-PHP_METHOD(Pimple, offsetUnset);
-PHP_METHOD(Pimple, offsetGet);
-PHP_METHOD(Pimple, offsetExists);
-
-PHP_METHOD(PimpleClosure, invoker);
-
-typedef struct _pimple_bucket_value {
- zval *value; /* Must be the first element */
- zval *raw;
- zend_object_handle handle_num;
- enum {
- PIMPLE_IS_PARAM = 0,
- PIMPLE_IS_SERVICE = 2
- } type;
- zend_bool initialized;
- zend_fcall_info_cache fcc;
-} pimple_bucket_value;
-
-typedef struct _pimple_object {
- zend_object zobj;
- HashTable values;
- HashTable factories;
- HashTable protected;
-} pimple_object;
-
-typedef struct _pimple_closure_object {
- zend_object zobj;
- zval *callable;
- zval *factory;
-} pimple_closure_object;
-
-static const char sensiolabs_logo[] = "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHYAAAAUCAMAAABvRTlyAAAAz1BMVEUAAAAAAAAAAAAsThWB5j4AAACD6T8AAACC6D+C6D6C6D+C6D4AAAAAAACC6D4AAAAAAACC6D8AAAAAAAAAAAAAAAAAAAAAAACC6D4AAAAAAAAAAACC6D4AAAAAAAAAAAAAAAAAAAAAAACC6D8AAACC6D4AAAAAAAAAAAAAAAAAAACC6D8AAACC6D6C6D+B6D+C6D+C6D+C6D8AAACC6D6C6D4AAACC6D/K/2KC6D+B6D6C6D6C6D+C6D8sTxUyWRhEeiEAAACC6D+C5z6B6D7drnEVAAAAQXRSTlMAE3oCNSUuDHFHzxaF9UFsu+irX+zlKzYimaJXktyOSFD6BolxqT7QGMMdarMIpuO28r9EolXKgR16OphfXYd4V14GtB4AAAMpSURBVEjHvVSJctowEF1jjME2RziMwUCoMfd9heZqG4n//6buLpJjkmYm03byZmxJa2nf6u2uQcG2bfhqRN4LoTKBzyGDm68M7mAwcOEdjo4zhA/Rf9Go/CVtTgiRhXfIC3EDH8F/eUX1/9KexRo+QgOdtHDsEe/sM7QT32/+K61Z1LFXcXJxN4pTbu1aTQUzuy2PIA0rDo0/0Aa5XFaJvKaVTrubywXvaa1Wq4Vu/Snr3Y7Aojh4VccwykW2N2oQ8wmjyut6+Q1t5ywIG5Npj1sh5E0B7YOzFDjfuRfaOh3O+MbbVNfTWS9COZk3Obd2su5d0a6IU9KLREbw8gEehWSr1r2sPWciXLG38r5NdW0xu9eioU87omjC9yNaMi5GNf6WppVSOqXCFkmCvMB3p9SROLoYQn5pDgQOujA1xjYvqH+plUdkwnmII8VxR/PKYkrfLLomhVlE3b/LhNbNr7hp0H2JaOc4v8dFB58HSsFTSafaqtY1sT3GO8wsy5rhokYPlRJdjPMajyYqTt1EHF/2uqSWQWmAjCUSmQ1MS3g8Btf1XOsy7YIC0CB1b5Xw1Vhba0zbxiCAQLH9TNPmHJXQUtJAN0KcDsoqLxsNvJrJExa7mKIdp2lRE2WexiS4pqWk/0jROlw6K6bV9YOBDGAuqMJ0bnuUKGB0L27bxgRhGEbzihbhxxXaQC88Vkwq8ldCi86RApWUb0Q+4VDosBCc+1s81lUdnBavH4Zp2mm3O44USwOfvSo9oBiwpFg71lMS1VKJLKljS3j9p+fOTvXXlsSNuEv6YPaZda9uRope0VJfKdo7fPiYfSmvFjXQbkhY0d9hCbBWIktRgEDieDhf1N3wbbkmNNgRy8hyl620yGQat/grV3HMpc2HDKTVmOPFz6ylPCKt/nXcAyV260jaAowwIW0YuBzrOgb/KrddZS9OmJaLgpWK4JX2DDuklcLZSDGcn8Vmx9YDNvT6UsjyBApRyFQVX7Vxm9TGxE16nmfRd8/zQoDmggQOTRh5Hv8pMt9Q/L2JmSwkMCE7dA4BuDjHJwfu0Om4QAhOjrN5XkIatglfiN/bUPdCQFjTYgAAAABJRU5ErkJggg==\">";
-
-static int pimple_zval_to_pimpleval(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC);
-static int pimple_zval_is_valid_callback(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC);
-
-static void pimple_bucket_dtor(pimple_bucket_value *bucket);
-static void pimple_free_bucket(pimple_bucket_value *bucket);
-
-static zval *pimple_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC);
-static void pimple_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC);
-static int pimple_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC);
-static void pimple_object_unset_dimension(zval *object, zval *offset TSRMLS_DC);
-static zend_object_value pimple_object_create(zend_class_entry *ce TSRMLS_DC);
-static void pimple_free_object_storage(pimple_object *obj TSRMLS_DC);
-
-static void pimple_closure_free_object_storage(pimple_closure_object *obj TSRMLS_DC);
-static zend_object_value pimple_closure_object_create(zend_class_entry *ce TSRMLS_DC);
-static zend_function *pimple_closure_get_constructor(zval * TSRMLS_DC);
-static int pimple_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, union _zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC);
-
-#ifdef ZTS
-#define PIMPLE_G(v) TSRMG(pimple_globals_id, zend_pimple_globals *, v)
-#else
-#define PIMPLE_G(v) (pimple_globals.v)
-#endif
-
-#endif /* PHP_PIMPLE_H */
-
diff --git a/server/vendor/pimple/pimple/ext/pimple/pimple.c b/server/vendor/pimple/pimple/ext/pimple/pimple.c
deleted file mode 100644
index 239c01d..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/pimple.c
+++ /dev/null
@@ -1,922 +0,0 @@
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2014 Fabien Potencier
- *
- * 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.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "php.h"
-#include "php_ini.h"
-#include "ext/standard/info.h"
-#include "php_pimple.h"
-#include "pimple_compat.h"
-#include "zend_interfaces.h"
-#include "zend.h"
-#include "Zend/zend_closures.h"
-#include "ext/spl/spl_exceptions.h"
-#include "Zend/zend_exceptions.h"
-#include "main/php_output.h"
-#include "SAPI.h"
-
-static zend_class_entry *pimple_ce;
-static zend_object_handlers pimple_object_handlers;
-static zend_class_entry *pimple_closure_ce;
-static zend_class_entry *pimple_serviceprovider_ce;
-static zend_object_handlers pimple_closure_object_handlers;
-static zend_internal_function pimple_closure_invoker_function;
-
-#define FETCH_DIM_HANDLERS_VARS pimple_object *pimple_obj = NULL; \
- ulong index; \
- pimple_obj = (pimple_object *)zend_object_store_get_object(object TSRMLS_CC); \
-
-#define PIMPLE_OBJECT_HANDLE_INHERITANCE_OBJECT_HANDLERS do { \
- if (ce != pimple_ce) { \
- zend_hash_find(&ce->function_table, ZEND_STRS("offsetget"), (void **)&function); \
- if (function->common.scope != ce) { /* if the function is not defined in this actual class */ \
- pimple_object_handlers.read_dimension = pimple_object_read_dimension; /* then overwrite the handler to use custom one */ \
- } \
- zend_hash_find(&ce->function_table, ZEND_STRS("offsetset"), (void **)&function); \
- if (function->common.scope != ce) { \
- pimple_object_handlers.write_dimension = pimple_object_write_dimension; \
- } \
- zend_hash_find(&ce->function_table, ZEND_STRS("offsetexists"), (void **)&function); \
- if (function->common.scope != ce) { \
- pimple_object_handlers.has_dimension = pimple_object_has_dimension; \
- } \
- zend_hash_find(&ce->function_table, ZEND_STRS("offsetunset"), (void **)&function); \
- if (function->common.scope != ce) { \
- pimple_object_handlers.unset_dimension = pimple_object_unset_dimension; \
- } \
- } else { \
- pimple_object_handlers.read_dimension = pimple_object_read_dimension; \
- pimple_object_handlers.write_dimension = pimple_object_write_dimension; \
- pimple_object_handlers.has_dimension = pimple_object_has_dimension; \
- pimple_object_handlers.unset_dimension = pimple_object_unset_dimension; \
- }\
- } while(0);
-
-#define PIMPLE_CALL_CB do { \
- zend_fcall_info_argn(&fci TSRMLS_CC, 1, &object); \
- fci.size = sizeof(fci); \
- fci.object_ptr = retval->fcc.object_ptr; \
- fci.function_name = retval->value; \
- fci.no_separation = 1; \
- fci.retval_ptr_ptr = &retval_ptr_ptr; \
-\
- zend_call_function(&fci, &retval->fcc TSRMLS_CC); \
- efree(fci.params); \
- if (EG(exception)) { \
- return EG(uninitialized_zval_ptr); \
- } \
- } while(0);
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo___construct, 0, 0, 0)
-ZEND_ARG_ARRAY_INFO(0, value, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetset, 0, 0, 2)
-ZEND_ARG_INFO(0, offset)
-ZEND_ARG_INFO(0, value)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetget, 0, 0, 1)
-ZEND_ARG_INFO(0, offset)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetexists, 0, 0, 1)
-ZEND_ARG_INFO(0, offset)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_offsetunset, 0, 0, 1)
-ZEND_ARG_INFO(0, offset)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_factory, 0, 0, 1)
-ZEND_ARG_INFO(0, callable)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_protect, 0, 0, 1)
-ZEND_ARG_INFO(0, callable)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_raw, 0, 0, 1)
-ZEND_ARG_INFO(0, id)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_extend, 0, 0, 2)
-ZEND_ARG_INFO(0, id)
-ZEND_ARG_INFO(0, callable)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_keys, 0, 0, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_register, 0, 0, 1)
-ZEND_ARG_OBJ_INFO(0, provider, Pimple\\ServiceProviderInterface, 0)
-ZEND_ARG_ARRAY_INFO(0, values, 1)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_serviceprovider_register, 0, 0, 1)
-ZEND_ARG_OBJ_INFO(0, pimple, Pimple\\Container, 0)
-ZEND_END_ARG_INFO()
-
-static const zend_function_entry pimple_ce_functions[] = {
- PHP_ME(Pimple, __construct, arginfo___construct, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, factory, arginfo_factory, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, protect, arginfo_protect, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, raw, arginfo_raw, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, extend, arginfo_extend, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, keys, arginfo_keys, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, register, arginfo_register, ZEND_ACC_PUBLIC)
-
- PHP_ME(Pimple, offsetSet, arginfo_offsetset, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, offsetGet, arginfo_offsetget, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, offsetExists, arginfo_offsetexists, ZEND_ACC_PUBLIC)
- PHP_ME(Pimple, offsetUnset, arginfo_offsetunset, ZEND_ACC_PUBLIC)
- PHP_FE_END
-};
-
-static const zend_function_entry pimple_serviceprovider_iface_ce_functions[] = {
- PHP_ABSTRACT_ME(ServiceProviderInterface, register, arginfo_serviceprovider_register)
- PHP_FE_END
-};
-
-static void pimple_closure_free_object_storage(pimple_closure_object *obj TSRMLS_DC)
-{
- zend_object_std_dtor(&obj->zobj TSRMLS_CC);
- if (obj->factory) {
- zval_ptr_dtor(&obj->factory);
- }
- if (obj->callable) {
- zval_ptr_dtor(&obj->callable);
- }
- efree(obj);
-}
-
-static void pimple_free_object_storage(pimple_object *obj TSRMLS_DC)
-{
- zend_hash_destroy(&obj->factories);
- zend_hash_destroy(&obj->protected);
- zend_hash_destroy(&obj->values);
- zend_object_std_dtor(&obj->zobj TSRMLS_CC);
- efree(obj);
-}
-
-static void pimple_free_bucket(pimple_bucket_value *bucket)
-{
- if (bucket->raw) {
- zval_ptr_dtor(&bucket->raw);
- }
-}
-
-static zend_object_value pimple_closure_object_create(zend_class_entry *ce TSRMLS_DC)
-{
- zend_object_value retval;
- pimple_closure_object *pimple_closure_obj = NULL;
-
- pimple_closure_obj = ecalloc(1, sizeof(pimple_closure_object));
- ZEND_OBJ_INIT(&pimple_closure_obj->zobj, ce);
-
- pimple_closure_object_handlers.get_constructor = pimple_closure_get_constructor;
- retval.handlers = &pimple_closure_object_handlers;
- retval.handle = zend_objects_store_put(pimple_closure_obj, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) pimple_closure_free_object_storage, NULL TSRMLS_CC);
-
- return retval;
-}
-
-static zend_function *pimple_closure_get_constructor(zval *obj TSRMLS_DC)
-{
- zend_error(E_ERROR, "Pimple\\ContainerClosure is an internal class and cannot be instantiated");
-
- return NULL;
-}
-
-static int pimple_closure_get_closure(zval *obj, zend_class_entry **ce_ptr, union _zend_function **fptr_ptr, zval **zobj_ptr TSRMLS_DC)
-{
- *zobj_ptr = obj;
- *ce_ptr = Z_OBJCE_P(obj);
- *fptr_ptr = (zend_function *)&pimple_closure_invoker_function;
-
- return SUCCESS;
-}
-
-static zend_object_value pimple_object_create(zend_class_entry *ce TSRMLS_DC)
-{
- zend_object_value retval;
- pimple_object *pimple_obj = NULL;
- zend_function *function = NULL;
-
- pimple_obj = emalloc(sizeof(pimple_object));
- ZEND_OBJ_INIT(&pimple_obj->zobj, ce);
-
- PIMPLE_OBJECT_HANDLE_INHERITANCE_OBJECT_HANDLERS
-
- retval.handlers = &pimple_object_handlers;
- retval.handle = zend_objects_store_put(pimple_obj, (zend_objects_store_dtor_t) zend_objects_destroy_object, (zend_objects_free_object_storage_t) pimple_free_object_storage, NULL TSRMLS_CC);
-
- zend_hash_init(&pimple_obj->factories, PIMPLE_DEFAULT_ZVAL_CACHE_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0);
- zend_hash_init(&pimple_obj->protected, PIMPLE_DEFAULT_ZVAL_CACHE_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0);
- zend_hash_init(&pimple_obj->values, PIMPLE_DEFAULT_ZVAL_VALUES_NUM, NULL, (dtor_func_t)pimple_bucket_dtor, 0);
-
- return retval;
-}
-
-static void pimple_object_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC)
-{
- FETCH_DIM_HANDLERS_VARS
-
- pimple_bucket_value pimple_value = {0}, *found_value = NULL;
- ulong hash;
-
- pimple_zval_to_pimpleval(value, &pimple_value TSRMLS_CC);
-
- if (!offset) {/* $p[] = 'foo' when not overloaded */
- zend_hash_next_index_insert(&pimple_obj->values, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL);
- Z_ADDREF_P(value);
- return;
- }
-
- switch (Z_TYPE_P(offset)) {
- case IS_STRING:
- hash = zend_hash_func(Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
- zend_hash_quick_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hash, (void **)&found_value);
- if (found_value && found_value->type == PIMPLE_IS_SERVICE && found_value->initialized == 1) {
- pimple_free_bucket(&pimple_value);
- zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot override frozen service \"%s\".", Z_STRVAL_P(offset));
- return;
- }
- if (zend_hash_quick_update(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, hash, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL) == FAILURE) {
- pimple_free_bucket(&pimple_value);
- return;
- }
- Z_ADDREF_P(value);
- break;
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_LONG:
- if (Z_TYPE_P(offset) == IS_DOUBLE) {
- index = (ulong)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- zend_hash_index_find(&pimple_obj->values, index, (void **)&found_value);
- if (found_value && found_value->type == PIMPLE_IS_SERVICE && found_value->initialized == 1) {
- pimple_free_bucket(&pimple_value);
- zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot override frozen service \"%ld\".", index);
- return;
- }
- if (zend_hash_index_update(&pimple_obj->values, index, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL) == FAILURE) {
- pimple_free_bucket(&pimple_value);
- return;
- }
- Z_ADDREF_P(value);
- break;
- case IS_NULL: /* $p[] = 'foo' when overloaded */
- zend_hash_next_index_insert(&pimple_obj->values, (void *)&pimple_value, sizeof(pimple_bucket_value), NULL);
- Z_ADDREF_P(value);
- break;
- default:
- pimple_free_bucket(&pimple_value);
- zend_error(E_WARNING, "Unsupported offset type");
- }
-}
-
-static void pimple_object_unset_dimension(zval *object, zval *offset TSRMLS_DC)
-{
- FETCH_DIM_HANDLERS_VARS
-
- switch (Z_TYPE_P(offset)) {
- case IS_STRING:
- zend_symtable_del(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
- zend_symtable_del(&pimple_obj->factories, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
- zend_symtable_del(&pimple_obj->protected, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1);
- break;
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_LONG:
- if (Z_TYPE_P(offset) == IS_DOUBLE) {
- index = (ulong)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- zend_hash_index_del(&pimple_obj->values, index);
- zend_hash_index_del(&pimple_obj->factories, index);
- zend_hash_index_del(&pimple_obj->protected, index);
- break;
- default:
- zend_error(E_WARNING, "Unsupported offset type");
- }
-}
-
-static int pimple_object_has_dimension(zval *object, zval *offset, int check_empty TSRMLS_DC)
-{
- FETCH_DIM_HANDLERS_VARS
-
- pimple_bucket_value *retval = NULL;
-
- switch (Z_TYPE_P(offset)) {
- case IS_STRING:
- if (zend_symtable_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **)&retval) == SUCCESS) {
- switch (check_empty) {
- case 0: /* isset */
- return 1; /* Differs from PHP behavior (Z_TYPE_P(retval->value) != IS_NULL;) */
- case 1: /* empty */
- default:
- return zend_is_true(retval->value);
- }
- }
- return 0;
- break;
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_LONG:
- if (Z_TYPE_P(offset) == IS_DOUBLE) {
- index = (ulong)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- if (zend_hash_index_find(&pimple_obj->values, index, (void **)&retval) == SUCCESS) {
- switch (check_empty) {
- case 0: /* isset */
- return 1; /* Differs from PHP behavior (Z_TYPE_P(retval->value) != IS_NULL;)*/
- case 1: /* empty */
- default:
- return zend_is_true(retval->value);
- }
- }
- return 0;
- break;
- default:
- zend_error(E_WARNING, "Unsupported offset type");
- return 0;
- }
-}
-
-static zval *pimple_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC)
-{
- FETCH_DIM_HANDLERS_VARS
-
- pimple_bucket_value *retval = NULL;
- zend_fcall_info fci = {0};
- zval *retval_ptr_ptr = NULL;
-
- switch (Z_TYPE_P(offset)) {
- case IS_STRING:
- if (zend_symtable_find(&pimple_obj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **)&retval) == FAILURE) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset));
- return EG(uninitialized_zval_ptr);
- }
- break;
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_LONG:
- if (Z_TYPE_P(offset) == IS_DOUBLE) {
- index = (ulong)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- if (zend_hash_index_find(&pimple_obj->values, index, (void **)&retval) == FAILURE) {
- return EG(uninitialized_zval_ptr);
- }
- break;
- case IS_NULL: /* $p[][3] = 'foo' first dim access */
- return EG(uninitialized_zval_ptr);
- break;
- default:
- zend_error(E_WARNING, "Unsupported offset type");
- return EG(uninitialized_zval_ptr);
- }
-
- if(retval->type == PIMPLE_IS_PARAM) {
- return retval->value;
- }
-
- if (zend_hash_index_exists(&pimple_obj->protected, retval->handle_num)) {
- /* Service is protected, return the value every time */
- return retval->value;
- }
-
- if (zend_hash_index_exists(&pimple_obj->factories, retval->handle_num)) {
- /* Service is a factory, call it everytime and never cache its result */
- PIMPLE_CALL_CB
- Z_DELREF_P(retval_ptr_ptr); /* fetch dim addr will increment refcount */
- return retval_ptr_ptr;
- }
-
- if (retval->initialized == 1) {
- /* Service has already been called, return its cached value */
- return retval->value;
- }
-
- ALLOC_INIT_ZVAL(retval->raw);
- MAKE_COPY_ZVAL(&retval->value, retval->raw);
-
- PIMPLE_CALL_CB
-
- retval->initialized = 1;
- zval_ptr_dtor(&retval->value);
- retval->value = retval_ptr_ptr;
-
- return retval->value;
-}
-
-static int pimple_zval_is_valid_callback(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC)
-{
- if (Z_TYPE_P(_zval) != IS_OBJECT) {
- return FAILURE;
- }
-
- if (_pimple_bucket_value->fcc.called_scope) {
- return SUCCESS;
- }
-
- if (Z_OBJ_HANDLER_P(_zval, get_closure) && Z_OBJ_HANDLER_P(_zval, get_closure)(_zval, &_pimple_bucket_value->fcc.calling_scope, &_pimple_bucket_value->fcc.function_handler, &_pimple_bucket_value->fcc.object_ptr TSRMLS_CC) == SUCCESS) {
- _pimple_bucket_value->fcc.called_scope = _pimple_bucket_value->fcc.calling_scope;
- return SUCCESS;
- } else {
- return FAILURE;
- }
-}
-
-static int pimple_zval_to_pimpleval(zval *_zval, pimple_bucket_value *_pimple_bucket_value TSRMLS_DC)
-{
- _pimple_bucket_value->value = _zval;
-
- if (Z_TYPE_P(_zval) != IS_OBJECT) {
- return PIMPLE_IS_PARAM;
- }
-
- if (pimple_zval_is_valid_callback(_zval, _pimple_bucket_value TSRMLS_CC) == SUCCESS) {
- _pimple_bucket_value->type = PIMPLE_IS_SERVICE;
- _pimple_bucket_value->handle_num = Z_OBJ_HANDLE_P(_zval);
- }
-
- return PIMPLE_IS_SERVICE;
-}
-
-static void pimple_bucket_dtor(pimple_bucket_value *bucket)
-{
- zval_ptr_dtor(&bucket->value);
- pimple_free_bucket(bucket);
-}
-
-PHP_METHOD(Pimple, protect)
-{
- zval *protected = NULL;
- pimple_object *pobj = NULL;
- pimple_bucket_value bucket = {0};
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &protected) == FAILURE) {
- return;
- }
-
- if (pimple_zval_is_valid_callback(protected, &bucket TSRMLS_CC) == FAILURE) {
- pimple_free_bucket(&bucket);
- zend_throw_exception(spl_ce_InvalidArgumentException, "Callable is not a Closure or invokable object.", 0 TSRMLS_CC);
- return;
- }
-
- pimple_zval_to_pimpleval(protected, &bucket TSRMLS_CC);
- pobj = (pimple_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (zend_hash_index_update(&pobj->protected, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL) == SUCCESS) {
- Z_ADDREF_P(protected);
- RETURN_ZVAL(protected, 1 , 0);
- } else {
- pimple_free_bucket(&bucket);
- }
- RETURN_FALSE;
-}
-
-PHP_METHOD(Pimple, raw)
-{
- zval *offset = NULL;
- pimple_object *pobj = NULL;
- pimple_bucket_value *value = NULL;
- ulong index;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) {
- return;
- }
-
- pobj = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- switch (Z_TYPE_P(offset)) {
- case IS_STRING:
- if (zend_symtable_find(&pobj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void *)&value) == FAILURE) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset));
- RETURN_NULL();
- }
- break;
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_LONG:
- if (Z_TYPE_P(offset) == IS_DOUBLE) {
- index = (ulong)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- if (zend_hash_index_find(&pobj->values, index, (void *)&value) == FAILURE) {
- RETURN_NULL();
- }
- break;
- case IS_NULL:
- default:
- zend_error(E_WARNING, "Unsupported offset type");
- }
-
- if (value->raw) {
- RETVAL_ZVAL(value->raw, 1, 0);
- } else {
- RETVAL_ZVAL(value->value, 1, 0);
- }
-}
-
-PHP_METHOD(Pimple, extend)
-{
- zval *offset = NULL, *callable = NULL, *pimple_closure_obj = NULL;
- pimple_bucket_value bucket = {0}, *value = NULL;
- pimple_object *pobj = NULL;
- pimple_closure_object *pcobj = NULL;
- ulong index;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &offset, &callable) == FAILURE) {
- return;
- }
-
- pobj = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- switch (Z_TYPE_P(offset)) {
- case IS_STRING:
- if (zend_symtable_find(&pobj->values, Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void *)&value) == FAILURE) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" is not defined.", Z_STRVAL_P(offset));
- RETURN_NULL();
- }
- if (value->type != PIMPLE_IS_SERVICE) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%s\" does not contain an object definition.", Z_STRVAL_P(offset));
- RETURN_NULL();
- }
- break;
- case IS_DOUBLE:
- case IS_BOOL:
- case IS_LONG:
- if (Z_TYPE_P(offset) == IS_DOUBLE) {
- index = (ulong)Z_DVAL_P(offset);
- } else {
- index = Z_LVAL_P(offset);
- }
- if (zend_hash_index_find(&pobj->values, index, (void *)&value) == FAILURE) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%ld\" is not defined.", index);
- RETURN_NULL();
- }
- if (value->type != PIMPLE_IS_SERVICE) {
- zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Identifier \"%ld\" does not contain an object definition.", index);
- RETURN_NULL();
- }
- break;
- case IS_NULL:
- default:
- zend_error(E_WARNING, "Unsupported offset type");
- }
-
- if (pimple_zval_is_valid_callback(callable, &bucket TSRMLS_CC) == FAILURE) {
- pimple_free_bucket(&bucket);
- zend_throw_exception(spl_ce_InvalidArgumentException, "Extension service definition is not a Closure or invokable object.", 0 TSRMLS_CC);
- RETURN_NULL();
- }
- pimple_free_bucket(&bucket);
-
- ALLOC_INIT_ZVAL(pimple_closure_obj);
- object_init_ex(pimple_closure_obj, pimple_closure_ce);
-
- pcobj = zend_object_store_get_object(pimple_closure_obj TSRMLS_CC);
- pcobj->callable = callable;
- pcobj->factory = value->value;
- Z_ADDREF_P(callable);
- Z_ADDREF_P(value->value);
-
- if (zend_hash_index_exists(&pobj->factories, value->handle_num)) {
- pimple_zval_to_pimpleval(pimple_closure_obj, &bucket TSRMLS_CC);
- zend_hash_index_del(&pobj->factories, value->handle_num);
- zend_hash_index_update(&pobj->factories, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL);
- Z_ADDREF_P(pimple_closure_obj);
- }
-
- pimple_object_write_dimension(getThis(), offset, pimple_closure_obj TSRMLS_CC);
-
- RETVAL_ZVAL(pimple_closure_obj, 1, 1);
-}
-
-PHP_METHOD(Pimple, keys)
-{
- HashPosition pos;
- pimple_object *pobj = NULL;
- zval **value = NULL;
- zval *endval = NULL;
- char *str_index = NULL;
- int str_len;
- ulong num_index;
-
- if (zend_parse_parameters_none() == FAILURE) {
- return;
- }
-
- pobj = zend_object_store_get_object(getThis() TSRMLS_CC);
- array_init_size(return_value, zend_hash_num_elements(&pobj->values));
-
- zend_hash_internal_pointer_reset_ex(&pobj->values, &pos);
-
- while(zend_hash_get_current_data_ex(&pobj->values, (void **)&value, &pos) == SUCCESS) {
- MAKE_STD_ZVAL(endval);
- switch (zend_hash_get_current_key_ex(&pobj->values, &str_index, (uint *)&str_len, &num_index, 0, &pos)) {
- case HASH_KEY_IS_STRING:
- ZVAL_STRINGL(endval, str_index, str_len - 1, 1);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &endval, sizeof(zval *), NULL);
- break;
- case HASH_KEY_IS_LONG:
- ZVAL_LONG(endval, num_index);
- zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &endval, sizeof(zval *), NULL);
- break;
- }
- zend_hash_move_forward_ex(&pobj->values, &pos);
- }
-}
-
-PHP_METHOD(Pimple, factory)
-{
- zval *factory = NULL;
- pimple_object *pobj = NULL;
- pimple_bucket_value bucket = {0};
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &factory) == FAILURE) {
- return;
- }
-
- if (pimple_zval_is_valid_callback(factory, &bucket TSRMLS_CC) == FAILURE) {
- pimple_free_bucket(&bucket);
- zend_throw_exception(spl_ce_InvalidArgumentException, "Service definition is not a Closure or invokable object.", 0 TSRMLS_CC);
- return;
- }
-
- pimple_zval_to_pimpleval(factory, &bucket TSRMLS_CC);
- pobj = (pimple_object *)zend_object_store_get_object(getThis() TSRMLS_CC);
-
- if (zend_hash_index_update(&pobj->factories, bucket.handle_num, (void *)&bucket, sizeof(pimple_bucket_value), NULL) == SUCCESS) {
- Z_ADDREF_P(factory);
- RETURN_ZVAL(factory, 1 , 0);
- } else {
- pimple_free_bucket(&bucket);
- }
-
- RETURN_FALSE;
-}
-
-PHP_METHOD(Pimple, offsetSet)
-{
- zval *offset = NULL, *value = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &offset, &value) == FAILURE) {
- return;
- }
-
- pimple_object_write_dimension(getThis(), offset, value TSRMLS_CC);
-}
-
-PHP_METHOD(Pimple, offsetGet)
-{
- zval *offset = NULL, *retval = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) {
- return;
- }
-
- retval = pimple_object_read_dimension(getThis(), offset, 0 TSRMLS_CC);
-
- RETVAL_ZVAL(retval, 1, 0);
-}
-
-PHP_METHOD(Pimple, offsetUnset)
-{
- zval *offset = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) {
- return;
- }
-
- pimple_object_unset_dimension(getThis(), offset TSRMLS_CC);
-}
-
-PHP_METHOD(Pimple, offsetExists)
-{
- zval *offset = NULL;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &offset) == FAILURE) {
- return;
- }
-
- RETVAL_BOOL(pimple_object_has_dimension(getThis(), offset, 1 TSRMLS_CC));
-}
-
-PHP_METHOD(Pimple, register)
-{
- zval *provider;
- zval **data;
- zval *retval = NULL;
- zval key;
-
- HashTable *array = NULL;
- HashPosition pos;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|h", &provider, pimple_serviceprovider_ce, &array) == FAILURE) {
- return;
- }
-
- RETVAL_ZVAL(getThis(), 1, 0);
-
- zend_call_method_with_1_params(&provider, Z_OBJCE_P(provider), NULL, "register", &retval, getThis());
-
- if (retval) {
- zval_ptr_dtor(&retval);
- }
-
- if (!array) {
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(array, &pos);
-
- while(zend_hash_get_current_data_ex(array, (void **)&data, &pos) == SUCCESS) {
- zend_hash_get_current_key_zval_ex(array, &key, &pos);
- pimple_object_write_dimension(getThis(), &key, *data TSRMLS_CC);
- zend_hash_move_forward_ex(array, &pos);
- }
-}
-
-PHP_METHOD(Pimple, __construct)
-{
- zval *values = NULL, **pData = NULL, offset;
- HashPosition pos;
- char *str_index = NULL;
- zend_uint str_length;
- ulong num_index;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!", &values) == FAILURE || !values) {
- return;
- }
-
- zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos);
- while (zend_hash_has_more_elements_ex(Z_ARRVAL_P(values), &pos) == SUCCESS) {
- zend_hash_get_current_data_ex(Z_ARRVAL_P(values), (void **)&pData, &pos);
- zend_hash_get_current_key_ex(Z_ARRVAL_P(values), &str_index, &str_length, &num_index, 0, &pos);
- INIT_ZVAL(offset);
- if (zend_hash_get_current_key_type_ex(Z_ARRVAL_P(values), &pos) == HASH_KEY_IS_LONG) {
- ZVAL_LONG(&offset, num_index);
- } else {
- ZVAL_STRINGL(&offset, str_index, (str_length - 1), 0);
- }
- pimple_object_write_dimension(getThis(), &offset, *pData TSRMLS_CC);
- zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos);
- }
-}
-
-/*
- * This is PHP code snippet handling extend()s calls :
-
- $extended = function ($c) use ($callable, $factory) {
- return $callable($factory($c), $c);
- };
-
- */
-PHP_METHOD(PimpleClosure, invoker)
-{
- pimple_closure_object *pcobj = NULL;
- zval *arg = NULL, *retval = NULL, *newretval = NULL;
- zend_fcall_info fci = {0};
- zval **args[2];
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) {
- return;
- }
-
- pcobj = zend_object_store_get_object(getThis() TSRMLS_CC);
-
- fci.function_name = pcobj->factory;
- args[0] = &arg;
- zend_fcall_info_argp(&fci TSRMLS_CC, 1, args);
- fci.retval_ptr_ptr = &retval;
- fci.size = sizeof(fci);
-
- if (zend_call_function(&fci, NULL TSRMLS_CC) == FAILURE || EG(exception)) {
- efree(fci.params);
- return; /* Should here return default zval */
- }
-
- efree(fci.params);
- memset(&fci, 0, sizeof(fci));
- fci.size = sizeof(fci);
-
- fci.function_name = pcobj->callable;
- args[0] = &retval;
- args[1] = &arg;
- zend_fcall_info_argp(&fci TSRMLS_CC, 2, args);
- fci.retval_ptr_ptr = &newretval;
-
- if (zend_call_function(&fci, NULL TSRMLS_CC) == FAILURE || EG(exception)) {
- efree(fci.params);
- zval_ptr_dtor(&retval);
- return;
- }
-
- efree(fci.params);
- zval_ptr_dtor(&retval);
-
- RETVAL_ZVAL(newretval, 1 ,1);
-}
-
-PHP_MINIT_FUNCTION(pimple)
-{
- zend_class_entry tmp_pimple_ce, tmp_pimple_closure_ce, tmp_pimple_serviceprovider_iface_ce;
- INIT_NS_CLASS_ENTRY(tmp_pimple_ce, PIMPLE_NS, "Container", pimple_ce_functions);
- INIT_NS_CLASS_ENTRY(tmp_pimple_closure_ce, PIMPLE_NS, "ContainerClosure", NULL);
- INIT_NS_CLASS_ENTRY(tmp_pimple_serviceprovider_iface_ce, PIMPLE_NS, "ServiceProviderInterface", pimple_serviceprovider_iface_ce_functions);
-
- tmp_pimple_ce.create_object = pimple_object_create;
- tmp_pimple_closure_ce.create_object = pimple_closure_object_create;
-
- pimple_ce = zend_register_internal_class(&tmp_pimple_ce TSRMLS_CC);
- zend_class_implements(pimple_ce TSRMLS_CC, 1, zend_ce_arrayaccess);
-
- pimple_closure_ce = zend_register_internal_class(&tmp_pimple_closure_ce TSRMLS_CC);
- pimple_closure_ce->ce_flags |= ZEND_ACC_FINAL_CLASS;
-
- pimple_serviceprovider_ce = zend_register_internal_interface(&tmp_pimple_serviceprovider_iface_ce TSRMLS_CC);
-
- memcpy(&pimple_closure_object_handlers, zend_get_std_object_handlers(), sizeof(*zend_get_std_object_handlers()));
- pimple_object_handlers = std_object_handlers;
- pimple_closure_object_handlers.get_closure = pimple_closure_get_closure;
-
- pimple_closure_invoker_function.function_name = "Pimple closure internal invoker";
- pimple_closure_invoker_function.fn_flags |= ZEND_ACC_CLOSURE;
- pimple_closure_invoker_function.handler = ZEND_MN(PimpleClosure_invoker);
- pimple_closure_invoker_function.num_args = 1;
- pimple_closure_invoker_function.required_num_args = 1;
- pimple_closure_invoker_function.scope = pimple_closure_ce;
- pimple_closure_invoker_function.type = ZEND_INTERNAL_FUNCTION;
- pimple_closure_invoker_function.module = &pimple_module_entry;
-
- return SUCCESS;
-}
-
-PHP_MINFO_FUNCTION(pimple)
-{
- php_info_print_table_start();
- php_info_print_table_header(2, "SensioLabs Pimple C support", "enabled");
- php_info_print_table_row(2, "Pimple supported version", PIMPLE_VERSION);
- php_info_print_table_end();
-
- php_info_print_box_start(0);
- php_write((void *)ZEND_STRL("SensioLabs Pimple C support developed by Julien Pauli") TSRMLS_CC);
- if (!sapi_module.phpinfo_as_text) {
- php_write((void *)ZEND_STRL(sensiolabs_logo) TSRMLS_CC);
- }
- php_info_print_box_end();
-}
-
-zend_module_entry pimple_module_entry = {
- STANDARD_MODULE_HEADER,
- "pimple",
- NULL,
- PHP_MINIT(pimple),
- NULL,
- NULL,
- NULL,
- PHP_MINFO(pimple),
- PIMPLE_VERSION,
- STANDARD_MODULE_PROPERTIES
-};
-
-#ifdef COMPILE_DL_PIMPLE
-ZEND_GET_MODULE(pimple)
-#endif
diff --git a/server/vendor/pimple/pimple/ext/pimple/pimple_compat.h b/server/vendor/pimple/pimple/ext/pimple/pimple_compat.h
deleted file mode 100644
index d234e17..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/pimple_compat.h
+++ /dev/null
@@ -1,81 +0,0 @@
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2014 Fabien Potencier
- *
- * 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.
- */
-
-#ifndef PIMPLE_COMPAT_H_
-#define PIMPLE_COMPAT_H_
-
-#include "Zend/zend_extensions.h" /* for ZEND_EXTENSION_API_NO */
-
-#define PHP_5_0_X_API_NO 220040412
-#define PHP_5_1_X_API_NO 220051025
-#define PHP_5_2_X_API_NO 220060519
-#define PHP_5_3_X_API_NO 220090626
-#define PHP_5_4_X_API_NO 220100525
-#define PHP_5_5_X_API_NO 220121212
-#define PHP_5_6_X_API_NO 220131226
-
-#define IS_PHP_56 ZEND_EXTENSION_API_NO == PHP_5_6_X_API_NO
-#define IS_AT_LEAST_PHP_56 ZEND_EXTENSION_API_NO >= PHP_5_6_X_API_NO
-
-#define IS_PHP_55 ZEND_EXTENSION_API_NO == PHP_5_5_X_API_NO
-#define IS_AT_LEAST_PHP_55 ZEND_EXTENSION_API_NO >= PHP_5_5_X_API_NO
-
-#define IS_PHP_54 ZEND_EXTENSION_API_NO == PHP_5_4_X_API_NO
-#define IS_AT_LEAST_PHP_54 ZEND_EXTENSION_API_NO >= PHP_5_4_X_API_NO
-
-#define IS_PHP_53 ZEND_EXTENSION_API_NO == PHP_5_3_X_API_NO
-#define IS_AT_LEAST_PHP_53 ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO
-
-#if IS_PHP_53
-#define object_properties_init(obj, ce) do { \
- zend_hash_copy(obj->properties, &ce->default_properties, zval_copy_property_ctor(ce), NULL, sizeof(zval *)); \
- } while (0);
-#endif
-
-#define ZEND_OBJ_INIT(obj, ce) do { \
- zend_object_std_init(obj, ce TSRMLS_CC); \
- object_properties_init((obj), (ce)); \
- } while(0);
-
-#if IS_PHP_53 || IS_PHP_54
-static void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos) {
- Bucket *p;
-
- p = pos ? (*pos) : ht->pInternalPointer;
-
- if (!p) {
- Z_TYPE_P(key) = IS_NULL;
- } else if (p->nKeyLength) {
- Z_TYPE_P(key) = IS_STRING;
- Z_STRVAL_P(key) = estrndup(p->arKey, p->nKeyLength - 1);
- Z_STRLEN_P(key) = p->nKeyLength - 1;
- } else {
- Z_TYPE_P(key) = IS_LONG;
- Z_LVAL_P(key) = p->h;
- }
-}
-#endif
-
-#endif /* PIMPLE_COMPAT_H_ */
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/001.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/001.phpt
deleted file mode 100644
index 0809ea2..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/001.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-Test for read_dim/write_dim handlers
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-$p = new Pimple\Container();
-$p[42] = 'foo';
-$p['foo'] = 42;
-
-echo $p[42];
-echo "\n";
-echo $p['foo'];
-echo "\n";
-try {
- var_dump($p['nonexistant']);
- echo "Exception excpected";
-} catch (InvalidArgumentException $e) { }
-
-$p[54.2] = 'foo2';
-echo $p[54];
-echo "\n";
-$p[242.99] = 'foo99';
-echo $p[242];
-
-echo "\n";
-
-$p[5] = 'bar';
-$p[5] = 'baz';
-echo $p[5];
-
-echo "\n";
-
-$p['str'] = 'str';
-$p['str'] = 'strstr';
-echo $p['str'];
-?>
-
---EXPECTF--
-foo
-42
-foo2
-foo99
-baz
-strstr \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/002.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/002.phpt
deleted file mode 100644
index 7b56d2c..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/002.phpt
+++ /dev/null
@@ -1,15 +0,0 @@
---TEST--
-Test for constructor
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-$p = new Pimple\Container();
-var_dump($p[42]);
-
-$p = new Pimple\Container(array(42=>'foo'));
-var_dump($p[42]);
-?>
---EXPECT--
-NULL
-string(3) "foo"
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/003.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/003.phpt
deleted file mode 100644
index a22cfa3..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/003.phpt
+++ /dev/null
@@ -1,16 +0,0 @@
---TEST--
-Test empty dimensions
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-$p = new Pimple\Container();
-$p[] = 42;
-var_dump($p[0]);
-$p[41] = 'foo';
-$p[] = 'bar';
-var_dump($p[42]);
-?>
---EXPECT--
-int(42)
-string(3) "bar" \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/004.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/004.phpt
deleted file mode 100644
index 1e1d251..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/004.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-Test has/unset dim handlers
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-$p = new Pimple\Container();
-$p[] = 42;
-var_dump($p[0]);
-unset($p[0]);
-var_dump($p[0]);
-$p['foo'] = 'bar';
-var_dump(isset($p['foo']));
-unset($p['foo']);
-try {
- var_dump($p['foo']);
- echo "Excpected exception";
-} catch (InvalidArgumentException $e) { }
-var_dump(isset($p['bar']));
-$p['bar'] = NULL;
-var_dump(isset($p['bar']));
-var_dump(empty($p['bar']));
-?>
---EXPECT--
-int(42)
-NULL
-bool(true)
-bool(false)
-bool(true)
-bool(true) \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/005.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/005.phpt
deleted file mode 100644
index 0479ee0..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/005.phpt
+++ /dev/null
@@ -1,27 +0,0 @@
---TEST--
-Test simple class inheritance
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-class MyPimple extends Pimple\Container
-{
- public $someAttr = 'fooAttr';
-
- public function offsetget($o)
- {
- var_dump("hit");
- return parent::offsetget($o);
- }
-}
-
-$p = new MyPimple;
-$p[42] = 'foo';
-echo $p[42];
-echo "\n";
-echo $p->someAttr;
-?>
---EXPECT--
-string(3) "hit"
-foo
-fooAttr \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/006.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/006.phpt
deleted file mode 100644
index cfe8a11..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/006.phpt
+++ /dev/null
@@ -1,51 +0,0 @@
---TEST--
-Test complex class inheritance
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-class MyPimple extends Pimple\Container
-{
- public function offsetget($o)
- {
- var_dump("hit offsetget in " . __CLASS__);
- return parent::offsetget($o);
- }
-}
-
-class TestPimple extends MyPimple
-{
- public function __construct($values)
- {
- array_shift($values);
- parent::__construct($values);
- }
-
- public function offsetget($o)
- {
- var_dump('hit offsetget in ' . __CLASS__);
- return parent::offsetget($o);
- }
-
- public function offsetset($o, $v)
- {
- var_dump('hit offsetset');
- return parent::offsetset($o, $v);
- }
-}
-
-$defaultValues = array('foo' => 'bar', 88 => 'baz');
-
-$p = new TestPimple($defaultValues);
-$p[42] = 'foo';
-var_dump($p[42]);
-var_dump($p[0]);
-?>
---EXPECT--
-string(13) "hit offsetset"
-string(27) "hit offsetget in TestPimple"
-string(25) "hit offsetget in MyPimple"
-string(3) "foo"
-string(27) "hit offsetget in TestPimple"
-string(25) "hit offsetget in MyPimple"
-string(3) "baz" \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/007.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/007.phpt
deleted file mode 100644
index 5aac683..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/007.phpt
+++ /dev/null
@@ -1,22 +0,0 @@
---TEST--
-Test for read_dim/write_dim handlers
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-$p = new Pimple\Container();
-$p[42] = 'foo';
-$p['foo'] = 42;
-
-echo $p[42];
-echo "\n";
-echo $p['foo'];
-echo "\n";
-try {
- var_dump($p['nonexistant']);
- echo "Exception excpected";
-} catch (InvalidArgumentException $e) { }
-?>
---EXPECTF--
-foo
-42 \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/008.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/008.phpt
deleted file mode 100644
index db7eeec..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/008.phpt
+++ /dev/null
@@ -1,29 +0,0 @@
---TEST--
-Test frozen services
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-$p = new Pimple\Container();
-$p[42] = 'foo';
-$p[42] = 'bar';
-
-$p['foo'] = function () { };
-$p['foo'] = function () { };
-
-$a = $p['foo'];
-
-try {
- $p['foo'] = function () { };
- echo "Exception excpected";
-} catch (RuntimeException $e) { }
-
-$p[42] = function() { };
-$a = $p[42];
-
-try {
- $p[42] = function () { };
- echo "Exception excpected";
-} catch (RuntimeException $e) { }
-?>
---EXPECTF--
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/009.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/009.phpt
deleted file mode 100644
index bb05ea2..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/009.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-Test service is called as callback, and only once
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-$p = new Pimple\Container();
-$p['foo'] = function($arg) use ($p) { var_dump($p === $arg); };
-$a = $p['foo'];
-$b = $p['foo']; /* should return not calling the callback */
-?>
---EXPECTF--
-bool(true) \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/010.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/010.phpt
deleted file mode 100644
index badce01..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/010.phpt
+++ /dev/null
@@ -1,45 +0,0 @@
---TEST--
-Test service is called as callback for every callback type
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-function callme()
-{
- return 'called';
-}
-
-$a = function() { return 'called'; };
-
-class Foo
-{
- public static function bar()
- {
- return 'called';
- }
-}
-
-$p = new Pimple\Container();
-$p['foo'] = 'callme';
-echo $p['foo'] . "\n";
-
-$p['bar'] = $a;
-echo $p['bar'] . "\n";
-
-$p['baz'] = "Foo::bar";
-echo $p['baz'] . "\n";
-
-$p['foobar'] = array('Foo', 'bar');
-var_dump($p['foobar']);
-
-?>
---EXPECTF--
-callme
-called
-Foo::bar
-array(2) {
- [0]=>
- string(3) "Foo"
- [1]=>
- string(3) "bar"
-} \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/011.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/011.phpt
deleted file mode 100644
index 6682ab8..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/011.phpt
+++ /dev/null
@@ -1,19 +0,0 @@
---TEST--
-Test service callback throwing an exception
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-class CallBackException extends RuntimeException { }
-
-$p = new Pimple\Container();
-$p['foo'] = function () { throw new CallBackException; };
-try {
- echo $p['foo'] . "\n";
- echo "should not come here";
-} catch (CallBackException $e) {
- echo "all right!";
-}
-?>
---EXPECTF--
-all right! \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/012.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/012.phpt
deleted file mode 100644
index 4c6ac48..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/012.phpt
+++ /dev/null
@@ -1,28 +0,0 @@
---TEST--
-Test service factory
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-$p = new Pimple\Container();
-
-$p->factory($f = function() { var_dump('called-1'); return 'ret-1';});
-
-$p[] = $f;
-
-$p[] = function () { var_dump('called-2'); return 'ret-2'; };
-
-var_dump($p[0]);
-var_dump($p[0]);
-var_dump($p[1]);
-var_dump($p[1]);
-?>
---EXPECTF--
-string(8) "called-1"
-string(5) "ret-1"
-string(8) "called-1"
-string(5) "ret-1"
-string(8) "called-2"
-string(5) "ret-2"
-string(5) "ret-2" \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/013.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/013.phpt
deleted file mode 100644
index f419958..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/013.phpt
+++ /dev/null
@@ -1,33 +0,0 @@
---TEST--
-Test keys()
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-$p = new Pimple\Container();
-
-var_dump($p->keys());
-
-$p['foo'] = 'bar';
-$p[] = 'foo';
-
-var_dump($p->keys());
-
-unset($p['foo']);
-
-var_dump($p->keys());
-?>
---EXPECTF--
-array(0) {
-}
-array(2) {
- [0]=>
- string(3) "foo"
- [1]=>
- int(0)
-}
-array(1) {
- [0]=>
- int(0)
-} \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/014.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/014.phpt
deleted file mode 100644
index ac93721..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/014.phpt
+++ /dev/null
@@ -1,30 +0,0 @@
---TEST--
-Test raw()
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-$p = new Pimple\Container();
-$f = function () { var_dump('called-2'); return 'ret-2'; };
-
-$p['foo'] = $f;
-$p[42] = $f;
-
-var_dump($p['foo']);
-var_dump($p->raw('foo'));
-var_dump($p[42]);
-
-unset($p['foo']);
-
-try {
- $p->raw('foo');
- echo "expected exception";
-} catch (InvalidArgumentException $e) { }
---EXPECTF--
-string(8) "called-2"
-string(5) "ret-2"
-object(Closure)#%i (0) {
-}
-string(8) "called-2"
-string(5) "ret-2" \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/015.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/015.phpt
deleted file mode 100644
index 314f008..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/015.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Test protect()
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-$p = new Pimple\Container();
-$f = function () { return 'foo'; };
-$p['foo'] = $f;
-
-$p->protect($f);
-
-var_dump($p['foo']);
---EXPECTF--
-object(Closure)#%i (0) {
-} \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/016.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/016.phpt
deleted file mode 100644
index e55edb0..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/016.phpt
+++ /dev/null
@@ -1,24 +0,0 @@
---TEST--
-Test extend()
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-/*
- This is part of Pimple::extend() code :
-
- $extended = function ($c) use ($callable, $factory) {
- return $callable($factory($c), $c);
- };
-*/
-
-$p = new Pimple\Container();
-$p[12] = function ($v) { var_dump($v); return 'foo';}; /* $factory in code above */
-
-$c = $p->extend(12, function ($w) { var_dump($w); return 'bar'; }); /* $callable in code above */
-
-var_dump($c('param'));
---EXPECTF--
-string(5) "param"
-string(3) "foo"
-string(3) "bar" \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/017.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/017.phpt
deleted file mode 100644
index bac23ce..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/017.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Test extend() with exception in service extension
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-$p = new Pimple\Container();
-$p[12] = function ($v) { return 'foo';};
-
-$c = $p->extend(12, function ($w) { throw new BadMethodCallException; });
-
-try {
- $p[12];
- echo "Exception expected";
-} catch (BadMethodCallException $e) { }
---EXPECTF--
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt
deleted file mode 100644
index 8f881d6..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt
+++ /dev/null
@@ -1,17 +0,0 @@
---TEST--
-Test extend() with exception in service factory
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-$p = new Pimple\Container();
-$p[12] = function ($v) { throw new BadMethodCallException; };
-
-$c = $p->extend(12, function ($w) { return 'foobar'; });
-
-try {
- $p[12];
- echo "Exception expected";
-} catch (BadMethodCallException $e) { }
---EXPECTF--
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/018.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/018.phpt
deleted file mode 100644
index 27c12a1..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/018.phpt
+++ /dev/null
@@ -1,23 +0,0 @@
---TEST--
-Test register()
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-class Foo implements Pimple\ServiceProviderInterface
-{
- public function register(Pimple\Container $p)
- {
- var_dump($p);
- }
-}
-
-$p = new Pimple\Container();
-$p->register(new Foo, array(42 => 'bar'));
-
-var_dump($p[42]);
---EXPECTF--
-object(Pimple\Container)#1 (0) {
-}
-string(3) "bar" \ No newline at end of file
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/019.phpt b/server/vendor/pimple/pimple/ext/pimple/tests/019.phpt
deleted file mode 100644
index 28a9aec..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/019.phpt
+++ /dev/null
@@ -1,18 +0,0 @@
---TEST--
-Test register() returns static and is a fluent interface
---SKIPIF--
-<?php if (!extension_loaded("pimple")) print "skip"; ?>
---FILE--
-<?php
-
-class Foo implements Pimple\ServiceProviderInterface
-{
- public function register(Pimple\Container $p)
- {
- }
-}
-
-$p = new Pimple\Container();
-var_dump($p === $p->register(new Foo));
---EXPECTF--
-bool(true)
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/bench.phpb b/server/vendor/pimple/pimple/ext/pimple/tests/bench.phpb
deleted file mode 100644
index 8f983e6..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/bench.phpb
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-if (!class_exists('Pimple\Container')) {
- require_once __DIR__ . '/../../../src/Pimple/Container.php';
-} else {
- echo "pimple-c extension detected, using...\n\n";
-}
-
-$time = microtime(true);
-
-function foo() { }
-$factory = function () { };
-
-for ($i=0; $i<10000; $i++) {
-
-$p = new Pimple\Container;
-
-$p['foo'] = 'bar';
-
-if (!isset($p[3])) {
- $p[3] = $p['foo'];
- $p[] = 'bar';
-}
-
-$p[2] = 42;
-
-if (isset($p[2])) {
- unset($p[2]);
-}
-
-$p[42] = $p['foo'];
-
-$p['cb'] = function($arg) { };
-
-$p[] = $p['cb'];
-
-echo $p['cb'];
-echo $p['cb'];
-echo $p['cb'];
-
-//$p->factory($factory);
-
-$p['factory'] = $factory;
-
-echo $p['factory'];
-echo $p['factory'];
-echo $p['factory'];
-
-}
-
-echo microtime(true) - $time;
diff --git a/server/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb b/server/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb
deleted file mode 100644
index aec541f..0000000
--- a/server/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-if (!class_exists('Pimple\Container')) {
- require_once __DIR__ . '/../../../src/Pimple/Container.php';
-} else {
- echo "pimple-c extension detected, using...\n\n";
-}
-
-$time = microtime(true);
-
-
-$service = function ($arg) { return "I'm a service"; };
-
-for ($i=0; $i<10000; $i++) {
-
-$p = new Pimple\Container;
-$p['my_service'] = $service;
-
-$a = $p['my_service'];
-$b = $p['my_service'];
-
-}
-
-echo microtime(true) - $time;
-?>
diff --git a/server/vendor/pimple/pimple/phpunit.xml.dist b/server/vendor/pimple/pimple/phpunit.xml.dist
deleted file mode 100644
index 5c8d487..0000000
--- a/server/vendor/pimple/pimple/phpunit.xml.dist
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
- backupGlobals="false"
- colors="true"
- bootstrap="vendor/autoload.php"
->
- <testsuites>
- <testsuite name="Pimple Test Suite">
- <directory>./src/Pimple/Tests</directory>
- </testsuite>
- </testsuites>
-</phpunit>
diff --git a/server/vendor/pimple/pimple/src/Pimple/Container.php b/server/vendor/pimple/pimple/src/Pimple/Container.php
deleted file mode 100644
index c976431..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/Container.php
+++ /dev/null
@@ -1,282 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple;
-
-/**
- * Container main class.
- *
- * @author Fabien Potencier
- */
-class Container implements \ArrayAccess
-{
- private $values = array();
- private $factories;
- private $protected;
- private $frozen = array();
- private $raw = array();
- private $keys = array();
-
- /**
- * Instantiate the container.
- *
- * Objects and parameters can be passed as argument to the constructor.
- *
- * @param array $values The parameters or objects.
- */
- public function __construct(array $values = array())
- {
- $this->factories = new \SplObjectStorage();
- $this->protected = new \SplObjectStorage();
-
- foreach ($values as $key => $value) {
- $this->offsetSet($key, $value);
- }
- }
-
- /**
- * Sets a parameter or an object.
- *
- * Objects must be defined as Closures.
- *
- * Allowing any PHP callable leads to difficult to debug problems
- * as function names (strings) are callable (creating a function with
- * the same name as an existing parameter would break your container).
- *
- * @param string $id The unique identifier for the parameter or object
- * @param mixed $value The value of the parameter or a closure to define an object
- *
- * @throws \RuntimeException Prevent override of a frozen service
- */
- public function offsetSet($id, $value)
- {
- if (isset($this->frozen[$id])) {
- throw new \RuntimeException(sprintf('Cannot override frozen service "%s".', $id));
- }
-
- $this->values[$id] = $value;
- $this->keys[$id] = true;
- }
-
- /**
- * Gets a parameter or an object.
- *
- * @param string $id The unique identifier for the parameter or object
- *
- * @return mixed The value of the parameter or an object
- *
- * @throws \InvalidArgumentException if the identifier is not defined
- */
- public function offsetGet($id)
- {
- if (!isset($this->keys[$id])) {
- throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
- }
-
- if (
- isset($this->raw[$id])
- || !is_object($this->values[$id])
- || isset($this->protected[$this->values[$id]])
- || !method_exists($this->values[$id], '__invoke')
- ) {
- return $this->values[$id];
- }
-
- if (isset($this->factories[$this->values[$id]])) {
- return $this->values[$id]($this);
- }
-
- $raw = $this->values[$id];
- $val = $this->values[$id] = $raw($this);
- $this->raw[$id] = $raw;
-
- $this->frozen[$id] = true;
-
- return $val;
- }
-
- /**
- * Checks if a parameter or an object is set.
- *
- * @param string $id The unique identifier for the parameter or object
- *
- * @return bool
- */
- public function offsetExists($id)
- {
- return isset($this->keys[$id]);
- }
-
- /**
- * Unsets a parameter or an object.
- *
- * @param string $id The unique identifier for the parameter or object
- */
- public function offsetUnset($id)
- {
- if (isset($this->keys[$id])) {
- if (is_object($this->values[$id])) {
- unset($this->factories[$this->values[$id]], $this->protected[$this->values[$id]]);
- }
-
- unset($this->values[$id], $this->frozen[$id], $this->raw[$id], $this->keys[$id]);
- }
- }
-
- /**
- * Marks a callable as being a factory service.
- *
- * @param callable $callable A service definition to be used as a factory
- *
- * @return callable The passed callable
- *
- * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object
- */
- public function factory($callable)
- {
- if (!method_exists($callable, '__invoke')) {
- throw new \InvalidArgumentException('Service definition is not a Closure or invokable object.');
- }
-
- $this->factories->attach($callable);
-
- return $callable;
- }
-
- /**
- * Protects a callable from being interpreted as a service.
- *
- * This is useful when you want to store a callable as a parameter.
- *
- * @param callable $callable A callable to protect from being evaluated
- *
- * @return callable The passed callable
- *
- * @throws \InvalidArgumentException Service definition has to be a closure of an invokable object
- */
- public function protect($callable)
- {
- if (!method_exists($callable, '__invoke')) {
- throw new \InvalidArgumentException('Callable is not a Closure or invokable object.');
- }
-
- $this->protected->attach($callable);
-
- return $callable;
- }
-
- /**
- * Gets a parameter or the closure defining an object.
- *
- * @param string $id The unique identifier for the parameter or object
- *
- * @return mixed The value of the parameter or the closure defining an object
- *
- * @throws \InvalidArgumentException if the identifier is not defined
- */
- public function raw($id)
- {
- if (!isset($this->keys[$id])) {
- throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
- }
-
- if (isset($this->raw[$id])) {
- return $this->raw[$id];
- }
-
- return $this->values[$id];
- }
-
- /**
- * Extends an object definition.
- *
- * Useful when you want to extend an existing object definition,
- * without necessarily loading that object.
- *
- * @param string $id The unique identifier for the object
- * @param callable $callable A service definition to extend the original
- *
- * @return callable The wrapped callable
- *
- * @throws \InvalidArgumentException if the identifier is not defined or not a service definition
- */
- public function extend($id, $callable)
- {
- if (!isset($this->keys[$id])) {
- throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
- }
-
- if (!is_object($this->values[$id]) || !method_exists($this->values[$id], '__invoke')) {
- throw new \InvalidArgumentException(sprintf('Identifier "%s" does not contain an object definition.', $id));
- }
-
- if (!is_object($callable) || !method_exists($callable, '__invoke')) {
- throw new \InvalidArgumentException('Extension service definition is not a Closure or invokable object.');
- }
-
- $factory = $this->values[$id];
-
- $extended = function ($c) use ($callable, $factory) {
- return $callable($factory($c), $c);
- };
-
- if (isset($this->factories[$factory])) {
- $this->factories->detach($factory);
- $this->factories->attach($extended);
- }
-
- return $this[$id] = $extended;
- }
-
- /**
- * Returns all defined value names.
- *
- * @return array An array of value names
- */
- public function keys()
- {
- return array_keys($this->values);
- }
-
- /**
- * Registers a service provider.
- *
- * @param ServiceProviderInterface $provider A ServiceProviderInterface instance
- * @param array $values An array of values that customizes the provider
- *
- * @return static
- */
- public function register(ServiceProviderInterface $provider, array $values = array())
- {
- $provider->register($this);
-
- foreach ($values as $key => $value) {
- $this[$key] = $value;
- }
-
- return $this;
- }
-}
diff --git a/server/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php b/server/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php
deleted file mode 100644
index c004594..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/ServiceProviderInterface.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple;
-
-/**
- * Pimple service provider interface.
- *
- * @author Fabien Potencier
- * @author Dominik Zogg
- */
-interface ServiceProviderInterface
-{
- /**
- * Registers services on the given container.
- *
- * This method should only be used to configure services and parameters.
- * It should not get services.
- *
- * @param Container $pimple A container instance
- */
- public function register(Container $pimple);
-}
diff --git a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php b/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php
deleted file mode 100644
index aba453b..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Invokable.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple\Tests\Fixtures;
-
-class Invokable
-{
- public function __invoke($value = null)
- {
- $service = new Service();
- $service->value = $value;
-
- return $service;
- }
-}
diff --git a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php b/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php
deleted file mode 100644
index 33cd4e5..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/NonInvokable.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple\Tests\Fixtures;
-
-class NonInvokable
-{
- public function __call($a, $b)
- {
- }
-}
diff --git a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php b/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php
deleted file mode 100644
index 0c910af..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/PimpleServiceProvider.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple\Tests\Fixtures;
-
-use Pimple\Container;
-use Pimple\ServiceProviderInterface;
-
-class PimpleServiceProvider implements ServiceProviderInterface
-{
- /**
- * Registers services on the given container.
- *
- * This method should only be used to configure services and parameters.
- * It should not get services.
- *
- * @param Container $pimple An Container instance
- */
- public function register(Container $pimple)
- {
- $pimple['param'] = 'value';
-
- $pimple['service'] = function () {
- return new Service();
- };
-
- $pimple['factory'] = $pimple->factory(function () {
- return new Service();
- });
- }
-}
diff --git a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php b/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php
deleted file mode 100644
index d71b184..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/Tests/Fixtures/Service.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple\Tests\Fixtures;
-
-/**
- * @author Igor Wiedler <igor@wiedler.ch>
- */
-class Service
-{
- public $value;
-}
diff --git a/server/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php b/server/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php
deleted file mode 100644
index 8e5c4c7..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/Tests/PimpleServiceProviderInterfaceTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple\Tests;
-
-use Pimple\Container;
-
-/**
- * @author Dominik Zogg <dominik.zogg@gmail.com>
- */
-class PimpleServiceProviderInterfaceTest extends \PHPUnit_Framework_TestCase
-{
- public function testProvider()
- {
- $pimple = new Container();
-
- $pimpleServiceProvider = new Fixtures\PimpleServiceProvider();
- $pimpleServiceProvider->register($pimple);
-
- $this->assertEquals('value', $pimple['param']);
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']);
-
- $serviceOne = $pimple['factory'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
-
- $serviceTwo = $pimple['factory'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
-
- $this->assertNotSame($serviceOne, $serviceTwo);
- }
-
- public function testProviderWithRegisterMethod()
- {
- $pimple = new Container();
-
- $pimple->register(new Fixtures\PimpleServiceProvider(), array(
- 'anotherParameter' => 'anotherValue',
- ));
-
- $this->assertEquals('value', $pimple['param']);
- $this->assertEquals('anotherValue', $pimple['anotherParameter']);
-
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']);
-
- $serviceOne = $pimple['factory'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
-
- $serviceTwo = $pimple['factory'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
-
- $this->assertNotSame($serviceOne, $serviceTwo);
- }
-}
diff --git a/server/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php b/server/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php
deleted file mode 100644
index 918f620..0000000
--- a/server/vendor/pimple/pimple/src/Pimple/Tests/PimpleTest.php
+++ /dev/null
@@ -1,440 +0,0 @@
-<?php
-
-/*
- * This file is part of Pimple.
- *
- * Copyright (c) 2009 Fabien Potencier
- *
- * 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.
- */
-
-namespace Pimple\Tests;
-
-use Pimple\Container;
-
-/**
- * @author Igor Wiedler <igor@wiedler.ch>
- */
-class PimpleTest extends \PHPUnit_Framework_TestCase
-{
- public function testWithString()
- {
- $pimple = new Container();
- $pimple['param'] = 'value';
-
- $this->assertEquals('value', $pimple['param']);
- }
-
- public function testWithClosure()
- {
- $pimple = new Container();
- $pimple['service'] = function () {
- return new Fixtures\Service();
- };
-
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['service']);
- }
-
- public function testServicesShouldBeDifferent()
- {
- $pimple = new Container();
- $pimple['service'] = $pimple->factory(function () {
- return new Fixtures\Service();
- });
-
- $serviceOne = $pimple['service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
-
- $serviceTwo = $pimple['service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
-
- $this->assertNotSame($serviceOne, $serviceTwo);
- }
-
- public function testShouldPassContainerAsParameter()
- {
- $pimple = new Container();
- $pimple['service'] = function () {
- return new Fixtures\Service();
- };
- $pimple['container'] = function ($container) {
- return $container;
- };
-
- $this->assertNotSame($pimple, $pimple['service']);
- $this->assertSame($pimple, $pimple['container']);
- }
-
- public function testIsset()
- {
- $pimple = new Container();
- $pimple['param'] = 'value';
- $pimple['service'] = function () {
- return new Fixtures\Service();
- };
-
- $pimple['null'] = null;
-
- $this->assertTrue(isset($pimple['param']));
- $this->assertTrue(isset($pimple['service']));
- $this->assertTrue(isset($pimple['null']));
- $this->assertFalse(isset($pimple['non_existent']));
- }
-
- public function testConstructorInjection()
- {
- $params = array('param' => 'value');
- $pimple = new Container($params);
-
- $this->assertSame($params['param'], $pimple['param']);
- }
-
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Identifier "foo" is not defined.
- */
- public function testOffsetGetValidatesKeyIsPresent()
- {
- $pimple = new Container();
- echo $pimple['foo'];
- }
-
- public function testOffsetGetHonorsNullValues()
- {
- $pimple = new Container();
- $pimple['foo'] = null;
- $this->assertNull($pimple['foo']);
- }
-
- public function testUnset()
- {
- $pimple = new Container();
- $pimple['param'] = 'value';
- $pimple['service'] = function () {
- return new Fixtures\Service();
- };
-
- unset($pimple['param'], $pimple['service']);
- $this->assertFalse(isset($pimple['param']));
- $this->assertFalse(isset($pimple['service']));
- }
-
- /**
- * @dataProvider serviceDefinitionProvider
- */
- public function testShare($service)
- {
- $pimple = new Container();
- $pimple['shared_service'] = $service;
-
- $serviceOne = $pimple['shared_service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
-
- $serviceTwo = $pimple['shared_service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
-
- $this->assertSame($serviceOne, $serviceTwo);
- }
-
- /**
- * @dataProvider serviceDefinitionProvider
- */
- public function testProtect($service)
- {
- $pimple = new Container();
- $pimple['protected'] = $pimple->protect($service);
-
- $this->assertSame($service, $pimple['protected']);
- }
-
- public function testGlobalFunctionNameAsParameterValue()
- {
- $pimple = new Container();
- $pimple['global_function'] = 'strlen';
- $this->assertSame('strlen', $pimple['global_function']);
- }
-
- public function testRaw()
- {
- $pimple = new Container();
- $pimple['service'] = $definition = $pimple->factory(function () { return 'foo'; });
- $this->assertSame($definition, $pimple->raw('service'));
- }
-
- public function testRawHonorsNullValues()
- {
- $pimple = new Container();
- $pimple['foo'] = null;
- $this->assertNull($pimple->raw('foo'));
- }
-
- public function testFluentRegister()
- {
- $pimple = new Container();
- $this->assertSame($pimple, $pimple->register($this->getMock('Pimple\ServiceProviderInterface')));
- }
-
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Identifier "foo" is not defined.
- */
- public function testRawValidatesKeyIsPresent()
- {
- $pimple = new Container();
- $pimple->raw('foo');
- }
-
- /**
- * @dataProvider serviceDefinitionProvider
- */
- public function testExtend($service)
- {
- $pimple = new Container();
- $pimple['shared_service'] = function () {
- return new Fixtures\Service();
- };
- $pimple['factory_service'] = $pimple->factory(function () {
- return new Fixtures\Service();
- });
-
- $pimple->extend('shared_service', $service);
- $serviceOne = $pimple['shared_service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
- $serviceTwo = $pimple['shared_service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
- $this->assertSame($serviceOne, $serviceTwo);
- $this->assertSame($serviceOne->value, $serviceTwo->value);
-
- $pimple->extend('factory_service', $service);
- $serviceOne = $pimple['factory_service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceOne);
- $serviceTwo = $pimple['factory_service'];
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $serviceTwo);
- $this->assertNotSame($serviceOne, $serviceTwo);
- $this->assertNotSame($serviceOne->value, $serviceTwo->value);
- }
-
- public function testExtendDoesNotLeakWithFactories()
- {
- if (extension_loaded('pimple')) {
- $this->markTestSkipped('Pimple extension does not support this test');
- }
- $pimple = new Container();
-
- $pimple['foo'] = $pimple->factory(function () { return; });
- $pimple['foo'] = $pimple->extend('foo', function ($foo, $pimple) { return; });
- unset($pimple['foo']);
-
- $p = new \ReflectionProperty($pimple, 'values');
- $p->setAccessible(true);
- $this->assertEmpty($p->getValue($pimple));
-
- $p = new \ReflectionProperty($pimple, 'factories');
- $p->setAccessible(true);
- $this->assertCount(0, $p->getValue($pimple));
- }
-
- /**
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Identifier "foo" is not defined.
- */
- public function testExtendValidatesKeyIsPresent()
- {
- $pimple = new Container();
- $pimple->extend('foo', function () {});
- }
-
- public function testKeys()
- {
- $pimple = new Container();
- $pimple['foo'] = 123;
- $pimple['bar'] = 123;
-
- $this->assertEquals(array('foo', 'bar'), $pimple->keys());
- }
-
- /** @test */
- public function settingAnInvokableObjectShouldTreatItAsFactory()
- {
- $pimple = new Container();
- $pimple['invokable'] = new Fixtures\Invokable();
-
- $this->assertInstanceOf('Pimple\Tests\Fixtures\Service', $pimple['invokable']);
- }
-
- /** @test */
- public function settingNonInvokableObjectShouldTreatItAsParameter()
- {
- $pimple = new Container();
- $pimple['non_invokable'] = new Fixtures\NonInvokable();
-
- $this->assertInstanceOf('Pimple\Tests\Fixtures\NonInvokable', $pimple['non_invokable']);
- }
-
- /**
- * @dataProvider badServiceDefinitionProvider
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Service definition is not a Closure or invokable object.
- */
- public function testFactoryFailsForInvalidServiceDefinitions($service)
- {
- $pimple = new Container();
- $pimple->factory($service);
- }
-
- /**
- * @dataProvider badServiceDefinitionProvider
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Callable is not a Closure or invokable object.
- */
- public function testProtectFailsForInvalidServiceDefinitions($service)
- {
- $pimple = new Container();
- $pimple->protect($service);
- }
-
- /**
- * @dataProvider badServiceDefinitionProvider
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Identifier "foo" does not contain an object definition.
- */
- public function testExtendFailsForKeysNotContainingServiceDefinitions($service)
- {
- $pimple = new Container();
- $pimple['foo'] = $service;
- $pimple->extend('foo', function () {});
- }
-
- /**
- * @dataProvider badServiceDefinitionProvider
- * @expectedException \InvalidArgumentException
- * @expectedExceptionMessage Extension service definition is not a Closure or invokable object.
- */
- public function testExtendFailsForInvalidServiceDefinitions($service)
- {
- $pimple = new Container();
- $pimple['foo'] = function () {};
- $pimple->extend('foo', $service);
- }
-
- /**
- * Provider for invalid service definitions.
- */
- public function badServiceDefinitionProvider()
- {
- return array(
- array(123),
- array(new Fixtures\NonInvokable()),
- );
- }
-
- /**
- * Provider for service definitions.
- */
- public function serviceDefinitionProvider()
- {
- return array(
- array(function ($value) {
- $service = new Fixtures\Service();
- $service->value = $value;
-
- return $service;
- }),
- array(new Fixtures\Invokable()),
- );
- }
-
- public function testDefiningNewServiceAfterFreeze()
- {
- $pimple = new Container();
- $pimple['foo'] = function () {
- return 'foo';
- };
- $foo = $pimple['foo'];
-
- $pimple['bar'] = function () {
- return 'bar';
- };
- $this->assertSame('bar', $pimple['bar']);
- }
-
- /**
- * @expectedException \RuntimeException
- * @expectedExceptionMessage Cannot override frozen service "foo".
- */
- public function testOverridingServiceAfterFreeze()
- {
- $pimple = new Container();
- $pimple['foo'] = function () {
- return 'foo';
- };
- $foo = $pimple['foo'];
-
- $pimple['foo'] = function () {
- return 'bar';
- };
- }
-
- public function testRemovingServiceAfterFreeze()
- {
- $pimple = new Container();
- $pimple['foo'] = function () {
- return 'foo';
- };
- $foo = $pimple['foo'];
-
- unset($pimple['foo']);
- $pimple['foo'] = function () {
- return 'bar';
- };
- $this->assertSame('bar', $pimple['foo']);
- }
-
- public function testExtendingService()
- {
- $pimple = new Container();
- $pimple['foo'] = function () {
- return 'foo';
- };
- $pimple['foo'] = $pimple->extend('foo', function ($foo, $app) {
- return "$foo.bar";
- });
- $pimple['foo'] = $pimple->extend('foo', function ($foo, $app) {
- return "$foo.baz";
- });
- $this->assertSame('foo.bar.baz', $pimple['foo']);
- }
-
- public function testExtendingServiceAfterOtherServiceFreeze()
- {
- $pimple = new Container();
- $pimple['foo'] = function () {
- return 'foo';
- };
- $pimple['bar'] = function () {
- return 'bar';
- };
- $foo = $pimple['foo'];
-
- $pimple['bar'] = $pimple->extend('bar', function ($bar, $app) {
- return "$bar.baz";
- });
- $this->assertSame('bar.baz', $pimple['bar']);
- }
-}
diff --git a/server/vendor/psr/container/.gitignore b/server/vendor/psr/container/.gitignore
deleted file mode 100644
index b2395aa..0000000
--- a/server/vendor/psr/container/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-composer.lock
-composer.phar
-/vendor/
diff --git a/server/vendor/psr/container/LICENSE b/server/vendor/psr/container/LICENSE
deleted file mode 100644
index 2877a48..0000000
--- a/server/vendor/psr/container/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2013-2016 container-interop
-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/server/vendor/psr/container/README.md b/server/vendor/psr/container/README.md
deleted file mode 100644
index 084f6df..0000000
--- a/server/vendor/psr/container/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# PSR Container
-
-This repository holds all interfaces/classes/traits related to [PSR-11](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md).
-
-Note that this is not a container implementation of its own. See the specification for more details.
diff --git a/server/vendor/psr/container/composer.json b/server/vendor/psr/container/composer.json
deleted file mode 100644
index b8ee012..0000000
--- a/server/vendor/psr/container/composer.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "name": "psr/container",
- "type": "library",
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "keywords": ["psr", "psr-11", "container", "container-interop", "container-interface"],
- "homepage": "https://github.com/php-fig/container",
- "license": "MIT",
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "require": {
- "php": ">=5.3.0"
- },
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- }
-}
diff --git a/server/vendor/psr/container/src/ContainerExceptionInterface.php b/server/vendor/psr/container/src/ContainerExceptionInterface.php
deleted file mode 100644
index d35c6b4..0000000
--- a/server/vendor/psr/container/src/ContainerExceptionInterface.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
- */
-
-namespace Psr\Container;
-
-/**
- * Base interface representing a generic exception in a container.
- */
-interface ContainerExceptionInterface
-{
-}
diff --git a/server/vendor/psr/container/src/ContainerInterface.php b/server/vendor/psr/container/src/ContainerInterface.php
deleted file mode 100644
index c3a7206..0000000
--- a/server/vendor/psr/container/src/ContainerInterface.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
- */
-
-namespace Psr\Container;
-
-/**
- * Describes the interface of a container that exposes methods to read its entries.
- */
-interface ContainerInterface
-{
- /**
- * Finds an entry of the container by its identifier and returns it.
- *
- * @param string $id Identifier of the entry to look for.
- *
- * @throws NotFoundExceptionInterface No entry was found for **this** identifier.
- * @throws ContainerExceptionInterface Error while retrieving the entry.
- *
- * @return mixed Entry.
- */
- public function get($id);
-
- /**
- * Returns true if the container can return an entry for the given identifier.
- * Returns false otherwise.
- *
- * `has($id)` returning true does not mean that `get($id)` will not throw an exception.
- * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.
- *
- * @param string $id Identifier of the entry to look for.
- *
- * @return bool
- */
- public function has($id);
-}
diff --git a/server/vendor/psr/container/src/NotFoundExceptionInterface.php b/server/vendor/psr/container/src/NotFoundExceptionInterface.php
deleted file mode 100644
index 6566704..0000000
--- a/server/vendor/psr/container/src/NotFoundExceptionInterface.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * @license http://www.opensource.org/licenses/mit-license.php MIT (see the LICENSE file)
- */
-
-namespace Psr\Container;
-
-/**
- * No entry was found in the container.
- */
-interface NotFoundExceptionInterface extends ContainerExceptionInterface
-{
-}
diff --git a/server/vendor/psr/http-message/CHANGELOG.md b/server/vendor/psr/http-message/CHANGELOG.md
deleted file mode 100644
index 74b1ef9..0000000
--- a/server/vendor/psr/http-message/CHANGELOG.md
+++ /dev/null
@@ -1,36 +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
-
-### Added
-
-- Nothing.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- Updated all `@return self` annotation references in interfaces to use
- `@return static`, which more closelly follows the semantics of the
- specification.
-- Updated the `MessageInterface::getHeaders()` return annotation to use the
- value `string[][]`, indicating the format is a nested array of strings.
-- Updated the `@link` annotation for `RequestInterface::withRequestTarget()`
- to point to the correct section of RFC 7230.
-- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation
- to add the parameter name (`$uploadedFiles`).
-- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()`
- method to correctly reference the method parameter (it was referencing an
- incorrect parameter name previously).
-
-## 1.0.0 - 2016-05-18
-
-Initial stable release; reflects accepted PSR-7 specification.
diff --git a/server/vendor/psr/http-message/LICENSE b/server/vendor/psr/http-message/LICENSE
deleted file mode 100644
index c2d8e45..0000000
--- a/server/vendor/psr/http-message/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2014 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/server/vendor/psr/http-message/README.md b/server/vendor/psr/http-message/README.md
deleted file mode 100644
index 2818533..0000000
--- a/server/vendor/psr/http-message/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-PSR Http Message
-================
-
-This repository holds all interfaces/classes/traits related to
-[PSR-7](http://www.php-fig.org/psr/psr-7/).
-
-Note that this is not a HTTP message implementation of its own. It is merely an
-interface that describes a HTTP message. See the specification for more details.
-
-Usage
------
-
-We'll certainly need some stuff in here. \ No newline at end of file
diff --git a/server/vendor/psr/http-message/composer.json b/server/vendor/psr/http-message/composer.json
deleted file mode 100644
index b0d2937..0000000
--- a/server/vendor/psr/http-message/composer.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "psr/http-message",
- "description": "Common interface for HTTP messages",
- "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"],
- "homepage": "https://github.com/php-fig/http-message",
- "license": "MIT",
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "require": {
- "php": ">=5.3.0"
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- }
-}
diff --git a/server/vendor/psr/http-message/src/MessageInterface.php b/server/vendor/psr/http-message/src/MessageInterface.php
deleted file mode 100644
index dd46e5e..0000000
--- a/server/vendor/psr/http-message/src/MessageInterface.php
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-/**
- * HTTP messages consist of requests from a client to a server and responses
- * from a server to a client. This interface defines the methods common to
- * each.
- *
- * Messages are considered immutable; all methods that might change state MUST
- * be implemented such that they retain the internal state of the current
- * message and return an instance that contains the changed state.
- *
- * @link http://www.ietf.org/rfc/rfc7230.txt
- * @link http://www.ietf.org/rfc/rfc7231.txt
- */
-interface MessageInterface
-{
- /**
- * Retrieves the HTTP protocol version as a string.
- *
- * The string MUST contain only the HTTP version number (e.g., "1.1", "1.0").
- *
- * @return string HTTP protocol version.
- */
- public function getProtocolVersion();
-
- /**
- * Return an instance with the specified HTTP protocol version.
- *
- * The version string MUST contain only the HTTP version number (e.g.,
- * "1.1", "1.0").
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new protocol version.
- *
- * @param string $version HTTP protocol version
- * @return static
- */
- public function withProtocolVersion($version);
-
- /**
- * Retrieves all message header values.
- *
- * The keys represent the header name as it will be sent over the wire, and
- * each value is an array of strings associated with the header.
- *
- * // Represent the headers as a string
- * foreach ($message->getHeaders() as $name => $values) {
- * echo $name . ": " . implode(", ", $values);
- * }
- *
- * // Emit headers iteratively:
- * foreach ($message->getHeaders() as $name => $values) {
- * foreach ($values as $value) {
- * header(sprintf('%s: %s', $name, $value), false);
- * }
- * }
- *
- * While header names are not case-sensitive, getHeaders() will preserve the
- * exact case in which headers were originally specified.
- *
- * @return string[][] Returns an associative array of the message's headers. Each
- * key MUST be a header name, and each value MUST be an array of strings
- * for that header.
- */
- public function getHeaders();
-
- /**
- * Checks if a header exists by the given case-insensitive name.
- *
- * @param string $name Case-insensitive header field name.
- * @return bool Returns true if any header names match the given header
- * name using a case-insensitive string comparison. Returns false if
- * no matching header name is found in the message.
- */
- public function hasHeader($name);
-
- /**
- * Retrieves a message header value by the given case-insensitive name.
- *
- * This method returns an array of all the header values of the given
- * case-insensitive header name.
- *
- * If the header does not appear in the message, this method MUST return an
- * empty array.
- *
- * @param string $name Case-insensitive header field name.
- * @return string[] An array of string values as provided for the given
- * header. If the header does not appear in the message, this method MUST
- * return an empty array.
- */
- public function getHeader($name);
-
- /**
- * Retrieves a comma-separated string of the values for a single header.
- *
- * This method returns all of the header values of the given
- * case-insensitive header name as a string concatenated together using
- * a comma.
- *
- * NOTE: Not all header values may be appropriately represented using
- * comma concatenation. For such headers, use getHeader() instead
- * and supply your own delimiter when concatenating.
- *
- * If the header does not appear in the message, this method MUST return
- * an empty string.
- *
- * @param string $name Case-insensitive header field name.
- * @return string A string of values as provided for the given header
- * concatenated together using a comma. If the header does not appear in
- * the message, this method MUST return an empty string.
- */
- public function getHeaderLine($name);
-
- /**
- * Return an instance with the provided value replacing the specified header.
- *
- * While header names are case-insensitive, the casing of the header will
- * be preserved by this function, and returned from getHeaders().
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new and/or updated header and value.
- *
- * @param string $name Case-insensitive header field name.
- * @param string|string[] $value Header value(s).
- * @return static
- * @throws \InvalidArgumentException for invalid header names or values.
- */
- public function withHeader($name, $value);
-
- /**
- * Return an instance with the specified header appended with the given value.
- *
- * Existing values for the specified header will be maintained. The new
- * value(s) will be appended to the existing list. If the header did not
- * exist previously, it will be added.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new header and/or value.
- *
- * @param string $name Case-insensitive header field name to add.
- * @param string|string[] $value Header value(s).
- * @return static
- * @throws \InvalidArgumentException for invalid header names or values.
- */
- public function withAddedHeader($name, $value);
-
- /**
- * Return an instance without the specified header.
- *
- * Header resolution MUST be done without case-sensitivity.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that removes
- * the named header.
- *
- * @param string $name Case-insensitive header field name to remove.
- * @return static
- */
- public function withoutHeader($name);
-
- /**
- * Gets the body of the message.
- *
- * @return StreamInterface Returns the body as a stream.
- */
- public function getBody();
-
- /**
- * Return an instance with the specified message body.
- *
- * The body MUST be a StreamInterface object.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return a new instance that has the
- * new body stream.
- *
- * @param StreamInterface $body Body.
- * @return static
- * @throws \InvalidArgumentException When the body is not valid.
- */
- public function withBody(StreamInterface $body);
-}
diff --git a/server/vendor/psr/http-message/src/RequestInterface.php b/server/vendor/psr/http-message/src/RequestInterface.php
deleted file mode 100644
index a96d4fd..0000000
--- a/server/vendor/psr/http-message/src/RequestInterface.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-/**
- * Representation of an outgoing, client-side request.
- *
- * Per the HTTP specification, this interface includes properties for
- * each of the following:
- *
- * - Protocol version
- * - HTTP method
- * - URI
- * - Headers
- * - Message body
- *
- * During construction, implementations MUST attempt to set the Host header from
- * a provided URI if no Host header is provided.
- *
- * Requests are considered immutable; all methods that might change state MUST
- * be implemented such that they retain the internal state of the current
- * message and return an instance that contains the changed state.
- */
-interface RequestInterface extends MessageInterface
-{
- /**
- * Retrieves the message's request target.
- *
- * Retrieves the message's request-target either as it will appear (for
- * clients), as it appeared at request (for servers), or as it was
- * specified for the instance (see withRequestTarget()).
- *
- * In most cases, this will be the origin-form of the composed URI,
- * unless a value was provided to the concrete implementation (see
- * withRequestTarget() below).
- *
- * If no URI is available, and no request-target has been specifically
- * provided, this method MUST return the string "/".
- *
- * @return string
- */
- public function getRequestTarget();
-
- /**
- * Return an instance with the specific request-target.
- *
- * If the request needs a non-origin-form request-target — e.g., for
- * specifying an absolute-form, authority-form, or asterisk-form —
- * this method may be used to create an instance with the specified
- * request-target, verbatim.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * changed request target.
- *
- * @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various
- * request-target forms allowed in request messages)
- * @param mixed $requestTarget
- * @return static
- */
- public function withRequestTarget($requestTarget);
-
- /**
- * Retrieves the HTTP method of the request.
- *
- * @return string Returns the request method.
- */
- public function getMethod();
-
- /**
- * Return an instance with the provided HTTP method.
- *
- * While HTTP method names are typically all uppercase characters, HTTP
- * method names are case-sensitive and thus implementations SHOULD NOT
- * modify the given string.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * changed request method.
- *
- * @param string $method Case-sensitive method.
- * @return static
- * @throws \InvalidArgumentException for invalid HTTP methods.
- */
- public function withMethod($method);
-
- /**
- * Retrieves the URI instance.
- *
- * This method MUST return a UriInterface instance.
- *
- * @link http://tools.ietf.org/html/rfc3986#section-4.3
- * @return UriInterface Returns a UriInterface instance
- * representing the URI of the request.
- */
- public function getUri();
-
- /**
- * Returns an instance with the provided URI.
- *
- * This method MUST update the Host header of the returned request by
- * default if the URI contains a host component. If the URI does not
- * contain a host component, any pre-existing Host header MUST be carried
- * over to the returned request.
- *
- * You can opt-in to preserving the original state of the Host header by
- * setting `$preserveHost` to `true`. When `$preserveHost` is set to
- * `true`, this method interacts with the Host header in the following ways:
- *
- * - If the Host header is missing or empty, and the new URI contains
- * a host component, this method MUST update the Host header in the returned
- * request.
- * - If the Host header is missing or empty, and the new URI does not contain a
- * host component, this method MUST NOT update the Host header in the returned
- * request.
- * - If a Host header is present and non-empty, this method MUST NOT update
- * the Host header in the returned request.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new UriInterface instance.
- *
- * @link http://tools.ietf.org/html/rfc3986#section-4.3
- * @param UriInterface $uri New request URI to use.
- * @param bool $preserveHost Preserve the original state of the Host header.
- * @return static
- */
- public function withUri(UriInterface $uri, $preserveHost = false);
-}
diff --git a/server/vendor/psr/http-message/src/ResponseInterface.php b/server/vendor/psr/http-message/src/ResponseInterface.php
deleted file mode 100644
index c306514..0000000
--- a/server/vendor/psr/http-message/src/ResponseInterface.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-/**
- * Representation of an outgoing, server-side response.
- *
- * Per the HTTP specification, this interface includes properties for
- * each of the following:
- *
- * - Protocol version
- * - Status code and reason phrase
- * - Headers
- * - Message body
- *
- * Responses are considered immutable; all methods that might change state MUST
- * be implemented such that they retain the internal state of the current
- * message and return an instance that contains the changed state.
- */
-interface ResponseInterface extends MessageInterface
-{
- /**
- * Gets the response status code.
- *
- * The status code is a 3-digit integer result code of the server's attempt
- * to understand and satisfy the request.
- *
- * @return int Status code.
- */
- public function getStatusCode();
-
- /**
- * Return an instance with the specified status code and, optionally, reason phrase.
- *
- * If no reason phrase is specified, implementations MAY choose to default
- * to the RFC 7231 or IANA recommended reason phrase for the response's
- * status code.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated status and reason phrase.
- *
- * @link http://tools.ietf.org/html/rfc7231#section-6
- * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
- * @param int $code The 3-digit integer result code to set.
- * @param string $reasonPhrase The reason phrase to use with the
- * provided status code; if none is provided, implementations MAY
- * use the defaults as suggested in the HTTP specification.
- * @return static
- * @throws \InvalidArgumentException For invalid status code arguments.
- */
- public function withStatus($code, $reasonPhrase = '');
-
- /**
- * Gets the response reason phrase associated with the status code.
- *
- * Because a reason phrase is not a required element in a response
- * status line, the reason phrase value MAY be null. Implementations MAY
- * choose to return the default RFC 7231 recommended reason phrase (or those
- * listed in the IANA HTTP Status Code Registry) for the response's
- * status code.
- *
- * @link http://tools.ietf.org/html/rfc7231#section-6
- * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
- * @return string Reason phrase; must return an empty string if none present.
- */
- public function getReasonPhrase();
-}
diff --git a/server/vendor/psr/http-message/src/ServerRequestInterface.php b/server/vendor/psr/http-message/src/ServerRequestInterface.php
deleted file mode 100644
index 0251234..0000000
--- a/server/vendor/psr/http-message/src/ServerRequestInterface.php
+++ /dev/null
@@ -1,261 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-/**
- * Representation of an incoming, server-side HTTP request.
- *
- * Per the HTTP specification, this interface includes properties for
- * each of the following:
- *
- * - Protocol version
- * - HTTP method
- * - URI
- * - Headers
- * - Message body
- *
- * Additionally, it encapsulates all data as it has arrived to the
- * application from the CGI and/or PHP environment, including:
- *
- * - The values represented in $_SERVER.
- * - Any cookies provided (generally via $_COOKIE)
- * - Query string arguments (generally via $_GET, or as parsed via parse_str())
- * - Upload files, if any (as represented by $_FILES)
- * - Deserialized body parameters (generally from $_POST)
- *
- * $_SERVER values MUST be treated as immutable, as they represent application
- * state at the time of request; as such, no methods are provided to allow
- * modification of those values. The other values provide such methods, as they
- * can be restored from $_SERVER or the request body, and may need treatment
- * during the application (e.g., body parameters may be deserialized based on
- * content type).
- *
- * Additionally, this interface recognizes the utility of introspecting a
- * request to derive and match additional parameters (e.g., via URI path
- * matching, decrypting cookie values, deserializing non-form-encoded body
- * content, matching authorization headers to users, etc). These parameters
- * are stored in an "attributes" property.
- *
- * Requests are considered immutable; all methods that might change state MUST
- * be implemented such that they retain the internal state of the current
- * message and return an instance that contains the changed state.
- */
-interface ServerRequestInterface extends RequestInterface
-{
- /**
- * Retrieve server parameters.
- *
- * Retrieves data related to the incoming request environment,
- * typically derived from PHP's $_SERVER superglobal. The data IS NOT
- * REQUIRED to originate from $_SERVER.
- *
- * @return array
- */
- public function getServerParams();
-
- /**
- * Retrieve cookies.
- *
- * Retrieves cookies sent by the client to the server.
- *
- * The data MUST be compatible with the structure of the $_COOKIE
- * superglobal.
- *
- * @return array
- */
- public function getCookieParams();
-
- /**
- * Return an instance with the specified cookies.
- *
- * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST
- * be compatible with the structure of $_COOKIE. Typically, this data will
- * be injected at instantiation.
- *
- * This method MUST NOT update the related Cookie header of the request
- * instance, nor related values in the server params.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated cookie values.
- *
- * @param array $cookies Array of key/value pairs representing cookies.
- * @return static
- */
- public function withCookieParams(array $cookies);
-
- /**
- * Retrieve query string arguments.
- *
- * Retrieves the deserialized query string arguments, if any.
- *
- * Note: the query params might not be in sync with the URI or server
- * params. If you need to ensure you are only getting the original
- * values, you may need to parse the query string from `getUri()->getQuery()`
- * or from the `QUERY_STRING` server param.
- *
- * @return array
- */
- public function getQueryParams();
-
- /**
- * Return an instance with the specified query string arguments.
- *
- * These values SHOULD remain immutable over the course of the incoming
- * request. They MAY be injected during instantiation, such as from PHP's
- * $_GET superglobal, or MAY be derived from some other value such as the
- * URI. In cases where the arguments are parsed from the URI, the data
- * MUST be compatible with what PHP's parse_str() would return for
- * purposes of how duplicate query parameters are handled, and how nested
- * sets are handled.
- *
- * Setting query string arguments MUST NOT change the URI stored by the
- * request, nor the values in the server params.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated query string arguments.
- *
- * @param array $query Array of query string arguments, typically from
- * $_GET.
- * @return static
- */
- public function withQueryParams(array $query);
-
- /**
- * Retrieve normalized file upload data.
- *
- * This method returns upload metadata in a normalized tree, with each leaf
- * an instance of Psr\Http\Message\UploadedFileInterface.
- *
- * These values MAY be prepared from $_FILES or the message body during
- * instantiation, or MAY be injected via withUploadedFiles().
- *
- * @return array An array tree of UploadedFileInterface instances; an empty
- * array MUST be returned if no data is present.
- */
- public function getUploadedFiles();
-
- /**
- * Create a new instance with the specified uploaded files.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated body parameters.
- *
- * @param array $uploadedFiles An array tree of UploadedFileInterface instances.
- * @return static
- * @throws \InvalidArgumentException if an invalid structure is provided.
- */
- public function withUploadedFiles(array $uploadedFiles);
-
- /**
- * Retrieve any parameters provided in the request body.
- *
- * If the request Content-Type is either application/x-www-form-urlencoded
- * or multipart/form-data, and the request method is POST, this method MUST
- * return the contents of $_POST.
- *
- * Otherwise, this method may return any results of deserializing
- * the request body content; as parsing returns structured content, the
- * potential types MUST be arrays or objects only. A null value indicates
- * the absence of body content.
- *
- * @return null|array|object The deserialized body parameters, if any.
- * These will typically be an array or object.
- */
- public function getParsedBody();
-
- /**
- * Return an instance with the specified body parameters.
- *
- * These MAY be injected during instantiation.
- *
- * If the request Content-Type is either application/x-www-form-urlencoded
- * or multipart/form-data, and the request method is POST, use this method
- * ONLY to inject the contents of $_POST.
- *
- * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
- * deserializing the request body content. Deserialization/parsing returns
- * structured data, and, as such, this method ONLY accepts arrays or objects,
- * or a null value if nothing was available to parse.
- *
- * As an example, if content negotiation determines that the request data
- * is a JSON payload, this method could be used to create a request
- * instance with the deserialized parameters.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated body parameters.
- *
- * @param null|array|object $data The deserialized body data. This will
- * typically be in an array or object.
- * @return static
- * @throws \InvalidArgumentException if an unsupported argument type is
- * provided.
- */
- public function withParsedBody($data);
-
- /**
- * Retrieve attributes derived from the request.
- *
- * The request "attributes" may be used to allow injection of any
- * parameters derived from the request: e.g., the results of path
- * match operations; the results of decrypting cookies; the results of
- * deserializing non-form-encoded message bodies; etc. Attributes
- * will be application and request specific, and CAN be mutable.
- *
- * @return array Attributes derived from the request.
- */
- public function getAttributes();
-
- /**
- * Retrieve a single derived request attribute.
- *
- * Retrieves a single derived request attribute as described in
- * getAttributes(). If the attribute has not been previously set, returns
- * the default value as provided.
- *
- * This method obviates the need for a hasAttribute() method, as it allows
- * specifying a default value to return if the attribute is not found.
- *
- * @see getAttributes()
- * @param string $name The attribute name.
- * @param mixed $default Default value to return if the attribute does not exist.
- * @return mixed
- */
- public function getAttribute($name, $default = null);
-
- /**
- * Return an instance with the specified derived request attribute.
- *
- * This method allows setting a single derived request attribute as
- * described in getAttributes().
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated attribute.
- *
- * @see getAttributes()
- * @param string $name The attribute name.
- * @param mixed $value The value of the attribute.
- * @return static
- */
- public function withAttribute($name, $value);
-
- /**
- * Return an instance that removes the specified derived request attribute.
- *
- * This method allows removing a single derived request attribute as
- * described in getAttributes().
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that removes
- * the attribute.
- *
- * @see getAttributes()
- * @param string $name The attribute name.
- * @return static
- */
- public function withoutAttribute($name);
-}
diff --git a/server/vendor/psr/http-message/src/StreamInterface.php b/server/vendor/psr/http-message/src/StreamInterface.php
deleted file mode 100644
index f68f391..0000000
--- a/server/vendor/psr/http-message/src/StreamInterface.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-/**
- * Describes a data stream.
- *
- * Typically, an instance will wrap a PHP stream; this interface provides
- * a wrapper around the most common operations, including serialization of
- * the entire stream to a string.
- */
-interface StreamInterface
-{
- /**
- * Reads all data from the stream into a string, from the beginning to end.
- *
- * This method MUST attempt to seek to the beginning of the stream before
- * reading data and read the stream until the end is reached.
- *
- * Warning: This could attempt to load a large amount of data into memory.
- *
- * This method MUST NOT raise an exception in order to conform with PHP's
- * string casting operations.
- *
- * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring
- * @return string
- */
- public function __toString();
-
- /**
- * Closes the stream and any underlying resources.
- *
- * @return void
- */
- public function close();
-
- /**
- * Separates any underlying resources from the stream.
- *
- * After the stream has been detached, the stream is in an unusable state.
- *
- * @return resource|null Underlying PHP stream, if any
- */
- public function detach();
-
- /**
- * Get the size of the stream if known.
- *
- * @return int|null Returns the size in bytes if known, or null if unknown.
- */
- public function getSize();
-
- /**
- * Returns the current position of the file read/write pointer
- *
- * @return int Position of the file pointer
- * @throws \RuntimeException on error.
- */
- public function tell();
-
- /**
- * Returns true if the stream is at the end of the stream.
- *
- * @return bool
- */
- public function eof();
-
- /**
- * Returns whether or not the stream is seekable.
- *
- * @return bool
- */
- public function isSeekable();
-
- /**
- * Seek to a position in the stream.
- *
- * @link http://www.php.net/manual/en/function.fseek.php
- * @param int $offset Stream offset
- * @param int $whence Specifies how the cursor position will be calculated
- * based on the seek offset. Valid values are identical to the built-in
- * PHP $whence values for `fseek()`. SEEK_SET: Set position equal to
- * offset bytes SEEK_CUR: Set position to current location plus offset
- * SEEK_END: Set position to end-of-stream plus offset.
- * @throws \RuntimeException on failure.
- */
- public function seek($offset, $whence = SEEK_SET);
-
- /**
- * Seek to the beginning of the stream.
- *
- * If the stream is not seekable, this method will raise an exception;
- * otherwise, it will perform a seek(0).
- *
- * @see seek()
- * @link http://www.php.net/manual/en/function.fseek.php
- * @throws \RuntimeException on failure.
- */
- public function rewind();
-
- /**
- * Returns whether or not the stream is writable.
- *
- * @return bool
- */
- public function isWritable();
-
- /**
- * Write data to the stream.
- *
- * @param string $string The string that is to be written.
- * @return int Returns the number of bytes written to the stream.
- * @throws \RuntimeException on failure.
- */
- public function write($string);
-
- /**
- * Returns whether or not the stream is readable.
- *
- * @return bool
- */
- public function isReadable();
-
- /**
- * Read data from the stream.
- *
- * @param int $length Read up to $length bytes from the object and return
- * them. Fewer than $length bytes may be returned if underlying stream
- * call returns fewer bytes.
- * @return string Returns the data read from the stream, or an empty string
- * if no bytes are available.
- * @throws \RuntimeException if an error occurs.
- */
- public function read($length);
-
- /**
- * Returns the remaining contents in a string
- *
- * @return string
- * @throws \RuntimeException if unable to read or an error occurs while
- * reading.
- */
- public function getContents();
-
- /**
- * Get stream metadata as an associative array or retrieve a specific key.
- *
- * The keys returned are identical to the keys returned from PHP's
- * stream_get_meta_data() function.
- *
- * @link http://php.net/manual/en/function.stream-get-meta-data.php
- * @param string $key Specific metadata to retrieve.
- * @return array|mixed|null Returns an associative array if no key is
- * provided. Returns a specific key value if a key is provided and the
- * value is found, or null if the key is not found.
- */
- public function getMetadata($key = null);
-}
diff --git a/server/vendor/psr/http-message/src/UploadedFileInterface.php b/server/vendor/psr/http-message/src/UploadedFileInterface.php
deleted file mode 100644
index f8a6901..0000000
--- a/server/vendor/psr/http-message/src/UploadedFileInterface.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-
-namespace Psr\Http\Message;
-
-/**
- * Value object representing a file uploaded through an HTTP request.
- *
- * Instances of this interface are considered immutable; all methods that
- * might change state MUST be implemented such that they retain the internal
- * state of the current instance and return an instance that contains the
- * changed state.
- */
-interface UploadedFileInterface
-{
- /**
- * Retrieve a stream representing the uploaded file.
- *
- * This method MUST return a StreamInterface instance, representing the
- * uploaded file. The purpose of this method is to allow utilizing native PHP
- * stream functionality to manipulate the file upload, such as
- * stream_copy_to_stream() (though the result will need to be decorated in a
- * native PHP stream wrapper to work with such functions).
- *
- * If the moveTo() method has been called previously, this method MUST raise
- * an exception.
- *
- * @return StreamInterface Stream representation of the uploaded file.
- * @throws \RuntimeException in cases when no stream is available or can be
- * created.
- */
- public function getStream();
-
- /**
- * Move the uploaded file to a new location.
- *
- * Use this method as an alternative to move_uploaded_file(). This method is
- * guaranteed to work in both SAPI and non-SAPI environments.
- * Implementations must determine which environment they are in, and use the
- * appropriate method (move_uploaded_file(), rename(), or a stream
- * operation) to perform the operation.
- *
- * $targetPath may be an absolute path, or a relative path. If it is a
- * relative path, resolution should be the same as used by PHP's rename()
- * function.
- *
- * The original file or stream MUST be removed on completion.
- *
- * If this method is called more than once, any subsequent calls MUST raise
- * an exception.
- *
- * When used in an SAPI environment where $_FILES is populated, when writing
- * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be
- * used to ensure permissions and upload status are verified correctly.
- *
- * If you wish to move to a stream, use getStream(), as SAPI operations
- * cannot guarantee writing to stream destinations.
- *
- * @see http://php.net/is_uploaded_file
- * @see http://php.net/move_uploaded_file
- * @param string $targetPath Path to which to move the uploaded file.
- * @throws \InvalidArgumentException if the $targetPath specified is invalid.
- * @throws \RuntimeException on any error during the move operation, or on
- * the second or subsequent call to the method.
- */
- public function moveTo($targetPath);
-
- /**
- * Retrieve the file size.
- *
- * Implementations SHOULD return the value stored in the "size" key of
- * the file in the $_FILES array if available, as PHP calculates this based
- * on the actual size transmitted.
- *
- * @return int|null The file size in bytes or null if unknown.
- */
- public function getSize();
-
- /**
- * Retrieve the error associated with the uploaded file.
- *
- * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.
- *
- * If the file was uploaded successfully, this method MUST return
- * UPLOAD_ERR_OK.
- *
- * Implementations SHOULD return the value stored in the "error" key of
- * the file in the $_FILES array.
- *
- * @see http://php.net/manual/en/features.file-upload.errors.php
- * @return int One of PHP's UPLOAD_ERR_XXX constants.
- */
- public function getError();
-
- /**
- * Retrieve the filename sent by the client.
- *
- * Do not trust the value returned by this method. A client could send
- * a malicious filename with the intention to corrupt or hack your
- * application.
- *
- * Implementations SHOULD return the value stored in the "name" key of
- * the file in the $_FILES array.
- *
- * @return string|null The filename sent by the client or null if none
- * was provided.
- */
- public function getClientFilename();
-
- /**
- * Retrieve the media type sent by the client.
- *
- * Do not trust the value returned by this method. A client could send
- * a malicious media type with the intention to corrupt or hack your
- * application.
- *
- * Implementations SHOULD return the value stored in the "type" key of
- * the file in the $_FILES array.
- *
- * @return string|null The media type sent by the client or null if none
- * was provided.
- */
- public function getClientMediaType();
-}
diff --git a/server/vendor/psr/http-message/src/UriInterface.php b/server/vendor/psr/http-message/src/UriInterface.php
deleted file mode 100644
index 9d7ab9e..0000000
--- a/server/vendor/psr/http-message/src/UriInterface.php
+++ /dev/null
@@ -1,323 +0,0 @@
-<?php
-namespace Psr\Http\Message;
-
-/**
- * Value object representing a URI.
- *
- * This interface is meant to represent URIs according to RFC 3986 and to
- * provide methods for most common operations. Additional functionality for
- * working with URIs can be provided on top of the interface or externally.
- * Its primary use is for HTTP requests, but may also be used in other
- * contexts.
- *
- * Instances of this interface are considered immutable; all methods that
- * might change state MUST be implemented such that they retain the internal
- * state of the current instance and return an instance that contains the
- * changed state.
- *
- * Typically the Host header will be also be present in the request message.
- * For server-side requests, the scheme will typically be discoverable in the
- * server parameters.
- *
- * @link http://tools.ietf.org/html/rfc3986 (the URI specification)
- */
-interface UriInterface
-{
- /**
- * Retrieve the scheme component of the URI.
- *
- * If no scheme is present, this method MUST return an empty string.
- *
- * The value returned MUST be normalized to lowercase, per RFC 3986
- * Section 3.1.
- *
- * The trailing ":" character is not part of the scheme and MUST NOT be
- * added.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-3.1
- * @return string The URI scheme.
- */
- public function getScheme();
-
- /**
- * Retrieve the authority component of the URI.
- *
- * If no authority information is present, this method MUST return an empty
- * string.
- *
- * The authority syntax of the URI is:
- *
- * <pre>
- * [user-info@]host[:port]
- * </pre>
- *
- * If the port component is not set or is the standard port for the current
- * scheme, it SHOULD NOT be included.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-3.2
- * @return string The URI authority, in "[user-info@]host[:port]" format.
- */
- public function getAuthority();
-
- /**
- * Retrieve the user information component of the URI.
- *
- * If no user information is present, this method MUST return an empty
- * string.
- *
- * If a user is present in the URI, this will return that value;
- * additionally, if the password is also present, it will be appended to the
- * user value, with a colon (":") separating the values.
- *
- * The trailing "@" character is not part of the user information and MUST
- * NOT be added.
- *
- * @return string The URI user information, in "username[:password]" format.
- */
- public function getUserInfo();
-
- /**
- * Retrieve the host component of the URI.
- *
- * If no host is present, this method MUST return an empty string.
- *
- * The value returned MUST be normalized to lowercase, per RFC 3986
- * Section 3.2.2.
- *
- * @see http://tools.ietf.org/html/rfc3986#section-3.2.2
- * @return string The URI host.
- */
- public function getHost();
-
- /**
- * Retrieve the port component of the URI.
- *
- * If a port is present, and it is non-standard for the current scheme,
- * this method MUST return it as an integer. If the port is the standard port
- * used with the current scheme, this method SHOULD return null.
- *
- * If no port is present, and no scheme is present, this method MUST return
- * a null value.
- *
- * If no port is present, but a scheme is present, this method MAY return
- * the standard port for that scheme, but SHOULD return null.
- *
- * @return null|int The URI port.
- */
- public function getPort();
-
- /**
- * Retrieve the path component of the URI.
- *
- * The path can either be empty or absolute (starting with a slash) or
- * rootless (not starting with a slash). Implementations MUST support all
- * three syntaxes.
- *
- * Normally, the empty path "" and absolute path "/" are considered equal as
- * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically
- * do this normalization because in contexts with a trimmed base path, e.g.
- * the front controller, this difference becomes significant. It's the task
- * of the user to handle both "" and "/".
- *
- * The value returned MUST be percent-encoded, but MUST NOT double-encode
- * any characters. To determine what characters to encode, please refer to
- * RFC 3986, Sections 2 and 3.3.
- *
- * As an example, if the value should include a slash ("/") not intended as
- * delimiter between path segments, that value MUST be passed in encoded
- * form (e.g., "%2F") to the instance.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-2
- * @see https://tools.ietf.org/html/rfc3986#section-3.3
- * @return string The URI path.
- */
- public function getPath();
-
- /**
- * Retrieve the query string of the URI.
- *
- * If no query string is present, this method MUST return an empty string.
- *
- * The leading "?" character is not part of the query and MUST NOT be
- * added.
- *
- * The value returned MUST be percent-encoded, but MUST NOT double-encode
- * any characters. To determine what characters to encode, please refer to
- * RFC 3986, Sections 2 and 3.4.
- *
- * As an example, if a value in a key/value pair of the query string should
- * include an ampersand ("&") not intended as a delimiter between values,
- * that value MUST be passed in encoded form (e.g., "%26") to the instance.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-2
- * @see https://tools.ietf.org/html/rfc3986#section-3.4
- * @return string The URI query string.
- */
- public function getQuery();
-
- /**
- * Retrieve the fragment component of the URI.
- *
- * If no fragment is present, this method MUST return an empty string.
- *
- * The leading "#" character is not part of the fragment and MUST NOT be
- * added.
- *
- * The value returned MUST be percent-encoded, but MUST NOT double-encode
- * any characters. To determine what characters to encode, please refer to
- * RFC 3986, Sections 2 and 3.5.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-2
- * @see https://tools.ietf.org/html/rfc3986#section-3.5
- * @return string The URI fragment.
- */
- public function getFragment();
-
- /**
- * Return an instance with the specified scheme.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified scheme.
- *
- * Implementations MUST support the schemes "http" and "https" case
- * insensitively, and MAY accommodate other schemes if required.
- *
- * An empty scheme is equivalent to removing the scheme.
- *
- * @param string $scheme The scheme to use with the new instance.
- * @return static A new instance with the specified scheme.
- * @throws \InvalidArgumentException for invalid or unsupported schemes.
- */
- public function withScheme($scheme);
-
- /**
- * Return an instance with the specified user information.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified user information.
- *
- * Password is optional, but the user information MUST include the
- * user; an empty string for the user is equivalent to removing user
- * information.
- *
- * @param string $user The user name to use for authority.
- * @param null|string $password The password associated with $user.
- * @return static A new instance with the specified user information.
- */
- public function withUserInfo($user, $password = null);
-
- /**
- * Return an instance with the specified host.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified host.
- *
- * An empty host value is equivalent to removing the host.
- *
- * @param string $host The hostname to use with the new instance.
- * @return static A new instance with the specified host.
- * @throws \InvalidArgumentException for invalid hostnames.
- */
- public function withHost($host);
-
- /**
- * Return an instance with the specified port.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified port.
- *
- * Implementations MUST raise an exception for ports outside the
- * established TCP and UDP port ranges.
- *
- * A null value provided for the port is equivalent to removing the port
- * information.
- *
- * @param null|int $port The port to use with the new instance; a null value
- * removes the port information.
- * @return static A new instance with the specified port.
- * @throws \InvalidArgumentException for invalid ports.
- */
- public function withPort($port);
-
- /**
- * Return an instance with the specified path.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified path.
- *
- * The path can either be empty or absolute (starting with a slash) or
- * rootless (not starting with a slash). Implementations MUST support all
- * three syntaxes.
- *
- * If the path is intended to be domain-relative rather than path relative then
- * it must begin with a slash ("/"). Paths not starting with a slash ("/")
- * are assumed to be relative to some base path known to the application or
- * consumer.
- *
- * Users can provide both encoded and decoded path characters.
- * Implementations ensure the correct encoding as outlined in getPath().
- *
- * @param string $path The path to use with the new instance.
- * @return static A new instance with the specified path.
- * @throws \InvalidArgumentException for invalid paths.
- */
- public function withPath($path);
-
- /**
- * Return an instance with the specified query string.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified query string.
- *
- * Users can provide both encoded and decoded query characters.
- * Implementations ensure the correct encoding as outlined in getQuery().
- *
- * An empty query string value is equivalent to removing the query string.
- *
- * @param string $query The query string to use with the new instance.
- * @return static A new instance with the specified query string.
- * @throws \InvalidArgumentException for invalid query strings.
- */
- public function withQuery($query);
-
- /**
- * Return an instance with the specified URI fragment.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified URI fragment.
- *
- * Users can provide both encoded and decoded fragment characters.
- * Implementations ensure the correct encoding as outlined in getFragment().
- *
- * An empty fragment value is equivalent to removing the fragment.
- *
- * @param string $fragment The fragment to use with the new instance.
- * @return static A new instance with the specified fragment.
- */
- public function withFragment($fragment);
-
- /**
- * Return the string representation as a URI reference.
- *
- * Depending on which components of the URI are present, the resulting
- * string is either a full URI or relative reference according to RFC 3986,
- * Section 4.1. The method concatenates the various components of the URI,
- * using the appropriate delimiters:
- *
- * - If a scheme is present, it MUST be suffixed by ":".
- * - If an authority is present, it MUST be prefixed by "//".
- * - The path can be concatenated without delimiters. But there are two
- * cases where the path has to be adjusted to make the URI reference
- * valid as PHP does not allow to throw an exception in __toString():
- * - If the path is rootless and an authority is present, the path MUST
- * be prefixed by "/".
- * - If the path is starting with more than one "/" and no authority is
- * present, the starting slashes MUST be reduced to one.
- * - If a query is present, it MUST be prefixed by "?".
- * - If a fragment is present, it MUST be prefixed by "#".
- *
- * @see http://tools.ietf.org/html/rfc3986#section-4.1
- * @return string
- */
- public function __toString();
-}
diff --git a/server/vendor/slim/slim/LICENSE.md b/server/vendor/slim/slim/LICENSE.md
deleted file mode 100644
index 682c21d..0000000
--- a/server/vendor/slim/slim/LICENSE.md
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2011-2017 Josh Lockhart
-
-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/server/vendor/slim/slim/Slim/App.php b/server/vendor/slim/slim/Slim/App.php
deleted file mode 100644
index 587e671..0000000
--- a/server/vendor/slim/slim/Slim/App.php
+++ /dev/null
@@ -1,677 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use Exception;
-use Slim\Exception\InvalidMethodException;
-use Slim\Http\Response;
-use Throwable;
-use Closure;
-use InvalidArgumentException;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Container\ContainerInterface;
-use FastRoute\Dispatcher;
-use Slim\Exception\SlimException;
-use Slim\Exception\MethodNotAllowedException;
-use Slim\Exception\NotFoundException;
-use Slim\Http\Uri;
-use Slim\Http\Headers;
-use Slim\Http\Body;
-use Slim\Http\Request;
-use Slim\Interfaces\Http\EnvironmentInterface;
-use Slim\Interfaces\RouteGroupInterface;
-use Slim\Interfaces\RouteInterface;
-use Slim\Interfaces\RouterInterface;
-
-/**
- * App
- *
- * This is the primary class with which you instantiate,
- * configure, and run a Slim Framework application.
- * The \Slim\App class also accepts Slim Framework middleware.
- *
- * @property-read callable $errorHandler
- * @property-read callable $phpErrorHandler
- * @property-read callable $notFoundHandler function($request, $response)
- * @property-read callable $notAllowedHandler function($request, $response, $allowedHttpMethods)
- */
-class App
-{
- use MiddlewareAwareTrait;
-
- /**
- * Current version
- *
- * @var string
- */
- const VERSION = '3.8.1';
-
- /**
- * Container
- *
- * @var ContainerInterface
- */
- private $container;
-
- /********************************************************************************
- * Constructor
- *******************************************************************************/
-
- /**
- * Create new application
- *
- * @param ContainerInterface|array $container Either a ContainerInterface or an associative array of app settings
- * @throws InvalidArgumentException when no container is provided that implements ContainerInterface
- */
- public function __construct($container = [])
- {
- if (is_array($container)) {
- $container = new Container($container);
- }
- if (!$container instanceof ContainerInterface) {
- throw new InvalidArgumentException('Expected a ContainerInterface');
- }
- $this->container = $container;
- }
-
- /**
- * Enable access to the DI container by consumers of $app
- *
- * @return ContainerInterface
- */
- public function getContainer()
- {
- return $this->container;
- }
-
- /**
- * Add middleware
- *
- * This method prepends new middleware to the app's middleware stack.
- *
- * @param callable|string $callable The callback routine
- *
- * @return static
- */
- public function add($callable)
- {
- return $this->addMiddleware(new DeferredCallable($callable, $this->container));
- }
-
- /**
- * Calling a non-existant method on App checks to see if there's an item
- * in the container that is callable and if so, calls it.
- *
- * @param string $method
- * @param array $args
- * @return mixed
- */
- public function __call($method, $args)
- {
- if ($this->container->has($method)) {
- $obj = $this->container->get($method);
- if (is_callable($obj)) {
- return call_user_func_array($obj, $args);
- }
- }
-
- throw new \BadMethodCallException("Method $method is not a valid method");
- }
-
- /********************************************************************************
- * Router proxy methods
- *******************************************************************************/
-
- /**
- * Add GET route
- *
- * @param string $pattern The route URI pattern
- * @param callable|string $callable The route callback routine
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function get($pattern, $callable)
- {
- return $this->map(['GET'], $pattern, $callable);
- }
-
- /**
- * Add POST route
- *
- * @param string $pattern The route URI pattern
- * @param callable|string $callable The route callback routine
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function post($pattern, $callable)
- {
- return $this->map(['POST'], $pattern, $callable);
- }
-
- /**
- * Add PUT route
- *
- * @param string $pattern The route URI pattern
- * @param callable|string $callable The route callback routine
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function put($pattern, $callable)
- {
- return $this->map(['PUT'], $pattern, $callable);
- }
-
- /**
- * Add PATCH route
- *
- * @param string $pattern The route URI pattern
- * @param callable|string $callable The route callback routine
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function patch($pattern, $callable)
- {
- return $this->map(['PATCH'], $pattern, $callable);
- }
-
- /**
- * Add DELETE route
- *
- * @param string $pattern The route URI pattern
- * @param callable|string $callable The route callback routine
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function delete($pattern, $callable)
- {
- return $this->map(['DELETE'], $pattern, $callable);
- }
-
- /**
- * Add OPTIONS route
- *
- * @param string $pattern The route URI pattern
- * @param callable|string $callable The route callback routine
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function options($pattern, $callable)
- {
- return $this->map(['OPTIONS'], $pattern, $callable);
- }
-
- /**
- * Add route for any HTTP method
- *
- * @param string $pattern The route URI pattern
- * @param callable|string $callable The route callback routine
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function any($pattern, $callable)
- {
- return $this->map(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], $pattern, $callable);
- }
-
- /**
- * 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
- *
- * @return RouteInterface
- */
- public function map(array $methods, $pattern, $callable)
- {
- if ($callable instanceof Closure) {
- $callable = $callable->bindTo($this->container);
- }
-
- $route = $this->container->get('router')->map($methods, $pattern, $callable);
- if (is_callable([$route, 'setContainer'])) {
- $route->setContainer($this->container);
- }
-
- if (is_callable([$route, 'setOutputBuffering'])) {
- $route->setOutputBuffering($this->container->get('settings')['outputBuffering']);
- }
-
- return $route;
- }
-
- /**
- * 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 $pattern
- * @param callable $callable
- *
- * @return RouteGroupInterface
- */
- public function group($pattern, $callable)
- {
- /** @var RouteGroup $group */
- $group = $this->container->get('router')->pushGroup($pattern, $callable);
- $group->setContainer($this->container);
- $group($this);
- $this->container->get('router')->popGroup();
- return $group;
- }
-
- /********************************************************************************
- * Runner
- *******************************************************************************/
-
- /**
- * Run application
- *
- * This method traverses the application middleware stack and then sends the
- * resultant Response object to the HTTP client.
- *
- * @param bool|false $silent
- * @return ResponseInterface
- *
- * @throws Exception
- * @throws MethodNotAllowedException
- * @throws NotFoundException
- */
- public function run($silent = false)
- {
- $response = $this->container->get('response');
-
- try {
- $response = $this->process($this->container->get('request'), $response);
- } catch (InvalidMethodException $e) {
- $response = $this->processInvalidMethod($e->getRequest(), $response);
- }
-
- if (!$silent) {
- $this->respond($response);
- }
-
- return $response;
- }
-
- /**
- * Pull route info for a request with a bad method to decide whether to
- * return a not-found error (default) or a bad-method error, then run
- * the handler for that error, returning the resulting response.
- *
- * Used for cases where an incoming request has an unrecognized method,
- * rather than throwing an exception and not catching it all the way up.
- *
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- * @return ResponseInterface
- */
- protected function processInvalidMethod(ServerRequestInterface $request, ResponseInterface $response)
- {
- $router = $this->container->get('router');
- if (is_callable([$request->getUri(), 'getBasePath']) && is_callable([$router, 'setBasePath'])) {
- $router->setBasePath($request->getUri()->getBasePath());
- }
-
- $request = $this->dispatchRouterAndPrepareRoute($request, $router);
- $routeInfo = $request->getAttribute('routeInfo', [RouterInterface::DISPATCH_STATUS => Dispatcher::NOT_FOUND]);
-
- if ($routeInfo[RouterInterface::DISPATCH_STATUS] === Dispatcher::METHOD_NOT_ALLOWED) {
- return $this->handleException(
- new MethodNotAllowedException($request, $response, $routeInfo[RouterInterface::ALLOWED_METHODS]),
- $request,
- $response
- );
- }
-
- return $this->handleException(new NotFoundException($request, $response), $request, $response);
- }
-
- /**
- * Process a request
- *
- * This method traverses the application middleware stack and then returns the
- * resultant Response object.
- *
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- * @return ResponseInterface
- *
- * @throws Exception
- * @throws MethodNotAllowedException
- * @throws NotFoundException
- */
- public function process(ServerRequestInterface $request, ResponseInterface $response)
- {
- // Ensure basePath is set
- $router = $this->container->get('router');
- if (is_callable([$request->getUri(), 'getBasePath']) && is_callable([$router, 'setBasePath'])) {
- $router->setBasePath($request->getUri()->getBasePath());
- }
-
- // Dispatch the Router first if the setting for this is on
- if ($this->container->get('settings')['determineRouteBeforeAppMiddleware'] === true) {
- // Dispatch router (note: you won't be able to alter routes after this)
- $request = $this->dispatchRouterAndPrepareRoute($request, $router);
- }
-
- // Traverse middleware stack
- try {
- $response = $this->callMiddlewareStack($request, $response);
- } catch (Exception $e) {
- $response = $this->handleException($e, $request, $response);
- } catch (Throwable $e) {
- $response = $this->handlePhpError($e, $request, $response);
- }
-
- $response = $this->finalize($response);
-
- return $response;
- }
-
- /**
- * Send the response the client
- *
- * @param ResponseInterface $response
- */
- public function respond(ResponseInterface $response)
- {
- // Send response
- if (!headers_sent()) {
- // Status
- header(sprintf(
- 'HTTP/%s %s %s',
- $response->getProtocolVersion(),
- $response->getStatusCode(),
- $response->getReasonPhrase()
- ));
-
- // Headers
- foreach ($response->getHeaders() as $name => $values) {
- foreach ($values as $value) {
- header(sprintf('%s: %s', $name, $value), false);
- }
- }
- }
-
- // Body
- if (!$this->isEmptyResponse($response)) {
- $body = $response->getBody();
- if ($body->isSeekable()) {
- $body->rewind();
- }
- $settings = $this->container->get('settings');
- $chunkSize = $settings['responseChunkSize'];
-
- $contentLength = $response->getHeaderLine('Content-Length');
- if (!$contentLength) {
- $contentLength = $body->getSize();
- }
-
-
- if (isset($contentLength)) {
- $amountToRead = $contentLength;
- while ($amountToRead > 0 && !$body->eof()) {
- $data = $body->read(min($chunkSize, $amountToRead));
- echo $data;
-
- $amountToRead -= strlen($data);
-
- if (connection_status() != CONNECTION_NORMAL) {
- break;
- }
- }
- } else {
- while (!$body->eof()) {
- echo $body->read($chunkSize);
- if (connection_status() != CONNECTION_NORMAL) {
- break;
- }
- }
- }
- }
- }
-
- /**
- * Invoke application
- *
- * This method implements the middleware interface. It receives
- * Request and Response objects, and it returns a Response object
- * after compiling the routes registered in the Router and dispatching
- * the Request object to the appropriate Route callback routine.
- *
- * @param ServerRequestInterface $request The most recent Request object
- * @param ResponseInterface $response The most recent Response object
- *
- * @return ResponseInterface
- * @throws MethodNotAllowedException
- * @throws NotFoundException
- */
- public function __invoke(ServerRequestInterface $request, ResponseInterface $response)
- {
- // Get the route info
- $routeInfo = $request->getAttribute('routeInfo');
-
- /** @var \Slim\Interfaces\RouterInterface $router */
- $router = $this->container->get('router');
-
- // If router hasn't been dispatched or the URI changed then dispatch
- if (null === $routeInfo || ($routeInfo['request'] !== [$request->getMethod(), (string) $request->getUri()])) {
- $request = $this->dispatchRouterAndPrepareRoute($request, $router);
- $routeInfo = $request->getAttribute('routeInfo');
- }
-
- if ($routeInfo[0] === Dispatcher::FOUND) {
- $route = $router->lookupRoute($routeInfo[1]);
- return $route->run($request, $response);
- } elseif ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) {
- if (!$this->container->has('notAllowedHandler')) {
- throw new MethodNotAllowedException($request, $response, $routeInfo[1]);
- }
- /** @var callable $notAllowedHandler */
- $notAllowedHandler = $this->container->get('notAllowedHandler');
- return $notAllowedHandler($request, $response, $routeInfo[1]);
- }
-
- if (!$this->container->has('notFoundHandler')) {
- throw new NotFoundException($request, $response);
- }
- /** @var callable $notFoundHandler */
- $notFoundHandler = $this->container->get('notFoundHandler');
- return $notFoundHandler($request, $response);
- }
-
- /**
- * Perform a sub-request from within an application route
- *
- * This method allows you to prepare and initiate a sub-request, run within
- * the context of the current request. This WILL NOT issue a remote HTTP
- * request. Instead, it will route the provided URL, method, headers,
- * cookies, body, and server variables against the set of registered
- * application routes. The result response object is returned.
- *
- * @param string $method The request method (e.g., GET, POST, PUT, etc.)
- * @param string $path The request URI path
- * @param string $query The request URI query string
- * @param array $headers The request headers (key-value array)
- * @param array $cookies The request cookies (key-value array)
- * @param string $bodyContent The request body
- * @param ResponseInterface $response The response object (optional)
- * @return ResponseInterface
- */
- public function subRequest(
- $method,
- $path,
- $query = '',
- array $headers = [],
- array $cookies = [],
- $bodyContent = '',
- ResponseInterface $response = null
- ) {
- $env = $this->container->get('environment');
- $uri = Uri::createFromEnvironment($env)->withPath($path)->withQuery($query);
- $headers = new Headers($headers);
- $serverParams = $env->all();
- $body = new Body(fopen('php://temp', 'r+'));
- $body->write($bodyContent);
- $body->rewind();
- $request = new Request($method, $uri, $headers, $cookies, $serverParams, $body);
-
- if (!$response) {
- $response = $this->container->get('response');
- }
-
- return $this($request, $response);
- }
-
- /**
- * Dispatch the router to find the route. Prepare the route for use.
- *
- * @param ServerRequestInterface $request
- * @param RouterInterface $router
- * @return ServerRequestInterface
- */
- protected function dispatchRouterAndPrepareRoute(ServerRequestInterface $request, RouterInterface $router)
- {
- $routeInfo = $router->dispatch($request);
-
- if ($routeInfo[0] === Dispatcher::FOUND) {
- $routeArguments = [];
- foreach ($routeInfo[2] as $k => $v) {
- $routeArguments[$k] = urldecode($v);
- }
-
- $route = $router->lookupRoute($routeInfo[1]);
- $route->prepare($request, $routeArguments);
-
- // add route to the request's attributes in case a middleware or handler needs access to the route
- $request = $request->withAttribute('route', $route);
- }
-
- $routeInfo['request'] = [$request->getMethod(), (string) $request->getUri()];
-
- return $request->withAttribute('routeInfo', $routeInfo);
- }
-
- /**
- * Finalize response
- *
- * @param ResponseInterface $response
- * @return ResponseInterface
- */
- protected function finalize(ResponseInterface $response)
- {
- // stop PHP sending a Content-Type automatically
- ini_set('default_mimetype', '');
-
- if ($this->isEmptyResponse($response)) {
- return $response->withoutHeader('Content-Type')->withoutHeader('Content-Length');
- }
-
- // Add Content-Length header if `addContentLengthHeader` setting is set
- if (isset($this->container->get('settings')['addContentLengthHeader']) &&
- $this->container->get('settings')['addContentLengthHeader'] == true) {
- if (ob_get_length() > 0) {
- throw new \RuntimeException("Unexpected data in output buffer. " .
- "Maybe you have characters before an opening <?php tag?");
- }
- $size = $response->getBody()->getSize();
- if ($size !== null && !$response->hasHeader('Content-Length')) {
- $response = $response->withHeader('Content-Length', (string) $size);
- }
- }
-
- return $response;
- }
-
- /**
- * Helper method, which returns true if the provided response must not output a body and false
- * if the response could have a body.
- *
- * @see https://tools.ietf.org/html/rfc7231
- *
- * @param ResponseInterface $response
- * @return bool
- */
- protected function isEmptyResponse(ResponseInterface $response)
- {
- if (method_exists($response, 'isEmpty')) {
- return $response->isEmpty();
- }
-
- return in_array($response->getStatusCode(), [204, 205, 304]);
- }
-
- /**
- * Call relevant handler from the Container if needed. If it doesn't exist,
- * then just re-throw.
- *
- * @param Exception $e
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- *
- * @return ResponseInterface
- * @throws Exception if a handler is needed and not found
- */
- protected function handleException(Exception $e, ServerRequestInterface $request, ResponseInterface $response)
- {
- if ($e instanceof MethodNotAllowedException) {
- $handler = 'notAllowedHandler';
- $params = [$e->getRequest(), $e->getResponse(), $e->getAllowedMethods()];
- } elseif ($e instanceof NotFoundException) {
- $handler = 'notFoundHandler';
- $params = [$e->getRequest(), $e->getResponse(), $e];
- } elseif ($e instanceof SlimException) {
- // This is a Stop exception and contains the response
- return $e->getResponse();
- } else {
- // Other exception, use $request and $response params
- $handler = 'errorHandler';
- $params = [$request, $response, $e];
- }
-
- if ($this->container->has($handler)) {
- $callable = $this->container->get($handler);
- // Call the registered handler
- return call_user_func_array($callable, $params);
- }
-
- // No handlers found, so just throw the exception
- throw $e;
- }
-
- /**
- * Call relevant handler from the Container if needed. If it doesn't exist,
- * then just re-throw.
- *
- * @param Throwable $e
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- * @return ResponseInterface
- * @throws Throwable
- */
- protected function handlePhpError(Throwable $e, ServerRequestInterface $request, ResponseInterface $response)
- {
- $handler = 'phpErrorHandler';
- $params = [$request, $response, $e];
-
- if ($this->container->has($handler)) {
- $callable = $this->container->get($handler);
- // Call the registered handler
- return call_user_func_array($callable, $params);
- }
-
- // No handlers found, so just throw the exception
- throw $e;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/CallableResolver.php b/server/vendor/slim/slim/Slim/CallableResolver.php
deleted file mode 100644
index b2ce368..0000000
--- a/server/vendor/slim/slim/Slim/CallableResolver.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use RuntimeException;
-use Psr\Container\ContainerInterface;
-use Slim\Interfaces\CallableResolverInterface;
-
-/**
- * This class resolves a string of the format 'class:method' into a closure
- * that can be dispatched.
- */
-final class CallableResolver implements CallableResolverInterface
-{
- const CALLABLE_PATTERN = '!^([^\:]+)\:([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)$!';
-
- /**
- * @var ContainerInterface
- */
- private $container;
-
- /**
- * @param ContainerInterface $container
- */
- public function __construct(ContainerInterface $container)
- {
- $this->container = $container;
- }
-
- /**
- * Resolve toResolve into a closure that that the router can dispatch.
- *
- * If toResolve is of the format 'class:method', then try to extract 'class'
- * from the container otherwise instantiate it and then dispatch 'method'.
- *
- * @param mixed $toResolve
- *
- * @return callable
- *
- * @throws RuntimeException if the callable does not exist
- * @throws RuntimeException if the callable is not resolvable
- */
- public function resolve($toResolve)
- {
- if (is_callable($toResolve)) {
- return $toResolve;
- }
-
- if (!is_string($toResolve)) {
- $this->assertCallable($toResolve);
- }
-
- // check for slim callable as "class:method"
- if (preg_match(self::CALLABLE_PATTERN, $toResolve, $matches)) {
- $resolved = $this->resolveCallable($matches[1], $matches[2]);
- $this->assertCallable($resolved);
-
- return $resolved;
- }
-
- $resolved = $this->resolveCallable($toResolve);
- $this->assertCallable($resolved);
-
- return $resolved;
- }
-
- /**
- * Check if string is something in the DIC
- * that's callable or is a class name which has an __invoke() method.
- *
- * @param string $class
- * @param string $method
- * @return callable
- *
- * @throws \RuntimeException if the callable does not exist
- */
- protected function resolveCallable($class, $method = '__invoke')
- {
- if ($this->container->has($class)) {
- return [$this->container->get($class), $method];
- }
-
- if (!class_exists($class)) {
- throw new RuntimeException(sprintf('Callable %s does not exist', $class));
- }
-
- return [new $class($this->container), $method];
- }
-
- /**
- * @param Callable $callable
- *
- * @throws \RuntimeException if the callable is not resolvable
- */
- protected function assertCallable($callable)
- {
- if (!is_callable($callable)) {
- throw new RuntimeException(sprintf(
- '%s is not resolvable',
- is_array($callable) || is_object($callable) ? json_encode($callable) : $callable
- ));
- }
- }
-}
diff --git a/server/vendor/slim/slim/Slim/CallableResolverAwareTrait.php b/server/vendor/slim/slim/Slim/CallableResolverAwareTrait.php
deleted file mode 100644
index ffb4eb2..0000000
--- a/server/vendor/slim/slim/Slim/CallableResolverAwareTrait.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use RuntimeException;
-use Psr\Container\ContainerInterface;
-use Slim\Interfaces\CallableResolverInterface;
-
-/**
- * ResolveCallable
- *
- * This is an internal class that enables resolution of 'class:method' strings
- * into a closure. This class is an implementation detail and is used only inside
- * of the Slim application.
- *
- * @property ContainerInterface $container
- */
-trait CallableResolverAwareTrait
-{
- /**
- * Resolve a string of the format 'class:method' into a closure that the
- * router can dispatch.
- *
- * @param callable|string $callable
- *
- * @return \Closure
- *
- * @throws RuntimeException If the string cannot be resolved as a callable
- */
- protected function resolveCallable($callable)
- {
- if (!$this->container instanceof ContainerInterface) {
- return $callable;
- }
-
- /** @var CallableResolverInterface $resolver */
- $resolver = $this->container->get('callableResolver');
-
- return $resolver->resolve($callable);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Collection.php b/server/vendor/slim/slim/Slim/Collection.php
deleted file mode 100644
index 728bb73..0000000
--- a/server/vendor/slim/slim/Slim/Collection.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use ArrayIterator;
-use Slim\Interfaces\CollectionInterface;
-
-/**
- * Collection
- *
- * This class provides a common interface used by many other
- * classes in a Slim application that manage "collections"
- * of data that must be inspected and/or manipulated
- */
-class Collection implements CollectionInterface
-{
- /**
- * The source data
- *
- * @var array
- */
- protected $data = [];
-
- /**
- * Create new collection
- *
- * @param array $items Pre-populate collection with this key-value array
- */
- public function __construct(array $items = [])
- {
- $this->replace($items);
- }
-
- /********************************************************************************
- * Collection interface
- *******************************************************************************/
-
- /**
- * Set collection item
- *
- * @param string $key The data key
- * @param mixed $value The data value
- */
- public function set($key, $value)
- {
- $this->data[$key] = $value;
- }
-
- /**
- * Get collection item for key
- *
- * @param string $key The data key
- * @param mixed $default The default value to return if data key does not exist
- *
- * @return mixed The key's value, or the default value
- */
- public function get($key, $default = null)
- {
- return $this->has($key) ? $this->data[$key] : $default;
- }
-
- /**
- * Add item to collection, replacing existing items with the same data key
- *
- * @param array $items Key-value array of data to append to this collection
- */
- public function replace(array $items)
- {
- foreach ($items as $key => $value) {
- $this->set($key, $value);
- }
- }
-
- /**
- * Get all items in collection
- *
- * @return array The collection's source data
- */
- public function all()
- {
- return $this->data;
- }
-
- /**
- * Get collection keys
- *
- * @return array The collection's source data keys
- */
- public function keys()
- {
- return array_keys($this->data);
- }
-
- /**
- * Does this collection have a given key?
- *
- * @param string $key The data key
- *
- * @return bool
- */
- public function has($key)
- {
- return array_key_exists($key, $this->data);
- }
-
- /**
- * Remove item from collection
- *
- * @param string $key The data key
- */
- public function remove($key)
- {
- unset($this->data[$key]);
- }
-
- /**
- * Remove all items from collection
- */
- public function clear()
- {
- $this->data = [];
- }
-
- /********************************************************************************
- * ArrayAccess interface
- *******************************************************************************/
-
- /**
- * Does this collection have a given key?
- *
- * @param string $key The data key
- *
- * @return bool
- */
- public function offsetExists($key)
- {
- return $this->has($key);
- }
-
- /**
- * Get collection item for key
- *
- * @param string $key The data key
- *
- * @return mixed The key's value, or the default value
- */
- public function offsetGet($key)
- {
- return $this->get($key);
- }
-
- /**
- * Set collection item
- *
- * @param string $key The data key
- * @param mixed $value The data value
- */
- public function offsetSet($key, $value)
- {
- $this->set($key, $value);
- }
-
- /**
- * Remove item from collection
- *
- * @param string $key The data key
- */
- public function offsetUnset($key)
- {
- $this->remove($key);
- }
-
- /**
- * Get number of items in collection
- *
- * @return int
- */
- public function count()
- {
- return count($this->data);
- }
-
- /********************************************************************************
- * IteratorAggregate interface
- *******************************************************************************/
-
- /**
- * Get collection iterator
- *
- * @return \ArrayIterator
- */
- public function getIterator()
- {
- return new ArrayIterator($this->data);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Container.php b/server/vendor/slim/slim/Slim/Container.php
deleted file mode 100644
index ac0d917..0000000
--- a/server/vendor/slim/slim/Slim/Container.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use Interop\Container\ContainerInterface;
-use Interop\Container\Exception\ContainerException;
-use Pimple\Container as PimpleContainer;
-use Slim\Exception\ContainerValueNotFoundException;
-use Slim\Exception\ContainerException as SlimContainerException;
-
-/**
- * Slim's default DI container is Pimple.
- *
- * Slim\App expects a container that implements Interop\Container\ContainerInterface
- * with these service keys configured and ready for use:
- *
- * - settings: an array or instance of \ArrayAccess
- * - environment: an instance of \Slim\Interfaces\Http\EnvironmentInterface
- * - request: an instance of \Psr\Http\Message\ServerRequestInterface
- * - response: an instance of \Psr\Http\Message\ResponseInterface
- * - router: an instance of \Slim\Interfaces\RouterInterface
- * - foundHandler: an instance of \Slim\Interfaces\InvocationStrategyInterface
- * - errorHandler: a callable with the signature: function($request, $response, $exception)
- * - notFoundHandler: a callable with the signature: function($request, $response)
- * - notAllowedHandler: a callable with the signature: function($request, $response, $allowedHttpMethods)
- * - callableResolver: an instance of \Slim\Interfaces\CallableResolverInterface
- *
- * @property-read array settings
- * @property-read \Slim\Interfaces\Http\EnvironmentInterface environment
- * @property-read \Psr\Http\Message\ServerRequestInterface request
- * @property-read \Psr\Http\Message\ResponseInterface response
- * @property-read \Slim\Interfaces\RouterInterface router
- * @property-read \Slim\Interfaces\InvocationStrategyInterface foundHandler
- * @property-read callable errorHandler
- * @property-read callable notFoundHandler
- * @property-read callable notAllowedHandler
- * @property-read \Slim\Interfaces\CallableResolverInterface callableResolver
- */
-class Container extends PimpleContainer implements ContainerInterface
-{
- /**
- * Default settings
- *
- * @var array
- */
- private $defaultSettings = [
- 'httpVersion' => '1.1',
- 'responseChunkSize' => 4096,
- 'outputBuffering' => 'append',
- 'determineRouteBeforeAppMiddleware' => false,
- 'displayErrorDetails' => false,
- 'addContentLengthHeader' => true,
- 'routerCacheFile' => false,
- ];
-
- /**
- * Create new container
- *
- * @param array $values The parameters or objects.
- */
- public function __construct(array $values = [])
- {
- parent::__construct($values);
-
- $userSettings = isset($values['settings']) ? $values['settings'] : [];
- $this->registerDefaultServices($userSettings);
- }
-
- /**
- * This function registers the default services that Slim needs to work.
- *
- * All services are shared - that is, they are registered such that the
- * same instance is returned on subsequent calls.
- *
- * @param array $userSettings Associative array of application settings
- *
- * @return void
- */
- private function registerDefaultServices($userSettings)
- {
- $defaultSettings = $this->defaultSettings;
-
- /**
- * This service MUST return an array or an
- * instance of \ArrayAccess.
- *
- * @return array|\ArrayAccess
- */
- $this['settings'] = function () use ($userSettings, $defaultSettings) {
- return new Collection(array_merge($defaultSettings, $userSettings));
- };
-
- $defaultProvider = new DefaultServicesProvider();
- $defaultProvider->register($this);
- }
-
- /********************************************************************************
- * Methods to satisfy Interop\Container\ContainerInterface
- *******************************************************************************/
-
- /**
- * Finds an entry of the container by its identifier and returns it.
- *
- * @param string $id Identifier of the entry to look for.
- *
- * @throws ContainerValueNotFoundException No entry was found for this identifier.
- * @throws ContainerException Error while retrieving the entry.
- *
- * @return mixed Entry.
- */
- public function get($id)
- {
- if (!$this->offsetExists($id)) {
- throw new ContainerValueNotFoundException(sprintf('Identifier "%s" is not defined.', $id));
- }
- try {
- return $this->offsetGet($id);
- } catch (\InvalidArgumentException $exception) {
- if ($this->exceptionThrownByContainer($exception)) {
- throw new SlimContainerException(
- sprintf('Container error while retrieving "%s"', $id),
- null,
- $exception
- );
- } else {
- throw $exception;
- }
- }
- }
-
- /**
- * Tests whether an exception needs to be recast for compliance with Container-Interop. This will be if the
- * exception was thrown by Pimple.
- *
- * @param \InvalidArgumentException $exception
- *
- * @return bool
- */
- private function exceptionThrownByContainer(\InvalidArgumentException $exception)
- {
- $trace = $exception->getTrace()[0];
-
- return $trace['class'] === PimpleContainer::class && $trace['function'] === 'offsetGet';
- }
-
- /**
- * Returns true if the container can return an entry for the given identifier.
- * Returns false otherwise.
- *
- * @param string $id Identifier of the entry to look for.
- *
- * @return boolean
- */
- public function has($id)
- {
- return $this->offsetExists($id);
- }
-
-
- /********************************************************************************
- * Magic methods for convenience
- *******************************************************************************/
-
- public function __get($name)
- {
- return $this->get($name);
- }
-
- public function __isset($name)
- {
- return $this->has($name);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/DefaultServicesProvider.php b/server/vendor/slim/slim/Slim/DefaultServicesProvider.php
deleted file mode 100644
index 7087e4e..0000000
--- a/server/vendor/slim/slim/Slim/DefaultServicesProvider.php
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Handlers\PhpError;
-use Slim\Handlers\Error;
-use Slim\Handlers\NotFound;
-use Slim\Handlers\NotAllowed;
-use Slim\Handlers\Strategies\RequestResponse;
-use Slim\Http\Environment;
-use Slim\Http\Headers;
-use Slim\Http\Request;
-use Slim\Http\Response;
-use Slim\Interfaces\CallableResolverInterface;
-use Slim\Interfaces\Http\EnvironmentInterface;
-use Slim\Interfaces\InvocationStrategyInterface;
-use Slim\Interfaces\RouterInterface;
-
-/**
- * Slim's default Service Provider.
- */
-class DefaultServicesProvider
-{
- /**
- * Register Slim's default services.
- *
- * @param Container $container A DI container implementing ArrayAccess and container-interop.
- */
- public function register($container)
- {
- if (!isset($container['environment'])) {
- /**
- * This service MUST return a shared instance
- * of \Slim\Interfaces\Http\EnvironmentInterface.
- *
- * @return EnvironmentInterface
- */
- $container['environment'] = function () {
- return new Environment($_SERVER);
- };
- }
-
- if (!isset($container['request'])) {
- /**
- * PSR-7 Request object
- *
- * @param Container $container
- *
- * @return ServerRequestInterface
- */
- $container['request'] = function ($container) {
- return Request::createFromEnvironment($container->get('environment'));
- };
- }
-
- if (!isset($container['response'])) {
- /**
- * PSR-7 Response object
- *
- * @param Container $container
- *
- * @return ResponseInterface
- */
- $container['response'] = function ($container) {
- $headers = new Headers(['Content-Type' => 'text/html; charset=UTF-8']);
- $response = new Response(200, $headers);
-
- return $response->withProtocolVersion($container->get('settings')['httpVersion']);
- };
- }
-
- if (!isset($container['router'])) {
- /**
- * This service MUST return a SHARED instance
- * of \Slim\Interfaces\RouterInterface.
- *
- * @param Container $container
- *
- * @return RouterInterface
- */
- $container['router'] = function ($container) {
- $routerCacheFile = false;
- if (isset($container->get('settings')['routerCacheFile'])) {
- $routerCacheFile = $container->get('settings')['routerCacheFile'];
- }
-
-
- $router = (new Router)->setCacheFile($routerCacheFile);
- if (method_exists($router, 'setContainer')) {
- $router->setContainer($container);
- }
-
- return $router;
- };
- }
-
- if (!isset($container['foundHandler'])) {
- /**
- * This service MUST return a SHARED instance
- * of \Slim\Interfaces\InvocationStrategyInterface.
- *
- * @return InvocationStrategyInterface
- */
- $container['foundHandler'] = function () {
- return new RequestResponse;
- };
- }
-
- if (!isset($container['phpErrorHandler'])) {
- /**
- * This service MUST return a callable
- * that accepts three arguments:
- *
- * 1. Instance of \Psr\Http\Message\ServerRequestInterface
- * 2. Instance of \Psr\Http\Message\ResponseInterface
- * 3. Instance of \Error
- *
- * The callable MUST return an instance of
- * \Psr\Http\Message\ResponseInterface.
- *
- * @param Container $container
- *
- * @return callable
- */
- $container['phpErrorHandler'] = function ($container) {
- return new PhpError($container->get('settings')['displayErrorDetails']);
- };
- }
-
- if (!isset($container['errorHandler'])) {
- /**
- * This service MUST return a callable
- * that accepts three arguments:
- *
- * 1. Instance of \Psr\Http\Message\ServerRequestInterface
- * 2. Instance of \Psr\Http\Message\ResponseInterface
- * 3. Instance of \Exception
- *
- * The callable MUST return an instance of
- * \Psr\Http\Message\ResponseInterface.
- *
- * @param Container $container
- *
- * @return callable
- */
- $container['errorHandler'] = function ($container) {
- return new Error($container->get('settings')['displayErrorDetails']);
- };
- }
-
- if (!isset($container['notFoundHandler'])) {
- /**
- * This service MUST return a callable
- * that accepts two arguments:
- *
- * 1. Instance of \Psr\Http\Message\ServerRequestInterface
- * 2. Instance of \Psr\Http\Message\ResponseInterface
- *
- * The callable MUST return an instance of
- * \Psr\Http\Message\ResponseInterface.
- *
- * @return callable
- */
- $container['notFoundHandler'] = function () {
- return new NotFound;
- };
- }
-
- if (!isset($container['notAllowedHandler'])) {
- /**
- * This service MUST return a callable
- * that accepts three arguments:
- *
- * 1. Instance of \Psr\Http\Message\ServerRequestInterface
- * 2. Instance of \Psr\Http\Message\ResponseInterface
- * 3. Array of allowed HTTP methods
- *
- * The callable MUST return an instance of
- * \Psr\Http\Message\ResponseInterface.
- *
- * @return callable
- */
- $container['notAllowedHandler'] = function () {
- return new NotAllowed;
- };
- }
-
- if (!isset($container['callableResolver'])) {
- /**
- * Instance of \Slim\Interfaces\CallableResolverInterface
- *
- * @param Container $container
- *
- * @return CallableResolverInterface
- */
- $container['callableResolver'] = function ($container) {
- return new CallableResolver($container);
- };
- }
- }
-}
diff --git a/server/vendor/slim/slim/Slim/DeferredCallable.php b/server/vendor/slim/slim/Slim/DeferredCallable.php
deleted file mode 100644
index 22887c0..0000000
--- a/server/vendor/slim/slim/Slim/DeferredCallable.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-
-namespace Slim;
-
-use Closure;
-use Psr\Container\ContainerInterface;
-
-class DeferredCallable
-{
- use CallableResolverAwareTrait;
-
- private $callable;
- /** @var ContainerInterface */
- private $container;
-
- /**
- * DeferredMiddleware constructor.
- * @param callable|string $callable
- * @param ContainerInterface $container
- */
- public function __construct($callable, ContainerInterface $container = null)
- {
- $this->callable = $callable;
- $this->container = $container;
- }
-
- public function __invoke()
- {
- $callable = $this->resolveCallable($this->callable);
- if ($callable instanceof Closure) {
- $callable = $callable->bindTo($this->container);
- }
-
- $args = func_get_args();
-
- return call_user_func_array($callable, $args);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Exception/ContainerException.php b/server/vendor/slim/slim/Slim/Exception/ContainerException.php
deleted file mode 100644
index b147eb9..0000000
--- a/server/vendor/slim/slim/Slim/Exception/ContainerException.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE (MIT License)
- */
-namespace Slim\Exception;
-
-use InvalidArgumentException;
-use Interop\Container\Exception\ContainerException as InteropContainerException;
-
-/**
- * Container Exception
- */
-class ContainerException extends InvalidArgumentException implements InteropContainerException
-{
-
-}
diff --git a/server/vendor/slim/slim/Slim/Exception/ContainerValueNotFoundException.php b/server/vendor/slim/slim/Slim/Exception/ContainerValueNotFoundException.php
deleted file mode 100644
index c5033b6..0000000
--- a/server/vendor/slim/slim/Slim/Exception/ContainerValueNotFoundException.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE (MIT License)
- */
-namespace Slim\Exception;
-
-use RuntimeException;
-use Interop\Container\Exception\NotFoundException as InteropNotFoundException;
-
-/**
- * Not Found Exception
- */
-class ContainerValueNotFoundException extends RuntimeException implements InteropNotFoundException
-{
-
-}
diff --git a/server/vendor/slim/slim/Slim/Exception/InvalidMethodException.php b/server/vendor/slim/slim/Slim/Exception/InvalidMethodException.php
deleted file mode 100644
index 238bf7a..0000000
--- a/server/vendor/slim/slim/Slim/Exception/InvalidMethodException.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace Slim\Exception;
-
-use Psr\Http\Message\ServerRequestInterface;
-
-class InvalidMethodException extends \InvalidArgumentException
-{
- protected $request;
-
- public function __construct(ServerRequestInterface $request, $method)
- {
- $this->request = $request;
- parent::__construct(sprintf('Unsupported HTTP method "%s" provided', $method));
- }
-
- public function getRequest()
- {
- return $this->request;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Exception/MethodNotAllowedException.php b/server/vendor/slim/slim/Slim/Exception/MethodNotAllowedException.php
deleted file mode 100644
index e73b99e..0000000
--- a/server/vendor/slim/slim/Slim/Exception/MethodNotAllowedException.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE (MIT License)
- */
-namespace Slim\Exception;
-
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-class MethodNotAllowedException extends SlimException
-{
- /**
- * HTTP methods allowed
- *
- * @var string[]
- */
- protected $allowedMethods;
-
- /**
- * Create new exception
- *
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- * @param string[] $allowedMethods
- */
- public function __construct(ServerRequestInterface $request, ResponseInterface $response, array $allowedMethods)
- {
- parent::__construct($request, $response);
- $this->allowedMethods = $allowedMethods;
- }
-
- /**
- * Get allowed methods
- *
- * @return string[]
- */
- public function getAllowedMethods()
- {
- return $this->allowedMethods;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Exception/NotFoundException.php b/server/vendor/slim/slim/Slim/Exception/NotFoundException.php
deleted file mode 100644
index 8095eac..0000000
--- a/server/vendor/slim/slim/Slim/Exception/NotFoundException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE (MIT License)
- */
-namespace Slim\Exception;
-
-class NotFoundException extends SlimException
-{
-
-}
diff --git a/server/vendor/slim/slim/Slim/Exception/SlimException.php b/server/vendor/slim/slim/Slim/Exception/SlimException.php
deleted file mode 100644
index 2480d73..0000000
--- a/server/vendor/slim/slim/Slim/Exception/SlimException.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Exception;
-
-use Exception;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * Stop Exception
- *
- * This Exception is thrown when the Slim application needs to abort
- * processing and return control flow to the outer PHP script.
- */
-class SlimException extends Exception
-{
- /**
- * A request object
- *
- * @var ServerRequestInterface
- */
- protected $request;
-
- /**
- * A response object to send to the HTTP client
- *
- * @var ResponseInterface
- */
- protected $response;
-
- /**
- * Create new exception
- *
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- */
- public function __construct(ServerRequestInterface $request, ResponseInterface $response)
- {
- parent::__construct();
- $this->request = $request;
- $this->response = $response;
- }
-
- /**
- * Get request
- *
- * @return ServerRequestInterface
- */
- public function getRequest()
- {
- return $this->request;
- }
-
- /**
- * Get response
- *
- * @return ResponseInterface
- */
- public function getResponse()
- {
- return $this->response;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/AbstractError.php b/server/vendor/slim/slim/Slim/Handlers/AbstractError.php
deleted file mode 100644
index 42f8dde..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/AbstractError.php
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers;
-
-/**
- * Abstract Slim application error handler
- */
-abstract class AbstractError extends AbstractHandler
-{
- /**
- * @var bool
- */
- protected $displayErrorDetails;
-
- /**
- * Constructor
- *
- * @param bool $displayErrorDetails Set to true to display full details
- */
- public function __construct($displayErrorDetails = false)
- {
- $this->displayErrorDetails = (bool) $displayErrorDetails;
- }
-
- /**
- * Write to the error log if displayErrorDetails is false
- *
- * @param \Exception|\Throwable $throwable
- *
- * @return void
- */
- protected function writeToErrorLog($throwable)
- {
- if ($this->displayErrorDetails) {
- return;
- }
-
- $message = 'Slim Application Error:' . PHP_EOL;
- $message .= $this->renderThrowableAsText($throwable);
- while ($throwable = $throwable->getPrevious()) {
- $message .= PHP_EOL . 'Previous error:' . PHP_EOL;
- $message .= $this->renderThrowableAsText($throwable);
- }
-
- $message .= PHP_EOL . 'View in rendered output by enabling the "displayErrorDetails" setting.' . PHP_EOL;
-
- $this->logError($message);
- }
-
- /**
- * Render error as Text.
- *
- * @param \Exception|\Throwable $throwable
- *
- * @return string
- */
- protected function renderThrowableAsText($throwable)
- {
- $text = sprintf('Type: %s' . PHP_EOL, get_class($throwable));
-
- if ($code = $throwable->getCode()) {
- $text .= sprintf('Code: %s' . PHP_EOL, $code);
- }
-
- if ($message = $throwable->getMessage()) {
- $text .= sprintf('Message: %s' . PHP_EOL, htmlentities($message));
- }
-
- if ($file = $throwable->getFile()) {
- $text .= sprintf('File: %s' . PHP_EOL, $file);
- }
-
- if ($line = $throwable->getLine()) {
- $text .= sprintf('Line: %s' . PHP_EOL, $line);
- }
-
- if ($trace = $throwable->getTraceAsString()) {
- $text .= sprintf('Trace: %s', $trace);
- }
-
- return $text;
- }
-
- /**
- * Wraps the error_log function so that this can be easily tested
- *
- * @param $message
- */
- protected function logError($message)
- {
- error_log($message);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/AbstractHandler.php b/server/vendor/slim/slim/Slim/Handlers/AbstractHandler.php
deleted file mode 100644
index b166a15..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/AbstractHandler.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers;
-
-use Psr\Http\Message\ServerRequestInterface;
-
-/**
- * Abstract Slim application handler
- */
-abstract class AbstractHandler
-{
- /**
- * Known handled content types
- *
- * @var array
- */
- protected $knownContentTypes = [
- 'application/json',
- 'application/xml',
- 'text/xml',
- 'text/html',
- ];
-
- /**
- * 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.
- *
- * @param ServerRequestInterface $request
- * @return string
- */
- protected function determineContentType(ServerRequestInterface $request)
- {
- $acceptHeader = $request->getHeaderLine('Accept');
- $selectedContentTypes = array_intersect(explode(',', $acceptHeader), $this->knownContentTypes);
-
- if (count($selectedContentTypes)) {
- return current($selectedContentTypes);
- }
-
- // handle +json and +xml specially
- if (preg_match('/\+(json|xml)/', $acceptHeader, $matches)) {
- $mediaType = 'application/' . $matches[1];
- if (in_array($mediaType, $this->knownContentTypes)) {
- return $mediaType;
- }
- }
-
- return 'text/html';
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/Error.php b/server/vendor/slim/slim/Slim/Handlers/Error.php
deleted file mode 100644
index dd0bc8d..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/Error.php
+++ /dev/null
@@ -1,224 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Http\Body;
-use UnexpectedValueException;
-
-/**
- * Default Slim application error handler
- *
- * It outputs the error message and diagnostic information in either JSON, XML,
- * or HTML based on the Accept header.
- */
-class Error extends AbstractError
-{
- /**
- * Invoke error handler
- *
- * @param ServerRequestInterface $request The most recent Request object
- * @param ResponseInterface $response The most recent Response object
- * @param \Exception $exception The caught Exception object
- *
- * @return ResponseInterface
- * @throws UnexpectedValueException
- */
- public function __invoke(ServerRequestInterface $request, ResponseInterface $response, \Exception $exception)
- {
- $contentType = $this->determineContentType($request);
- switch ($contentType) {
- case 'application/json':
- $output = $this->renderJsonErrorMessage($exception);
- break;
-
- case 'text/xml':
- case 'application/xml':
- $output = $this->renderXmlErrorMessage($exception);
- break;
-
- case 'text/html':
- $output = $this->renderHtmlErrorMessage($exception);
- break;
-
- default:
- throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType);
- }
-
- $this->writeToErrorLog($exception);
-
- $body = new Body(fopen('php://temp', 'r+'));
- $body->write($output);
-
- return $response
- ->withStatus(500)
- ->withHeader('Content-type', $contentType)
- ->withBody($body);
- }
-
- /**
- * Render HTML error page
- *
- * @param \Exception $exception
- *
- * @return string
- */
- protected function renderHtmlErrorMessage(\Exception $exception)
- {
- $title = 'Slim Application Error';
-
- if ($this->displayErrorDetails) {
- $html = '<p>The application could not run because of the following error:</p>';
- $html .= '<h2>Details</h2>';
- $html .= $this->renderHtmlException($exception);
-
- while ($exception = $exception->getPrevious()) {
- $html .= '<h2>Previous exception</h2>';
- $html .= $this->renderHtmlExceptionOrError($exception);
- }
- } else {
- $html = '<p>A website error has occurred. Sorry for the temporary inconvenience.</p>';
- }
-
- $output = sprintf(
- "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" .
- "<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>%s</body></html>",
- $title,
- $title,
- $html
- );
-
- return $output;
- }
-
- /**
- * Render exception as HTML.
- *
- * Provided for backwards compatibility; use renderHtmlExceptionOrError().
- *
- * @param \Exception $exception
- *
- * @return string
- */
- protected function renderHtmlException(\Exception $exception)
- {
- return $this->renderHtmlExceptionOrError($exception);
- }
-
- /**
- * Render exception or error as HTML.
- *
- * @param \Exception|\Error $exception
- *
- * @return string
- */
- protected function renderHtmlExceptionOrError($exception)
- {
- if (!$exception instanceof \Exception && !$exception instanceof \Error) {
- throw new \RuntimeException("Unexpected type. Expected Exception or Error.");
- }
-
- $html = sprintf('<div><strong>Type:</strong> %s</div>', get_class($exception));
-
- if (($code = $exception->getCode())) {
- $html .= sprintf('<div><strong>Code:</strong> %s</div>', $code);
- }
-
- if (($message = $exception->getMessage())) {
- $html .= sprintf('<div><strong>Message:</strong> %s</div>', htmlentities($message));
- }
-
- if (($file = $exception->getFile())) {
- $html .= sprintf('<div><strong>File:</strong> %s</div>', $file);
- }
-
- if (($line = $exception->getLine())) {
- $html .= sprintf('<div><strong>Line:</strong> %s</div>', $line);
- }
-
- if (($trace = $exception->getTraceAsString())) {
- $html .= '<h2>Trace</h2>';
- $html .= sprintf('<pre>%s</pre>', htmlentities($trace));
- }
-
- return $html;
- }
-
- /**
- * Render JSON error
- *
- * @param \Exception $exception
- *
- * @return string
- */
- protected function renderJsonErrorMessage(\Exception $exception)
- {
- $error = [
- 'message' => 'Slim Application Error',
- ];
-
- if ($this->displayErrorDetails) {
- $error['exception'] = [];
-
- do {
- $error['exception'][] = [
- 'type' => get_class($exception),
- 'code' => $exception->getCode(),
- 'message' => $exception->getMessage(),
- 'file' => $exception->getFile(),
- 'line' => $exception->getLine(),
- 'trace' => explode("\n", $exception->getTraceAsString()),
- ];
- } while ($exception = $exception->getPrevious());
- }
-
- return json_encode($error, JSON_PRETTY_PRINT);
- }
-
- /**
- * Render XML error
- *
- * @param \Exception $exception
- *
- * @return string
- */
- protected function renderXmlErrorMessage(\Exception $exception)
- {
- $xml = "<error>\n <message>Slim Application Error</message>\n";
- if ($this->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 .= " <trace>" . $this->createCdataSection($exception->getTraceAsString()) . "</trace>\n";
- $xml .= " </exception>\n";
- } while ($exception = $exception->getPrevious());
- }
- $xml .= "</error>";
-
- return $xml;
- }
-
- /**
- * Returns a CDATA section with the given content.
- *
- * @param string $content
- * @return string
- */
- private function createCdataSection($content)
- {
- return sprintf('<![CDATA[%s]]>', str_replace(']]>', ']]]]><![CDATA[>', $content));
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/NotAllowed.php b/server/vendor/slim/slim/Slim/Handlers/NotAllowed.php
deleted file mode 100644
index 9f382c4..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/NotAllowed.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers;
-
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Slim\Http\Body;
-use UnexpectedValueException;
-
-/**
- * Default Slim application not allowed handler
- *
- * It outputs a simple message in either JSON, XML or HTML based on the
- * Accept header.
- */
-class NotAllowed extends AbstractHandler
-{
- /**
- * Invoke error handler
- *
- * @param ServerRequestInterface $request The most recent Request object
- * @param ResponseInterface $response The most recent Response object
- * @param string[] $methods Allowed HTTP methods
- *
- * @return ResponseInterface
- * @throws UnexpectedValueException
- */
- public function __invoke(ServerRequestInterface $request, ResponseInterface $response, array $methods)
- {
- if ($request->getMethod() === 'OPTIONS') {
- $status = 200;
- $contentType = 'text/plain';
- $output = $this->renderPlainNotAllowedMessage($methods);
- } else {
- $status = 405;
- $contentType = $this->determineContentType($request);
- switch ($contentType) {
- case 'application/json':
- $output = $this->renderJsonNotAllowedMessage($methods);
- break;
-
- case 'text/xml':
- case 'application/xml':
- $output = $this->renderXmlNotAllowedMessage($methods);
- break;
-
- case 'text/html':
- $output = $this->renderHtmlNotAllowedMessage($methods);
- break;
- default:
- throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType);
- }
- }
-
- $body = new Body(fopen('php://temp', 'r+'));
- $body->write($output);
- $allow = implode(', ', $methods);
-
- return $response
- ->withStatus($status)
- ->withHeader('Content-type', $contentType)
- ->withHeader('Allow', $allow)
- ->withBody($body);
- }
-
- /**
- * Render PLAIN not allowed message
- *
- * @param array $methods
- * @return string
- */
- protected function renderPlainNotAllowedMessage($methods)
- {
- $allow = implode(', ', $methods);
-
- return 'Allowed methods: ' . $allow;
- }
-
- /**
- * Render JSON not allowed message
- *
- * @param array $methods
- * @return string
- */
- protected function renderJsonNotAllowedMessage($methods)
- {
- $allow = implode(', ', $methods);
-
- return '{"message":"Method not allowed. Must be one of: ' . $allow . '"}';
- }
-
- /**
- * Render XML not allowed message
- *
- * @param array $methods
- * @return string
- */
- protected function renderXmlNotAllowedMessage($methods)
- {
- $allow = implode(', ', $methods);
-
- return "<root><message>Method not allowed. Must be one of: $allow</message></root>";
- }
-
- /**
- * Render HTML not allowed message
- *
- * @param array $methods
- * @return string
- */
- protected function renderHtmlNotAllowedMessage($methods)
- {
- $allow = implode(', ', $methods);
- $output = <<<END
-<html>
- <head>
- <title>Method not allowed</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;
- }
- </style>
- </head>
- <body>
- <h1>Method not allowed</h1>
- <p>Method not allowed. Must be one of: <strong>$allow</strong></p>
- </body>
-</html>
-END;
-
- return $output;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/NotFound.php b/server/vendor/slim/slim/Slim/Handlers/NotFound.php
deleted file mode 100644
index d4a9dec..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/NotFound.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers;
-
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Slim\Http\Body;
-use UnexpectedValueException;
-
-/**
- * Default Slim application not found handler.
- *
- * It outputs a simple message in either JSON, XML or HTML based on the
- * Accept header.
- */
-class NotFound extends AbstractHandler
-{
- /**
- * Invoke not found handler
- *
- * @param ServerRequestInterface $request The most recent Request object
- * @param ResponseInterface $response The most recent Response object
- *
- * @return ResponseInterface
- * @throws UnexpectedValueException
- */
- public function __invoke(ServerRequestInterface $request, ResponseInterface $response)
- {
- $contentType = $this->determineContentType($request);
- switch ($contentType) {
- case 'application/json':
- $output = $this->renderJsonNotFoundOutput();
- break;
-
- case 'text/xml':
- case 'application/xml':
- $output = $this->renderXmlNotFoundOutput();
- break;
-
- case 'text/html':
- $output = $this->renderHtmlNotFoundOutput($request);
- break;
-
- default:
- throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType);
- }
-
- $body = new Body(fopen('php://temp', 'r+'));
- $body->write($output);
-
- return $response->withStatus(404)
- ->withHeader('Content-Type', $contentType)
- ->withBody($body);
- }
-
- /**
- * Return a response for application/json content not found
- *
- * @return ResponseInterface
- */
- protected function renderJsonNotFoundOutput()
- {
- return '{"message":"Not found"}';
- }
-
- /**
- * Return a response for xml content not found
- *
- * @return ResponseInterface
- */
- protected function renderXmlNotFoundOutput()
- {
- return '<root><message>Not found</message></root>';
- }
-
- /**
- * Return a response for text/html content not found
- *
- * @param ServerRequestInterface $request The most recent Request object
- *
- * @return ResponseInterface
- */
- protected function renderHtmlNotFoundOutput(ServerRequestInterface $request)
- {
- $homeUrl = (string)($request->getUri()->withPath('')->withQuery('')->withFragment(''));
- return <<<END
-<html>
- <head>
- <title>Page Not Found</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>Page Not Found</h1>
- <p>
- The page you are looking for could not be found. Check the address bar
- to ensure your URL is spelled correctly. If all else fails, you can
- visit our home page at the link below.
- </p>
- <a href='$homeUrl'>Visit the Home Page</a>
- </body>
-</html>
-END;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/PhpError.php b/server/vendor/slim/slim/Slim/Handlers/PhpError.php
deleted file mode 100644
index 3ecce30..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/PhpError.php
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Http\Body;
-use UnexpectedValueException;
-
-/**
- * Default Slim application error handler for PHP 7+ Throwables
- *
- * It outputs the error message and diagnostic information in either JSON, XML,
- * or HTML based on the Accept header.
- */
-class PhpError extends AbstractError
-{
- /**
- * Invoke error handler
- *
- * @param ServerRequestInterface $request The most recent Request object
- * @param ResponseInterface $response The most recent Response object
- * @param \Throwable $error The caught Throwable object
- *
- * @return ResponseInterface
- * @throws UnexpectedValueException
- */
- public function __invoke(ServerRequestInterface $request, ResponseInterface $response, \Throwable $error)
- {
- $contentType = $this->determineContentType($request);
- switch ($contentType) {
- case 'application/json':
- $output = $this->renderJsonErrorMessage($error);
- break;
-
- case 'text/xml':
- case 'application/xml':
- $output = $this->renderXmlErrorMessage($error);
- break;
-
- case 'text/html':
- $output = $this->renderHtmlErrorMessage($error);
- break;
- default:
- throw new UnexpectedValueException('Cannot render unknown content type ' . $contentType);
- }
-
- $this->writeToErrorLog($error);
-
- $body = new Body(fopen('php://temp', 'r+'));
- $body->write($output);
-
- return $response
- ->withStatus(500)
- ->withHeader('Content-type', $contentType)
- ->withBody($body);
- }
-
- /**
- * Render HTML error page
- *
- * @param \Throwable $error
- *
- * @return string
- */
- protected function renderHtmlErrorMessage(\Throwable $error)
- {
- $title = 'Slim Application Error';
-
- if ($this->displayErrorDetails) {
- $html = '<p>The application could not run because of the following error:</p>';
- $html .= '<h2>Details</h2>';
- $html .= $this->renderHtmlError($error);
-
- while ($error = $error->getPrevious()) {
- $html .= '<h2>Previous error</h2>';
- $html .= $this->renderHtmlError($error);
- }
- } else {
- $html = '<p>A website error has occurred. Sorry for the temporary inconvenience.</p>';
- }
-
- $output = sprintf(
- "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>" .
- "<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>%s</body></html>",
- $title,
- $title,
- $html
- );
-
- return $output;
- }
-
- /**
- * Render error as HTML.
- *
- * @param \Throwable $error
- *
- * @return string
- */
- protected function renderHtmlError(\Throwable $error)
- {
- $html = sprintf('<div><strong>Type:</strong> %s</div>', get_class($error));
-
- if (($code = $error->getCode())) {
- $html .= sprintf('<div><strong>Code:</strong> %s</div>', $code);
- }
-
- if (($message = $error->getMessage())) {
- $html .= sprintf('<div><strong>Message:</strong> %s</div>', htmlentities($message));
- }
-
- if (($file = $error->getFile())) {
- $html .= sprintf('<div><strong>File:</strong> %s</div>', $file);
- }
-
- if (($line = $error->getLine())) {
- $html .= sprintf('<div><strong>Line:</strong> %s</div>', $line);
- }
-
- if (($trace = $error->getTraceAsString())) {
- $html .= '<h2>Trace</h2>';
- $html .= sprintf('<pre>%s</pre>', htmlentities($trace));
- }
-
- return $html;
- }
-
- /**
- * Render JSON error
- *
- * @param \Throwable $error
- *
- * @return string
- */
- protected function renderJsonErrorMessage(\Throwable $error)
- {
- $json = [
- 'message' => 'Slim Application Error',
- ];
-
- if ($this->displayErrorDetails) {
- $json['error'] = [];
-
- do {
- $json['error'][] = [
- 'type' => get_class($error),
- 'code' => $error->getCode(),
- 'message' => $error->getMessage(),
- 'file' => $error->getFile(),
- 'line' => $error->getLine(),
- 'trace' => explode("\n", $error->getTraceAsString()),
- ];
- } while ($error = $error->getPrevious());
- }
-
- return json_encode($json, JSON_PRETTY_PRINT);
- }
-
- /**
- * Render XML error
- *
- * @param \Throwable $error
- *
- * @return string
- */
- protected function renderXmlErrorMessage(\Throwable $error)
- {
- $xml = "<error>\n <message>Slim Application Error</message>\n";
- if ($this->displayErrorDetails) {
- do {
- $xml .= " <error>\n";
- $xml .= " <type>" . get_class($error) . "</type>\n";
- $xml .= " <code>" . $error->getCode() . "</code>\n";
- $xml .= " <message>" . $this->createCdataSection($error->getMessage()) . "</message>\n";
- $xml .= " <file>" . $error->getFile() . "</file>\n";
- $xml .= " <line>" . $error->getLine() . "</line>\n";
- $xml .= " <trace>" . $this->createCdataSection($error->getTraceAsString()) . "</trace>\n";
- $xml .= " </error>\n";
- } while ($error = $error->getPrevious());
- }
- $xml .= "</error>";
-
- return $xml;
- }
-
- /**
- * Returns a CDATA section with the given content.
- *
- * @param string $content
- * @return string
- */
- private function createCdataSection($content)
- {
- return sprintf('<![CDATA[%s]]>', str_replace(']]>', ']]]]><![CDATA[>', $content));
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php b/server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php
deleted file mode 100644
index ad99b56..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers\Strategies;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Interfaces\InvocationStrategyInterface;
-
-/**
- * Default route callback strategy with route parameters as an array of arguments.
- */
-class RequestResponse implements InvocationStrategyInterface
-{
- /**
- * Invoke a route callable with request, response, and all route parameters
- * as an array of arguments.
- *
- * @param array|callable $callable
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- * @param array $routeArguments
- *
- * @return mixed
- */
- public function __invoke(
- callable $callable,
- ServerRequestInterface $request,
- ResponseInterface $response,
- array $routeArguments
- ) {
- foreach ($routeArguments as $k => $v) {
- $request = $request->withAttribute($k, $v);
- }
-
- return call_user_func($callable, $request, $response, $routeArguments);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php b/server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php
deleted file mode 100644
index 739cc7e..0000000
--- a/server/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Handlers\Strategies;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Slim\Interfaces\InvocationStrategyInterface;
-
-/**
- * Route callback strategy with route parameters as individual arguments.
- */
-class RequestResponseArgs implements InvocationStrategyInterface
-{
-
- /**
- * Invoke a route callable with request, response and all route parameters
- * as individual arguments.
- *
- * @param array|callable $callable
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- * @param array $routeArguments
- *
- * @return mixed
- */
- public function __invoke(
- callable $callable,
- ServerRequestInterface $request,
- ResponseInterface $response,
- array $routeArguments
- ) {
- array_unshift($routeArguments, $request, $response);
-
- return call_user_func_array($callable, $routeArguments);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Body.php b/server/vendor/slim/slim/Slim/Http/Body.php
deleted file mode 100644
index 7a7b4df..0000000
--- a/server/vendor/slim/slim/Slim/Http/Body.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-/**
- * Body
- *
- * This class represents an HTTP message body and encapsulates a
- * streamable resource according to the PSR-7 standard.
- *
- * @link https://github.com/php-fig/http-message/blob/master/src/StreamInterface.php
- */
-class Body extends Stream
-{
-
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Cookies.php b/server/vendor/slim/slim/Slim/Http/Cookies.php
deleted file mode 100644
index c07c96f..0000000
--- a/server/vendor/slim/slim/Slim/Http/Cookies.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use InvalidArgumentException;
-use Slim\Interfaces\Http\CookiesInterface;
-
-/**
- * Cookie helper
- */
-class Cookies implements CookiesInterface
-{
- /**
- * Cookies from HTTP request
- *
- * @var array
- */
- protected $requestCookies = [];
-
- /**
- * Cookies for HTTP response
- *
- * @var array
- */
- protected $responseCookies = [];
-
- /**
- * Default cookie properties
- *
- * @var array
- */
- protected $defaults = [
- 'value' => '',
- 'domain' => null,
- 'hostonly' => null,
- 'path' => null,
- 'expires' => null,
- 'secure' => false,
- 'httponly' => false
- ];
-
- /**
- * Create new cookies helper
- *
- * @param array $cookies
- */
- public function __construct(array $cookies = [])
- {
- $this->requestCookies = $cookies;
- }
-
- /**
- * Set default cookie properties
- *
- * @param array $settings
- */
- public function setDefaults(array $settings)
- {
- $this->defaults = array_replace($this->defaults, $settings);
- }
-
- /**
- * Get request cookie
- *
- * @param string $name Cookie name
- * @param mixed $default Cookie default value
- *
- * @return mixed Cookie value if present, else default
- */
- public function get($name, $default = null)
- {
- return isset($this->requestCookies[$name]) ? $this->requestCookies[$name] : $default;
- }
-
- /**
- * Set response cookie
- *
- * @param string $name Cookie name
- * @param string|array $value Cookie value, or cookie properties
- */
- public function set($name, $value)
- {
- if (!is_array($value)) {
- $value = ['value' => (string)$value];
- }
- $this->responseCookies[$name] = array_replace($this->defaults, $value);
- }
-
- /**
- * Convert to `Set-Cookie` headers
- *
- * @return string[]
- */
- public function toHeaders()
- {
- $headers = [];
- foreach ($this->responseCookies as $name => $properties) {
- $headers[] = $this->toHeader($name, $properties);
- }
-
- return $headers;
- }
-
- /**
- * Convert to `Set-Cookie` header
- *
- * @param string $name Cookie name
- * @param array $properties Cookie properties
- *
- * @return string
- */
- protected function toHeader($name, array $properties)
- {
- $result = urlencode($name) . '=' . urlencode($properties['value']);
-
- if (isset($properties['domain'])) {
- $result .= '; domain=' . $properties['domain'];
- }
-
- if (isset($properties['path'])) {
- $result .= '; path=' . $properties['path'];
- }
-
- if (isset($properties['expires'])) {
- if (is_string($properties['expires'])) {
- $timestamp = strtotime($properties['expires']);
- } else {
- $timestamp = (int)$properties['expires'];
- }
- if ($timestamp !== 0) {
- $result .= '; expires=' . gmdate('D, d-M-Y H:i:s e', $timestamp);
- }
- }
-
- if (isset($properties['secure']) && $properties['secure']) {
- $result .= '; secure';
- }
-
- if (isset($properties['hostonly']) && $properties['hostonly']) {
- $result .= '; HostOnly';
- }
-
- if (isset($properties['httponly']) && $properties['httponly']) {
- $result .= '; HttpOnly';
- }
-
- return $result;
- }
-
- /**
- * Parse HTTP request `Cookie:` header and extract
- * into a PHP associative array.
- *
- * @param string $header The raw HTTP request `Cookie:` header
- *
- * @return array Associative array of cookie names and values
- *
- * @throws InvalidArgumentException if the cookie data cannot be parsed
- */
- public static function parseHeader($header)
- {
- if (is_array($header) === true) {
- $header = isset($header[0]) ? $header[0] : '';
- }
-
- if (is_string($header) === false) {
- throw new InvalidArgumentException('Cannot parse Cookie data. Header value must be a string.');
- }
-
- $header = rtrim($header, "\r\n");
- $pieces = preg_split('@[;]\s*@', $header);
- $cookies = [];
-
- foreach ($pieces as $cookie) {
- $cookie = explode('=', $cookie, 2);
-
- if (count($cookie) === 2) {
- $key = urldecode($cookie[0]);
- $value = urldecode($cookie[1]);
-
- if (!isset($cookies[$key])) {
- $cookies[$key] = $value;
- }
- }
- }
-
- return $cookies;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Environment.php b/server/vendor/slim/slim/Slim/Http/Environment.php
deleted file mode 100644
index 786dc0a..0000000
--- a/server/vendor/slim/slim/Slim/Http/Environment.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use Slim\Collection;
-use Slim\Interfaces\Http\EnvironmentInterface;
-
-/**
- * Environment
- *
- * This class decouples the Slim application from the global PHP environment.
- * This is particularly useful for unit testing, but it also lets us create
- * custom sub-requests.
- */
-class Environment extends Collection implements EnvironmentInterface
-{
- /**
- * Create mock environment
- *
- * @param array $userData Array of custom environment keys and values
- *
- * @return self
- */
- public static function mock(array $userData = [])
- {
- $data = array_merge([
- 'SERVER_PROTOCOL' => 'HTTP/1.1',
- 'REQUEST_METHOD' => 'GET',
- 'SCRIPT_NAME' => '',
- 'REQUEST_URI' => '',
- 'QUERY_STRING' => '',
- 'SERVER_NAME' => 'localhost',
- 'SERVER_PORT' => 80,
- 'HTTP_HOST' => 'localhost',
- 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
- 'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8',
- 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
- 'HTTP_USER_AGENT' => 'Slim Framework',
- 'REMOTE_ADDR' => '127.0.0.1',
- 'REQUEST_TIME' => time(),
- 'REQUEST_TIME_FLOAT' => microtime(true),
- ], $userData);
-
- return new static($data);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Headers.php b/server/vendor/slim/slim/Slim/Http/Headers.php
deleted file mode 100644
index f8c4ac1..0000000
--- a/server/vendor/slim/slim/Slim/Http/Headers.php
+++ /dev/null
@@ -1,222 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use Slim\Collection;
-use Slim\Interfaces\Http\HeadersInterface;
-
-/**
- * Headers
- *
- * This class represents a collection of HTTP headers
- * that is used in both the HTTP request and response objects.
- * It also enables header name case-insensitivity when
- * getting or setting a header value.
- *
- * Each HTTP header can have multiple values. This class
- * stores values into an array for each header name. When
- * you request a header value, you receive an array of values
- * for that header.
- */
-class Headers extends Collection implements HeadersInterface
-{
- /**
- * Special HTTP headers that do not have the "HTTP_" prefix
- *
- * @var array
- */
- protected static $special = [
- 'CONTENT_TYPE' => 1,
- 'CONTENT_LENGTH' => 1,
- 'PHP_AUTH_USER' => 1,
- 'PHP_AUTH_PW' => 1,
- 'PHP_AUTH_DIGEST' => 1,
- 'AUTH_TYPE' => 1,
- ];
-
- /**
- * Create new headers collection with data extracted from
- * the application Environment object
- *
- * @param Environment $environment The Slim application Environment
- *
- * @return self
- */
- public static function createFromEnvironment(Environment $environment)
- {
- $data = [];
- $environment = self::determineAuthorization($environment);
- foreach ($environment as $key => $value) {
- $key = strtoupper($key);
- if (isset(static::$special[$key]) || strpos($key, 'HTTP_') === 0) {
- if ($key !== 'HTTP_CONTENT_LENGTH') {
- $data[$key] = $value;
- }
- }
- }
-
- return new static($data);
- }
-
- /**
- * If HTTP_AUTHORIZATION does not exist tries to get it from
- * getallheaders() when available.
- *
- * @param Environment $environment The Slim application Environment
- *
- * @return Environment
- */
-
- public static function determineAuthorization(Environment $environment)
- {
- $authorization = $environment->get('HTTP_AUTHORIZATION');
-
- if (null === $authorization && is_callable('getallheaders')) {
- $headers = getallheaders();
- $headers = array_change_key_case($headers, CASE_LOWER);
- if (isset($headers['authorization'])) {
- $environment->set('HTTP_AUTHORIZATION', $headers['authorization']);
- }
- }
-
- return $environment;
- }
-
- /**
- * Return array of HTTP header names and values.
- * This method returns the _original_ header name
- * as specified by the end user.
- *
- * @return array
- */
- public function all()
- {
- $all = parent::all();
- $out = [];
- foreach ($all as $key => $props) {
- $out[$props['originalKey']] = $props['value'];
- }
-
- return $out;
- }
-
- /**
- * Set HTTP header value
- *
- * This method sets a header value. It replaces
- * any values that may already exist for the header name.
- *
- * @param string $key The case-insensitive header name
- * @param string $value The header value
- */
- public function set($key, $value)
- {
- if (!is_array($value)) {
- $value = [$value];
- }
- parent::set($this->normalizeKey($key), [
- 'value' => $value,
- 'originalKey' => $key
- ]);
- }
-
- /**
- * Get HTTP header value
- *
- * @param string $key The case-insensitive header name
- * @param mixed $default The default value if key does not exist
- *
- * @return string[]
- */
- public function get($key, $default = null)
- {
- if ($this->has($key)) {
- return parent::get($this->normalizeKey($key))['value'];
- }
-
- return $default;
- }
-
- /**
- * Get HTTP header key as originally specified
- *
- * @param string $key The case-insensitive header name
- * @param mixed $default The default value if key does not exist
- *
- * @return string
- */
- public function getOriginalKey($key, $default = null)
- {
- if ($this->has($key)) {
- return parent::get($this->normalizeKey($key))['originalKey'];
- }
-
- return $default;
- }
-
- /**
- * Add HTTP header value
- *
- * This method appends a header value. Unlike the set() method,
- * this method _appends_ this new value to any values
- * that already exist for this header name.
- *
- * @param string $key The case-insensitive header name
- * @param array|string $value The new header value(s)
- */
- public function add($key, $value)
- {
- $oldValues = $this->get($key, []);
- $newValues = is_array($value) ? $value : [$value];
- $this->set($key, array_merge($oldValues, array_values($newValues)));
- }
-
- /**
- * Does this collection have a given header?
- *
- * @param string $key The case-insensitive header name
- *
- * @return bool
- */
- public function has($key)
- {
- return parent::has($this->normalizeKey($key));
- }
-
- /**
- * Remove header from collection
- *
- * @param string $key The case-insensitive header name
- */
- public function remove($key)
- {
- parent::remove($this->normalizeKey($key));
- }
-
- /**
- * Normalize header name
- *
- * This method transforms header names into a
- * normalized form. This is how we enable case-insensitive
- * header names in the other methods in this class.
- *
- * @param string $key The case-insensitive header name
- *
- * @return string Normalized header name
- */
- public function normalizeKey($key)
- {
- $key = strtr(strtolower($key), '_', '-');
- if (strpos($key, 'http-') === 0) {
- $key = substr($key, 5);
- }
-
- return $key;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Message.php b/server/vendor/slim/slim/Slim/Http/Message.php
deleted file mode 100644
index d02a43c..0000000
--- a/server/vendor/slim/slim/Slim/Http/Message.php
+++ /dev/null
@@ -1,304 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use InvalidArgumentException;
-use Psr\Http\Message\MessageInterface;
-use Psr\Http\Message\StreamInterface;
-
-/**
- * Abstract message (base class for Request and Response)
- *
- * This class represents a general HTTP message. It provides common properties and methods for
- * the HTTP request and response, as defined in the PSR-7 MessageInterface.
- *
- * @link https://github.com/php-fig/http-message/blob/master/src/MessageInterface.php
- * @see Slim\Http\Request
- * @see Slim\Http\Response
- */
-abstract class Message implements MessageInterface
-{
- /**
- * Protocol version
- *
- * @var string
- */
- protected $protocolVersion = '1.1';
-
- /**
- * A map of valid protocol versions
- *
- * @var array
- */
- protected static $validProtocolVersions = [
- '1.0' => true,
- '1.1' => true,
- '2.0' => true,
- ];
-
- /**
- * Headers
- *
- * @var \Slim\Interfaces\Http\HeadersInterface
- */
- protected $headers;
-
- /**
- * Body object
- *
- * @var \Psr\Http\Message\StreamInterface
- */
- protected $body;
-
-
- /**
- * Disable magic setter to ensure immutability
- */
- public function __set($name, $value)
- {
- // Do nothing
- }
-
- /*******************************************************************************
- * Protocol
- ******************************************************************************/
-
- /**
- * Retrieves the HTTP protocol version as a string.
- *
- * The string MUST contain only the HTTP version number (e.g., "1.1", "1.0").
- *
- * @return string HTTP protocol version.
- */
- public function getProtocolVersion()
- {
- return $this->protocolVersion;
- }
-
- /**
- * Return an instance with the specified HTTP protocol version.
- *
- * The version string MUST contain only the HTTP version number (e.g.,
- * "1.1", "1.0").
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new protocol version.
- *
- * @param string $version HTTP protocol version
- * @return static
- * @throws InvalidArgumentException if the http version is an invalid number
- */
- 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;
- }
-
- /*******************************************************************************
- * Headers
- ******************************************************************************/
-
- /**
- * Retrieves all message header values.
- *
- * The keys represent the header name as it will be sent over the wire, and
- * each value is an array of strings associated with the header.
- *
- * // Represent the headers as a string
- * foreach ($message->getHeaders() as $name => $values) {
- * echo $name . ": " . implode(", ", $values);
- * }
- *
- * // Emit headers iteratively:
- * foreach ($message->getHeaders() as $name => $values) {
- * foreach ($values as $value) {
- * header(sprintf('%s: %s', $name, $value), false);
- * }
- * }
- *
- * While header names are not case-sensitive, getHeaders() will preserve the
- * exact case in which headers were originally specified.
- *
- * @return array Returns an associative array of the message's headers. Each
- * key MUST be a header name, and each value MUST be an array of strings
- * for that header.
- */
- public function getHeaders()
- {
- return $this->headers->all();
- }
-
- /**
- * Checks if a header exists by the given case-insensitive name.
- *
- * @param string $name Case-insensitive header field name.
- * @return bool Returns true if any header names match the given header
- * name using a case-insensitive string comparison. Returns false if
- * no matching header name is found in the message.
- */
- public function hasHeader($name)
- {
- return $this->headers->has($name);
- }
-
- /**
- * Retrieves a message header value by the given case-insensitive name.
- *
- * This method returns an array of all the header values of the given
- * case-insensitive header name.
- *
- * If the header does not appear in the message, this method MUST return an
- * empty array.
- *
- * @param string $name Case-insensitive header field name.
- * @return string[] An array of string values as provided for the given
- * header. If the header does not appear in the message, this method MUST
- * return an empty array.
- */
- public function getHeader($name)
- {
- return $this->headers->get($name, []);
- }
-
- /**
- * Retrieves a comma-separated string of the values for a single header.
- *
- * This method returns all of the header values of the given
- * case-insensitive header name as a string concatenated together using
- * a comma.
- *
- * NOTE: Not all header values may be appropriately represented using
- * comma concatenation. For such headers, use getHeader() instead
- * and supply your own delimiter when concatenating.
- *
- * If the header does not appear in the message, this method MUST return
- * an empty string.
- *
- * @param string $name Case-insensitive header field name.
- * @return string A string of values as provided for the given header
- * concatenated together using a comma. If the header does not appear in
- * the message, this method MUST return an empty string.
- */
- public function getHeaderLine($name)
- {
- return implode(',', $this->headers->get($name, []));
- }
-
- /**
- * Return an instance with the provided value replacing the specified header.
- *
- * While header names are case-insensitive, the casing of the header will
- * be preserved by this function, and returned from getHeaders().
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new and/or updated header and value.
- *
- * @param string $name Case-insensitive header field name.
- * @param string|string[] $value Header value(s).
- * @return static
- * @throws \InvalidArgumentException for invalid header names or values.
- */
- public function withHeader($name, $value)
- {
- $clone = clone $this;
- $clone->headers->set($name, $value);
-
- return $clone;
- }
-
- /**
- * Return an instance with the specified header appended with the given value.
- *
- * Existing values for the specified header will be maintained. The new
- * value(s) will be appended to the existing list. If the header did not
- * exist previously, it will be added.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new header and/or value.
- *
- * @param string $name Case-insensitive header field name to add.
- * @param string|string[] $value Header value(s).
- * @return static
- * @throws \InvalidArgumentException for invalid header names or values.
- */
- public function withAddedHeader($name, $value)
- {
- $clone = clone $this;
- $clone->headers->add($name, $value);
-
- return $clone;
- }
-
- /**
- * Return an instance without the specified header.
- *
- * Header resolution MUST be done without case-sensitivity.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that removes
- * the named header.
- *
- * @param string $name Case-insensitive header field name to remove.
- * @return static
- */
- public function withoutHeader($name)
- {
- $clone = clone $this;
- $clone->headers->remove($name);
-
- return $clone;
- }
-
- /*******************************************************************************
- * Body
- ******************************************************************************/
-
- /**
- * Gets the body of the message.
- *
- * @return StreamInterface Returns the body as a stream.
- */
- public function getBody()
- {
- return $this->body;
- }
-
- /**
- * Return an instance with the specified message body.
- *
- * The body MUST be a StreamInterface object.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return a new instance that has the
- * new body stream.
- *
- * @param StreamInterface $body Body.
- * @return static
- * @throws \InvalidArgumentException When the body is not valid.
- */
- public function withBody(StreamInterface $body)
- {
- // TODO: Test for invalid body?
- $clone = clone $this;
- $clone->body = $body;
-
- return $clone;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Request.php b/server/vendor/slim/slim/Slim/Http/Request.php
deleted file mode 100644
index f67050b..0000000
--- a/server/vendor/slim/slim/Slim/Http/Request.php
+++ /dev/null
@@ -1,1216 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use Closure;
-use InvalidArgumentException;
-use Psr\Http\Message\UploadedFileInterface;
-use RuntimeException;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\UriInterface;
-use Psr\Http\Message\StreamInterface;
-use Slim\Collection;
-use Slim\Exception\InvalidMethodException;
-use Slim\Exception\MethodNotAllowedException;
-use Slim\Interfaces\Http\HeadersInterface;
-
-/**
- * Request
- *
- * This class represents an HTTP request. It manages
- * the request method, URI, headers, cookies, and body
- * according to the PSR-7 standard.
- *
- * @link https://github.com/php-fig/http-message/blob/master/src/MessageInterface.php
- * @link https://github.com/php-fig/http-message/blob/master/src/RequestInterface.php
- * @link https://github.com/php-fig/http-message/blob/master/src/ServerRequestInterface.php
- */
-class Request extends Message implements ServerRequestInterface
-{
- /**
- * The request method
- *
- * @var string
- */
- protected $method;
-
- /**
- * The original request method (ignoring override)
- *
- * @var string
- */
- protected $originalMethod;
-
- /**
- * The request URI object
- *
- * @var \Psr\Http\Message\UriInterface
- */
- protected $uri;
-
- /**
- * The request URI target (path + query string)
- *
- * @var string
- */
- protected $requestTarget;
-
- /**
- * The request query string params
- *
- * @var array
- */
- protected $queryParams;
-
- /**
- * The request cookies
- *
- * @var array
- */
- protected $cookies;
-
- /**
- * The server environment variables at the time the request was created.
- *
- * @var array
- */
- protected $serverParams;
-
- /**
- * The request attributes (route segment names and values)
- *
- * @var \Slim\Collection
- */
- protected $attributes;
-
- /**
- * The request body parsed (if possible) into a PHP array or object
- *
- * @var null|array|object
- */
- protected $bodyParsed = false;
-
- /**
- * List of request body parsers (e.g., url-encoded, JSON, XML, multipart)
- *
- * @var callable[]
- */
- protected $bodyParsers = [];
-
- /**
- * List of uploaded files
- *
- * @var UploadedFileInterface[]
- */
- protected $uploadedFiles;
-
- /**
- * Valid request methods
- *
- * @var string[]
- */
- protected $validMethods = [
- 'CONNECT' => 1,
- 'DELETE' => 1,
- 'GET' => 1,
- 'HEAD' => 1,
- 'OPTIONS' => 1,
- 'PATCH' => 1,
- 'POST' => 1,
- 'PUT' => 1,
- 'TRACE' => 1,
- ];
-
- /**
- * Create new HTTP request with data extracted from the application
- * Environment object
- *
- * @param Environment $environment The Slim application Environment
- *
- * @return static
- */
- public static function createFromEnvironment(Environment $environment)
- {
- $method = $environment['REQUEST_METHOD'];
- $uri = Uri::createFromEnvironment($environment);
- $headers = Headers::createFromEnvironment($environment);
- $cookies = Cookies::parseHeader($headers->get('Cookie', []));
- $serverParams = $environment->all();
- $body = new RequestBody();
- $uploadedFiles = UploadedFile::createFromEnvironment($environment);
-
- $request = new static($method, $uri, $headers, $cookies, $serverParams, $body, $uploadedFiles);
-
- if ($method === 'POST' &&
- in_array($request->getMediaType(), ['application/x-www-form-urlencoded', 'multipart/form-data'])
- ) {
- // parsed body must be $_POST
- $request = $request->withParsedBody($_POST);
- }
- return $request;
- }
-
- /**
- * Create new HTTP request.
- *
- * Adds a host header when none was provided and a host is defined in uri.
- *
- * @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 InvalidMethodException on invalid HTTP method
- */
- public function __construct(
- $method,
- UriInterface $uri,
- HeadersInterface $headers,
- array $cookies,
- array $serverParams,
- StreamInterface $body,
- array $uploadedFiles = []
- ) {
- try {
- $this->originalMethod = $this->filterMethod($method);
- } catch (InvalidMethodException $e) {
- $this->originalMethod = $method;
- }
-
- $this->uri = $uri;
- $this->headers = $headers;
- $this->cookies = $cookies;
- $this->serverParams = $serverParams;
- $this->attributes = new Collection();
- $this->body = $body;
- $this->uploadedFiles = $uploadedFiles;
-
- if (isset($serverParams['SERVER_PROTOCOL'])) {
- $this->protocolVersion = str_replace('HTTP/', '', $serverParams['SERVER_PROTOCOL']);
- }
-
- if (!$this->headers->has('Host') || $this->uri->getHost() !== '') {
- $this->headers->set('Host', $this->uri->getHost());
- }
-
- $this->registerMediaTypeParser('application/json', function ($input) {
- $result = json_decode($input, true);
- if (!is_array($result)) {
- return null;
- }
- return $result;
- });
-
- $this->registerMediaTypeParser('application/xml', function ($input) {
- $backup = libxml_disable_entity_loader(true);
- $backup_errors = libxml_use_internal_errors(true);
- $result = simplexml_load_string($input);
- libxml_disable_entity_loader($backup);
- libxml_clear_errors();
- libxml_use_internal_errors($backup_errors);
- if ($result === false) {
- return null;
- }
- return $result;
- });
-
- $this->registerMediaTypeParser('text/xml', function ($input) {
- $backup = libxml_disable_entity_loader(true);
- $backup_errors = libxml_use_internal_errors(true);
- $result = simplexml_load_string($input);
- libxml_disable_entity_loader($backup);
- libxml_clear_errors();
- libxml_use_internal_errors($backup_errors);
- if ($result === false) {
- return null;
- }
- return $result;
- });
-
- $this->registerMediaTypeParser('application/x-www-form-urlencoded', function ($input) {
- parse_str($input, $data);
- return $data;
- });
-
- // if the request had an invalid method, we can throw it now
- if (isset($e) && $e instanceof InvalidMethodException) {
- throw $e;
- }
- }
-
- /**
- * 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->attributes = clone $this->attributes;
- $this->body = clone $this->body;
- }
-
- /*******************************************************************************
- * Method
- ******************************************************************************/
-
- /**
- * Retrieves the HTTP method of the request.
- *
- * @return string Returns the request method.
- */
- public function getMethod()
- {
- if ($this->method === null) {
- $this->method = $this->originalMethod;
- $customMethod = $this->getHeaderLine('X-Http-Method-Override');
-
- if ($customMethod) {
- $this->method = $this->filterMethod($customMethod);
- } elseif ($this->originalMethod === 'POST') {
- $overrideMethod = $this->filterMethod($this->getParsedBodyParam('_METHOD'));
- if ($overrideMethod !== null) {
- $this->method = $overrideMethod;
- }
-
- if ($this->getBody()->eof()) {
- $this->getBody()->rewind();
- }
- }
- }
-
- return $this->method;
- }
-
- /**
- * Get the original HTTP method (ignore override).
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return string
- */
- public function getOriginalMethod()
- {
- return $this->originalMethod;
- }
-
- /**
- * Return an instance with the provided HTTP method.
- *
- * While HTTP method names are typically all uppercase characters, HTTP
- * method names are case-sensitive and thus implementations SHOULD NOT
- * modify the given string.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * changed request method.
- *
- * @param string $method Case-sensitive method.
- * @return static
- * @throws \InvalidArgumentException for invalid HTTP methods.
- */
- public function withMethod($method)
- {
- $method = $this->filterMethod($method);
- $clone = clone $this;
- $clone->originalMethod = $method;
- $clone->method = $method;
-
- return $clone;
- }
-
- /**
- * Validate the HTTP method
- *
- * @param null|string $method
- * @return null|string
- * @throws \InvalidArgumentException on invalid HTTP method.
- */
- protected function filterMethod($method)
- {
- if ($method === null) {
- return $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))
- ));
- }
-
- $method = strtoupper($method);
- if (!isset($this->validMethods[$method])) {
- throw new InvalidMethodException($this, $method);
- }
-
- return $method;
- }
-
- /**
- * Does this request use a given method?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param string $method HTTP method
- * @return bool
- */
- public function isMethod($method)
- {
- return $this->getMethod() === $method;
- }
-
- /**
- * Is this a GET request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isGet()
- {
- return $this->isMethod('GET');
- }
-
- /**
- * Is this a POST request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isPost()
- {
- return $this->isMethod('POST');
- }
-
- /**
- * Is this a PUT request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isPut()
- {
- return $this->isMethod('PUT');
- }
-
- /**
- * Is this a PATCH request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isPatch()
- {
- return $this->isMethod('PATCH');
- }
-
- /**
- * Is this a DELETE request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isDelete()
- {
- return $this->isMethod('DELETE');
- }
-
- /**
- * Is this a HEAD request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isHead()
- {
- return $this->isMethod('HEAD');
- }
-
- /**
- * Is this a OPTIONS request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isOptions()
- {
- return $this->isMethod('OPTIONS');
- }
-
- /**
- * Is this an XHR request?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isXhr()
- {
- return $this->getHeaderLine('X-Requested-With') === 'XMLHttpRequest';
- }
-
- /*******************************************************************************
- * URI
- ******************************************************************************/
-
- /**
- * Retrieves the message's request target.
- *
- * Retrieves the message's request-target either as it will appear (for
- * clients), as it appeared at request (for servers), or as it was
- * specified for the instance (see withRequestTarget()).
- *
- * In most cases, this will be the origin-form of the composed URI,
- * unless a value was provided to the concrete implementation (see
- * withRequestTarget() below).
- *
- * If no URI is available, and no request-target has been specifically
- * provided, this method MUST return the string "/".
- *
- * @return string
- */
- public function getRequestTarget()
- {
- if ($this->requestTarget) {
- return $this->requestTarget;
- }
-
- if ($this->uri === null) {
- return '/';
- }
-
- $basePath = $this->uri->getBasePath();
- $path = $this->uri->getPath();
- $path = $basePath . '/' . ltrim($path, '/');
-
- $query = $this->uri->getQuery();
- if ($query) {
- $path .= '?' . $query;
- }
- $this->requestTarget = $path;
-
- return $this->requestTarget;
- }
-
- /**
- * Return an instance with the specific request-target.
- *
- * If the request needs a non-origin-form request-target — e.g., for
- * specifying an absolute-form, authority-form, or asterisk-form —
- * this method may be used to create an instance with the specified
- * request-target, verbatim.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * changed request target.
- *
- * @link http://tools.ietf.org/html/rfc7230#section-2.7 (for the various
- * request-target forms allowed in request messages)
- * @param mixed $requestTarget
- * @return static
- * @throws InvalidArgumentException if the request target is invalid
- */
- public function withRequestTarget($requestTarget)
- {
- if (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;
- }
-
- /**
- * Retrieves the URI instance.
- *
- * This method MUST return a UriInterface instance.
- *
- * @link http://tools.ietf.org/html/rfc3986#section-4.3
- * @return UriInterface Returns a UriInterface instance
- * representing the URI of the request.
- */
- public function getUri()
- {
- return $this->uri;
- }
-
- /**
- * Returns an instance with the provided URI.
- *
- * This method MUST update the Host header of the returned request by
- * default if the URI contains a host component. If the URI does not
- * contain a host component, any pre-existing Host header MUST be carried
- * over to the returned request.
- *
- * You can opt-in to preserving the original state of the Host header by
- * setting `$preserveHost` to `true`. When `$preserveHost` is set to
- * `true`, this method interacts with the Host header in the following ways:
- *
- * - If the the Host header is missing or empty, and the new URI contains
- * a host component, this method MUST update the Host header in the returned
- * request.
- * - If the Host header is missing or empty, and the new URI does not contain a
- * host component, this method MUST NOT update the Host header in the returned
- * request.
- * - If a Host header is present and non-empty, this method MUST NOT update
- * the Host header in the returned request.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * new UriInterface instance.
- *
- * @link http://tools.ietf.org/html/rfc3986#section-4.3
- * @param UriInterface $uri New request URI to use.
- * @param bool $preserveHost Preserve the original state of the Host header.
- * @return static
- */
- public function withUri(UriInterface $uri, $preserveHost = false)
- {
- $clone = clone $this;
- $clone->uri = $uri;
-
- if (!$preserveHost) {
- if ($uri->getHost() !== '') {
- $clone->headers->set('Host', $uri->getHost());
- }
- } else {
- if ($uri->getHost() !== '' && (!$this->hasHeader('Host') || $this->getHeaderLine('Host') === '')) {
- $clone->headers->set('Host', $uri->getHost());
- }
- }
-
- return $clone;
- }
-
- /**
- * Get request content type.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return string|null The request content type, if known
- */
- public function getContentType()
- {
- $result = $this->getHeader('Content-Type');
-
- return $result ? $result[0] : null;
- }
-
- /**
- * Get request media type, if known.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return string|null The request media type, minus content-type params
- */
- public function getMediaType()
- {
- $contentType = $this->getContentType();
- if ($contentType) {
- $contentTypeParts = preg_split('/\s*[;,]\s*/', $contentType);
-
- return strtolower($contentTypeParts[0]);
- }
-
- return null;
- }
-
- /**
- * Get request media type params, if known.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return array
- */
- public function getMediaTypeParams()
- {
- $contentType = $this->getContentType();
- $contentTypeParams = [];
- if ($contentType) {
- $contentTypeParts = preg_split('/\s*[;,]\s*/', $contentType);
- $contentTypePartsLength = count($contentTypeParts);
- for ($i = 1; $i < $contentTypePartsLength; $i++) {
- $paramParts = explode('=', $contentTypeParts[$i]);
- $contentTypeParams[strtolower($paramParts[0])] = $paramParts[1];
- }
- }
-
- return $contentTypeParams;
- }
-
- /**
- * Get request content character set, if known.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return string|null
- */
- public function getContentCharset()
- {
- $mediaTypeParams = $this->getMediaTypeParams();
- if (isset($mediaTypeParams['charset'])) {
- return $mediaTypeParams['charset'];
- }
-
- return null;
- }
-
- /**
- * Get request content length, if known.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return int|null
- */
- public function getContentLength()
- {
- $result = $this->headers->get('Content-Length');
-
- return $result ? (int)$result[0] : null;
- }
-
- /*******************************************************************************
- * Cookies
- ******************************************************************************/
-
- /**
- * Retrieve cookies.
- *
- * Retrieves cookies sent by the client to the server.
- *
- * The data MUST be compatible with the structure of the $_COOKIE
- * superglobal.
- *
- * @return array
- */
- public function getCookieParams()
- {
- return $this->cookies;
- }
-
- /**
- * Fetch cookie value from cookies sent by the client to the server.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param string $key The attribute name.
- * @param mixed $default Default value to return if the attribute does not exist.
- *
- * @return mixed
- */
- public function getCookieParam($key, $default = null)
- {
- $cookies = $this->getCookieParams();
- $result = $default;
- if (isset($cookies[$key])) {
- $result = $cookies[$key];
- }
-
- return $result;
- }
-
- /**
- * Return an instance with the specified cookies.
- *
- * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST
- * be compatible with the structure of $_COOKIE. Typically, this data will
- * be injected at instantiation.
- *
- * This method MUST NOT update the related Cookie header of the request
- * instance, nor related values in the server params.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated cookie values.
- *
- * @param array $cookies Array of key/value pairs representing cookies.
- * @return static
- */
- public function withCookieParams(array $cookies)
- {
- $clone = clone $this;
- $clone->cookies = $cookies;
-
- return $clone;
- }
-
- /*******************************************************************************
- * Query Params
- ******************************************************************************/
-
- /**
- * Retrieve query string arguments.
- *
- * Retrieves the deserialized query string arguments, if any.
- *
- * Note: the query params might not be in sync with the URI or server
- * params. If you need to ensure you are only getting the original
- * values, you may need to parse the query string from `getUri()->getQuery()`
- * or from the `QUERY_STRING` server param.
- *
- * @return array
- */
- public function getQueryParams()
- {
- if (is_array($this->queryParams)) {
- return $this->queryParams;
- }
-
- if ($this->uri === null) {
- return [];
- }
-
- parse_str($this->uri->getQuery(), $this->queryParams); // <-- URL decodes data
-
- return $this->queryParams;
- }
-
- /**
- * Return an instance with the specified query string arguments.
- *
- * These values SHOULD remain immutable over the course of the incoming
- * request. They MAY be injected during instantiation, such as from PHP's
- * $_GET superglobal, or MAY be derived from some other value such as the
- * URI. In cases where the arguments are parsed from the URI, the data
- * MUST be compatible with what PHP's parse_str() would return for
- * purposes of how duplicate query parameters are handled, and how nested
- * sets are handled.
- *
- * Setting query string arguments MUST NOT change the URI stored by the
- * request, nor the values in the server params.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated query string arguments.
- *
- * @param array $query Array of query string arguments, typically from
- * $_GET.
- * @return static
- */
- public function withQueryParams(array $query)
- {
- $clone = clone $this;
- $clone->queryParams = $query;
-
- return $clone;
- }
-
- /*******************************************************************************
- * File Params
- ******************************************************************************/
-
- /**
- * Retrieve normalized file upload data.
- *
- * This method returns upload metadata in a normalized tree, with each leaf
- * an instance of Psr\Http\Message\UploadedFileInterface.
- *
- * These values MAY be prepared from $_FILES or the message body during
- * instantiation, or MAY be injected via withUploadedFiles().
- *
- * @return array An array tree of UploadedFileInterface instances; an empty
- * array MUST be returned if no data is present.
- */
- public function getUploadedFiles()
- {
- return $this->uploadedFiles;
- }
-
- /**
- * Create a new instance with the specified uploaded files.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated body parameters.
- *
- * @param array $uploadedFiles An array tree of UploadedFileInterface instances.
- * @return static
- * @throws \InvalidArgumentException if an invalid structure is provided.
- */
- public function withUploadedFiles(array $uploadedFiles)
- {
- $clone = clone $this;
- $clone->uploadedFiles = $uploadedFiles;
-
- return $clone;
- }
-
- /*******************************************************************************
- * Server Params
- ******************************************************************************/
-
- /**
- * Retrieve server parameters.
- *
- * Retrieves data related to the incoming request environment,
- * typically derived from PHP's $_SERVER superglobal. The data IS NOT
- * REQUIRED to originate from $_SERVER.
- *
- * @return array
- */
- public function getServerParams()
- {
- return $this->serverParams;
- }
-
- /**
- * Retrieve a server parameter.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param string $key
- * @param mixed $default
- * @return mixed
- */
- public function getServerParam($key, $default = null)
- {
- $serverParams = $this->getServerParams();
-
- return isset($serverParams[$key]) ? $serverParams[$key] : $default;
- }
-
- /*******************************************************************************
- * Attributes
- ******************************************************************************/
-
- /**
- * Retrieve attributes derived from the request.
- *
- * The request "attributes" may be used to allow injection of any
- * parameters derived from the request: e.g., the results of path
- * match operations; the results of decrypting cookies; the results of
- * deserializing non-form-encoded message bodies; etc. Attributes
- * will be application and request specific, and CAN be mutable.
- *
- * @return array Attributes derived from the request.
- */
- public function getAttributes()
- {
- return $this->attributes->all();
- }
-
- /**
- * Retrieve a single derived request attribute.
- *
- * Retrieves a single derived request attribute as described in
- * getAttributes(). If the attribute has not been previously set, returns
- * the default value as provided.
- *
- * This method obviates the need for a hasAttribute() method, as it allows
- * specifying a default value to return if the attribute is not found.
- *
- * @see getAttributes()
- * @param string $name The attribute name.
- * @param mixed $default Default value to return if the attribute does not exist.
- * @return mixed
- */
- public function getAttribute($name, $default = null)
- {
- return $this->attributes->get($name, $default);
- }
-
- /**
- * Return an instance with the specified derived request attribute.
- *
- * This method allows setting a single derived request attribute as
- * described in getAttributes().
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated attribute.
- *
- * @see getAttributes()
- * @param string $name The attribute name.
- * @param mixed $value The value of the attribute.
- * @return static
- */
- public function withAttribute($name, $value)
- {
- $clone = clone $this;
- $clone->attributes->set($name, $value);
-
- return $clone;
- }
-
- /**
- * Create a new instance with the specified derived request attributes.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * This method allows setting all new derived request attributes as
- * described in getAttributes().
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return a new instance that has the
- * updated attributes.
- *
- * @param array $attributes New attributes
- * @return static
- */
- public function withAttributes(array $attributes)
- {
- $clone = clone $this;
- $clone->attributes = new Collection($attributes);
-
- return $clone;
- }
-
- /**
- * Return an instance that removes the specified derived request attribute.
- *
- * This method allows removing a single derived request attribute as
- * described in getAttributes().
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that removes
- * the attribute.
- *
- * @see getAttributes()
- * @param string $name The attribute name.
- * @return static
- */
- public function withoutAttribute($name)
- {
- $clone = clone $this;
- $clone->attributes->remove($name);
-
- return $clone;
- }
-
- /*******************************************************************************
- * Body
- ******************************************************************************/
-
- /**
- * Retrieve any parameters provided in the request body.
- *
- * If the request Content-Type is either application/x-www-form-urlencoded
- * or multipart/form-data, and the request method is POST, this method MUST
- * return the contents of $_POST.
- *
- * Otherwise, this method may return any results of deserializing
- * the request body content; as parsing returns structured content, the
- * potential types MUST be arrays or objects only. A null value indicates
- * the absence of body content.
- *
- * @return null|array|object The deserialized body parameters, if any.
- * These will typically be an array or object.
- * @throws RuntimeException if the request body media type parser returns an invalid value
- */
- public function getParsedBody()
- {
- if ($this->bodyParsed !== false) {
- return $this->bodyParsed;
- }
-
- if (!$this->body) {
- return null;
- }
-
- $mediaType = $this->getMediaType();
-
- // 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]) === true) {
- $body = (string)$this->getBody();
- $parsed = $this->bodyParsers[$mediaType]($body);
-
- if (!is_null($parsed) && !is_object($parsed) && !is_array($parsed)) {
- throw new RuntimeException(
- 'Request body media type parser return value must be an array, an object, or null'
- );
- }
- $this->bodyParsed = $parsed;
- return $this->bodyParsed;
- }
-
- return null;
- }
-
- /**
- * Return an instance with the specified body parameters.
- *
- * These MAY be injected during instantiation.
- *
- * If the request Content-Type is either application/x-www-form-urlencoded
- * or multipart/form-data, and the request method is POST, use this method
- * ONLY to inject the contents of $_POST.
- *
- * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
- * deserializing the request body content. Deserialization/parsing returns
- * structured data, and, as such, this method ONLY accepts arrays or objects,
- * or a null value if nothing was available to parse.
- *
- * As an example, if content negotiation determines that the request data
- * is a JSON payload, this method could be used to create a request
- * instance with the deserialized parameters.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated body parameters.
- *
- * @param null|array|object $data The deserialized body data. This will
- * typically be in an array or object.
- * @return static
- * @throws \InvalidArgumentException if an unsupported argument type is
- * provided.
- */
- public function withParsedBody($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->bodyParsed = $data;
-
- return $clone;
- }
-
- /**
- * Force Body to be parsed again.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return $this
- */
- public function reparseBody()
- {
- $this->bodyParsed = false;
-
- return $this;
- }
-
- /**
- * Register media type parser.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @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 registerMediaTypeParser($mediaType, callable $callable)
- {
- if ($callable instanceof Closure) {
- $callable = $callable->bindTo($this);
- }
- $this->bodyParsers[(string)$mediaType] = $callable;
- }
-
- /*******************************************************************************
- * Parameters (e.g., POST and GET data)
- ******************************************************************************/
-
- /**
- * Fetch request parameter value from body or query string (in that order).
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param string $key The parameter key.
- * @param string $default The default value.
- *
- * @return mixed The parameter value.
- */
- public function getParam($key, $default = null)
- {
- $postParams = $this->getParsedBody();
- $getParams = $this->getQueryParams();
- $result = $default;
- if (is_array($postParams) && isset($postParams[$key])) {
- $result = $postParams[$key];
- } elseif (is_object($postParams) && property_exists($postParams, $key)) {
- $result = $postParams->$key;
- } elseif (isset($getParams[$key])) {
- $result = $getParams[$key];
- }
-
- return $result;
- }
-
- /**
- * Fetch parameter value from request body.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param string $key
- * @param mixed $default
- *
- * @return mixed
- */
- public function getParsedBodyParam($key, $default = null)
- {
- $postParams = $this->getParsedBody();
- $result = $default;
- if (is_array($postParams) && isset($postParams[$key])) {
- $result = $postParams[$key];
- } elseif (is_object($postParams) && property_exists($postParams, $key)) {
- $result = $postParams->$key;
- }
-
- return $result;
- }
-
- /**
- * Fetch parameter value from query string.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param string $key
- * @param mixed $default
- *
- * @return mixed
- */
- public function getQueryParam($key, $default = null)
- {
- $getParams = $this->getQueryParams();
- $result = $default;
- if (isset($getParams[$key])) {
- $result = $getParams[$key];
- }
-
- return $result;
- }
-
- /**
- * Fetch associative array of body and query string parameters.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return array
- */
- public function getParams()
- {
- $params = $this->getQueryParams();
- $postParams = $this->getParsedBody();
- if ($postParams) {
- $params = array_merge($params, (array)$postParams);
- }
-
- return $params;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/RequestBody.php b/server/vendor/slim/slim/Slim/Http/RequestBody.php
deleted file mode 100644
index 50887fd..0000000
--- a/server/vendor/slim/slim/Slim/Http/RequestBody.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-/**
- * Provides a PSR-7 implementation of a reusable raw request body
- */
-class RequestBody extends Body
-{
- /**
- * Create a new RequestBody.
- */
- public function __construct()
- {
- $stream = fopen('php://temp', 'w+');
- stream_copy_to_stream(fopen('php://input', 'r'), $stream);
- rewind($stream);
-
- parent::__construct($stream);
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Response.php b/server/vendor/slim/slim/Slim/Http/Response.php
deleted file mode 100644
index dd96505..0000000
--- a/server/vendor/slim/slim/Slim/Http/Response.php
+++ /dev/null
@@ -1,480 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use InvalidArgumentException;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UriInterface;
-use Slim\Interfaces\Http\HeadersInterface;
-
-/**
- * Response
- *
- * This class represents an HTTP response. It manages
- * the response status, headers, and body
- * according to the PSR-7 standard.
- *
- * @link https://github.com/php-fig/http-message/blob/master/src/MessageInterface.php
- * @link https://github.com/php-fig/http-message/blob/master/src/ResponseInterface.php
- */
-class Response extends Message implements ResponseInterface
-{
- /**
- * Status code
- *
- * @var int
- */
- protected $status = 200;
-
- /**
- * Reason phrase
- *
- * @var string
- */
- protected $reasonPhrase = '';
-
- /**
- * Status codes and reason phrases
- *
- * @var array
- */
- protected static $messages = [
- //Informational 1xx
- 100 => 'Continue',
- 101 => 'Switching Protocols',
- 102 => 'Processing',
- //Successful 2xx
- 200 => 'OK',
- 201 => 'Created',
- 202 => 'Accepted',
- 203 => 'Non-Authoritative Information',
- 204 => 'No Content',
- 205 => 'Reset Content',
- 206 => 'Partial Content',
- 207 => 'Multi-Status',
- 208 => 'Already Reported',
- 226 => 'IM Used',
- //Redirection 3xx
- 300 => 'Multiple Choices',
- 301 => 'Moved Permanently',
- 302 => 'Found',
- 303 => 'See Other',
- 304 => 'Not Modified',
- 305 => 'Use Proxy',
- 306 => '(Unused)',
- 307 => 'Temporary Redirect',
- 308 => 'Permanent Redirect',
- //Client Error 4xx
- 400 => 'Bad Request',
- 401 => 'Unauthorized',
- 402 => 'Payment Required',
- 403 => 'Forbidden',
- 404 => 'Not Found',
- 405 => 'Method Not Allowed',
- 406 => 'Not Acceptable',
- 407 => 'Proxy Authentication Required',
- 408 => 'Request Timeout',
- 409 => 'Conflict',
- 410 => 'Gone',
- 411 => 'Length Required',
- 412 => 'Precondition Failed',
- 413 => 'Request Entity Too Large',
- 414 => 'Request-URI Too Long',
- 415 => 'Unsupported Media Type',
- 416 => 'Requested Range Not Satisfiable',
- 417 => 'Expectation Failed',
- 418 => 'I\'m a teapot',
- 421 => 'Misdirected Request',
- 422 => 'Unprocessable Entity',
- 423 => 'Locked',
- 424 => 'Failed Dependency',
- 426 => 'Upgrade Required',
- 428 => 'Precondition Required',
- 429 => 'Too Many Requests',
- 431 => 'Request Header Fields Too Large',
- 444 => 'Connection Closed Without Response',
- 451 => 'Unavailable For Legal Reasons',
- 499 => 'Client Closed Request',
- //Server Error 5xx
- 500 => 'Internal Server Error',
- 501 => 'Not Implemented',
- 502 => 'Bad Gateway',
- 503 => 'Service Unavailable',
- 504 => 'Gateway Timeout',
- 505 => 'HTTP Version Not Supported',
- 506 => 'Variant Also Negotiates',
- 507 => 'Insufficient Storage',
- 508 => 'Loop Detected',
- 510 => 'Not Extended',
- 511 => 'Network Authentication Required',
- 599 => 'Network Connect Timeout Error',
- ];
-
- /**
- * EOL characters used for HTTP response.
- *
- * @var string
- */
- const EOL = "\r\n";
-
- /**
- * Create new HTTP response.
- *
- * @param int $status The response status code.
- * @param HeadersInterface|null $headers The response headers.
- * @param StreamInterface|null $body The response body.
- */
- public function __construct($status = 200, HeadersInterface $headers = null, StreamInterface $body = null)
- {
- $this->status = $this->filterStatus($status);
- $this->headers = $headers ? $headers : new Headers();
- $this->body = $body ? $body : new Body(fopen('php://temp', 'r+'));
- }
-
- /**
- * 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;
- }
-
- /*******************************************************************************
- * Status
- ******************************************************************************/
-
- /**
- * Gets the response status code.
- *
- * The status code is a 3-digit integer result code of the server's attempt
- * to understand and satisfy the request.
- *
- * @return int Status code.
- */
- public function getStatusCode()
- {
- return $this->status;
- }
-
- /**
- * Return an instance with the specified status code and, optionally, reason phrase.
- *
- * If no reason phrase is specified, implementations MAY choose to default
- * to the RFC 7231 or IANA recommended reason phrase for the response's
- * status code.
- *
- * This method MUST be implemented in such a way as to retain the
- * immutability of the message, and MUST return an instance that has the
- * updated status and reason phrase.
- *
- * @link http://tools.ietf.org/html/rfc7231#section-6
- * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
- * @param int $code The 3-digit integer result code to set.
- * @param string $reasonPhrase The reason phrase to use with the
- * provided status code; if none is provided, implementations MAY
- * use the defaults as suggested in the HTTP specification.
- * @return static
- * @throws \InvalidArgumentException For invalid status code arguments.
- */
- public function withStatus($code, $reasonPhrase = '')
- {
- $code = $this->filterStatus($code);
-
- if (!is_string($reasonPhrase) && !method_exists($reasonPhrase, '__toString')) {
- throw new InvalidArgumentException('ReasonPhrase must be a string');
- }
-
- $clone = clone $this;
- $clone->status = $code;
- if ($reasonPhrase === '' && isset(static::$messages[$code])) {
- $reasonPhrase = static::$messages[$code];
- }
-
- if ($reasonPhrase === '') {
- throw new InvalidArgumentException('ReasonPhrase must be supplied for this code');
- }
-
- $clone->reasonPhrase = $reasonPhrase;
-
- return $clone;
- }
-
- /**
- * 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)
- {
- if (!is_integer($status) || $status<100 || $status>599) {
- throw new InvalidArgumentException('Invalid HTTP status code');
- }
-
- return $status;
- }
-
- /**
- * Gets the response reason phrase associated with the status code.
- *
- * Because a reason phrase is not a required element in a response
- * status line, the reason phrase value MAY be null. Implementations MAY
- * choose to return the default RFC 7231 recommended reason phrase (or those
- * listed in the IANA HTTP Status Code Registry) for the response's
- * status code.
- *
- * @link http://tools.ietf.org/html/rfc7231#section-6
- * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
- * @return string Reason phrase; must return an empty string if none present.
- */
- public function getReasonPhrase()
- {
- if ($this->reasonPhrase) {
- return $this->reasonPhrase;
- }
- if (isset(static::$messages[$this->status])) {
- return static::$messages[$this->status];
- }
- return '';
- }
-
- /*******************************************************************************
- * Body
- ******************************************************************************/
-
- /**
- * Write data to the response body.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * Proxies to the underlying stream and writes the provided data to it.
- *
- * @param string $data
- * @return $this
- */
- public function write($data)
- {
- $this->getBody()->write($data);
-
- return $this;
- }
-
- /*******************************************************************************
- * Response Helpers
- ******************************************************************************/
-
- /**
- * Redirect.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * This method prepares the response object to return an HTTP Redirect
- * response to the client.
- *
- * @param string|UriInterface $url The redirect destination.
- * @param int|null $status The redirect HTTP status code.
- * @return static
- */
- public function withRedirect($url, $status = null)
- {
- $responseWithRedirect = $this->withHeader('Location', (string)$url);
-
- if (is_null($status) && $this->getStatusCode() === 200) {
- $status = 302;
- }
-
- if (!is_null($status)) {
- return $responseWithRedirect->withStatus($status);
- }
-
- return $responseWithRedirect;
- }
-
- /**
- * Json.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * This method prepares the response object to return an HTTP Json
- * response to the client.
- *
- * @param mixed $data The data
- * @param int $status The HTTP status code.
- * @param int $encodingOptions Json encoding options
- * @throws \RuntimeException
- * @return static
- */
- public function withJson($data, $status = null, $encodingOptions = 0)
- {
- $response = $this->withBody(new Body(fopen('php://temp', 'r+')));
- $response->body->write($json = json_encode($data, $encodingOptions));
-
- // Ensure that the json encoding passed successfully
- if ($json === false) {
- throw new \RuntimeException(json_last_error_msg(), json_last_error());
- }
-
- $responseWithJson = $response->withHeader('Content-Type', 'application/json;charset=utf-8');
- if (isset($status)) {
- return $responseWithJson->withStatus($status);
- }
- return $responseWithJson;
- }
-
- /**
- * Is this response empty?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isEmpty()
- {
- return in_array($this->getStatusCode(), [204, 205, 304]);
- }
-
- /**
- * Is this response informational?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isInformational()
- {
- return $this->getStatusCode() >= 100 && $this->getStatusCode() < 200;
- }
-
- /**
- * Is this response OK?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isOk()
- {
- return $this->getStatusCode() === 200;
- }
-
- /**
- * Is this response successful?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isSuccessful()
- {
- return $this->getStatusCode() >= 200 && $this->getStatusCode() < 300;
- }
-
- /**
- * Is this response a redirect?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isRedirect()
- {
- return in_array($this->getStatusCode(), [301, 302, 303, 307]);
- }
-
- /**
- * Is this response a redirection?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isRedirection()
- {
- return $this->getStatusCode() >= 300 && $this->getStatusCode() < 400;
- }
-
- /**
- * Is this response forbidden?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- * @api
- */
- public function isForbidden()
- {
- return $this->getStatusCode() === 403;
- }
-
- /**
- * Is this response not Found?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isNotFound()
- {
- return $this->getStatusCode() === 404;
- }
-
- /**
- * Is this response a client error?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isClientError()
- {
- return $this->getStatusCode() >= 400 && $this->getStatusCode() < 500;
- }
-
- /**
- * Is this response a server error?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- public function isServerError()
- {
- return $this->getStatusCode() >= 500 && $this->getStatusCode() < 600;
- }
-
- /**
- * Convert response to string.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return string
- */
- public function __toString()
- {
- $output = sprintf(
- 'HTTP/%s %s %s',
- $this->getProtocolVersion(),
- $this->getStatusCode(),
- $this->getReasonPhrase()
- );
- $output .= Response::EOL;
- foreach ($this->getHeaders() as $name => $values) {
- $output .= sprintf('%s: %s', $name, $this->getHeaderLine($name)) . Response::EOL;
- }
- $output .= Response::EOL;
- $output .= (string)$this->getBody();
-
- return $output;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Stream.php b/server/vendor/slim/slim/Slim/Http/Stream.php
deleted file mode 100644
index 27c7a76..0000000
--- a/server/vendor/slim/slim/Slim/Http/Stream.php
+++ /dev/null
@@ -1,450 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use InvalidArgumentException;
-use Psr\Http\Message\StreamInterface;
-use RuntimeException;
-
-/**
- * Represents a data stream as defined in PSR-7.
- *
- * @link https://github.com/php-fig/http-message/blob/master/src/StreamInterface.php
- */
-class Stream implements StreamInterface
-{
- /**
- * Bit mask to determine if the stream is a pipe
- *
- * This is octal as per header stat.h
- */
- const FSTAT_MODE_S_IFIFO = 0010000;
-
- /**
- * Resource modes
- *
- * @var array
- * @link http://php.net/manual/function.fopen.php
- */
- protected static $modes = [
- 'readable' => ['r', 'r+', 'w+', 'a+', 'x+', 'c+'],
- 'writable' => ['r+', 'w', 'w+', 'a', 'a+', 'x', 'x+', 'c', 'c+'],
- ];
-
- /**
- * The underlying stream resource
- *
- * @var resource
- */
- protected $stream;
-
- /**
- * Stream metadata
- *
- * @var array
- */
- protected $meta;
-
- /**
- * Is this stream readable?
- *
- * @var bool
- */
- protected $readable;
-
- /**
- * Is this stream writable?
- *
- * @var bool
- */
- protected $writable;
-
- /**
- * Is this stream seekable?
- *
- * @var bool
- */
- protected $seekable;
-
- /**
- * The size of the stream if known
- *
- * @var null|int
- */
- protected $size;
-
- /**
- * Is this stream a pipe?
- *
- * @var bool
- */
- protected $isPipe;
-
- /**
- * Create a new Stream.
- *
- * @param resource $stream A PHP resource handle.
- *
- * @throws InvalidArgumentException If argument is not a resource.
- */
- public function __construct($stream)
- {
- $this->attach($stream);
- }
-
- /**
- * Get stream metadata as an associative array or retrieve a specific key.
- *
- * The keys returned are identical to the keys returned from PHP's
- * stream_get_meta_data() function.
- *
- * @link http://php.net/manual/en/function.stream-get-meta-data.php
- *
- * @param string $key Specific metadata to retrieve.
- *
- * @return array|mixed|null Returns an associative array if no key is
- * provided. Returns a specific key value if a key is provided and the
- * value is found, or null if the key is not found.
- */
- public function getMetadata($key = null)
- {
- $this->meta = stream_get_meta_data($this->stream);
- if (is_null($key) === true) {
- return $this->meta;
- }
-
- return isset($this->meta[$key]) ? $this->meta[$key] : null;
- }
-
- /**
- * Is a resource attached to this stream?
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @return bool
- */
- protected function isAttached()
- {
- return is_resource($this->stream);
- }
-
- /**
- * Attach new resource to this object.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param resource $newStream A PHP resource handle.
- *
- * @throws InvalidArgumentException If argument is not a valid PHP resource.
- */
- protected function attach($newStream)
- {
- if (is_resource($newStream) === false) {
- throw new InvalidArgumentException(__METHOD__ . ' argument must be a valid PHP resource');
- }
-
- if ($this->isAttached() === true) {
- $this->detach();
- }
-
- $this->stream = $newStream;
- }
-
- /**
- * Separates any underlying resources from the stream.
- *
- * After the stream has been detached, the stream is in an unusable state.
- *
- * @return resource|null Underlying PHP stream, if any
- */
- 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;
-
- return $oldResource;
- }
-
- /**
- * Reads all data from the stream into a string, from the beginning to end.
- *
- * This method MUST attempt to seek to the beginning of the stream before
- * reading data and read the stream until the end is reached.
- *
- * Warning: This could attempt to load a large amount of data into memory.
- *
- * This method MUST NOT raise an exception in order to conform with PHP's
- * string casting operations.
- *
- * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring
- * @return string
- */
- public function __toString()
- {
- if (!$this->isAttached()) {
- return '';
- }
-
- try {
- $this->rewind();
- return $this->getContents();
- } catch (RuntimeException $e) {
- return '';
- }
- }
-
- /**
- * Closes the stream and any underlying resources.
- */
- public function close()
- {
- if ($this->isAttached() === true) {
- if ($this->isPipe()) {
- pclose($this->stream);
- } else {
- fclose($this->stream);
- }
- }
-
- $this->detach();
- }
-
- /**
- * Get the size of the stream if known.
- *
- * @return int|null Returns the size in bytes if known, or null if unknown.
- */
- public function getSize()
- {
- if (!$this->size && $this->isAttached() === true) {
- $stats = fstat($this->stream);
- $this->size = isset($stats['size']) && !$this->isPipe() ? $stats['size'] : null;
- }
-
- return $this->size;
- }
-
- /**
- * Returns the current position of the file read/write pointer
- *
- * @return int Position of the file pointer
- *
- * @throws RuntimeException on error.
- */
- public function tell()
- {
- if (!$this->isAttached() || ($position = ftell($this->stream)) === false || $this->isPipe()) {
- throw new RuntimeException('Could not get the position of the pointer in stream');
- }
-
- return $position;
- }
-
- /**
- * Returns true if the stream is at the end of the stream.
- *
- * @return bool
- */
- public function eof()
- {
- return $this->isAttached() ? feof($this->stream) : true;
- }
-
- /**
- * Returns whether or not the stream is readable.
- *
- * @return bool
- */
- public function isReadable()
- {
- if ($this->readable === null) {
- if ($this->isPipe()) {
- $this->readable = true;
- } else {
- $this->readable = false;
- if ($this->isAttached()) {
- $meta = $this->getMetadata();
- foreach (self::$modes['readable'] as $mode) {
- if (strpos($meta['mode'], $mode) === 0) {
- $this->readable = true;
- break;
- }
- }
- }
- }
- }
-
- return $this->readable;
- }
-
- /**
- * Returns whether or not the stream is writable.
- *
- * @return bool
- */
- public function isWritable()
- {
- if ($this->writable === null) {
- $this->writable = false;
- if ($this->isAttached()) {
- $meta = $this->getMetadata();
- foreach (self::$modes['writable'] as $mode) {
- if (strpos($meta['mode'], $mode) === 0) {
- $this->writable = true;
- break;
- }
- }
- }
- }
-
- return $this->writable;
- }
-
- /**
- * Returns whether or not the stream is seekable.
- *
- * @return bool
- */
- public function isSeekable()
- {
- if ($this->seekable === null) {
- $this->seekable = false;
- if ($this->isAttached()) {
- $meta = $this->getMetadata();
- $this->seekable = !$this->isPipe() && $meta['seekable'];
- }
- }
-
- return $this->seekable;
- }
-
- /**
- * Seek to a position in the stream.
- *
- * @link http://www.php.net/manual/en/function.fseek.php
- *
- * @param int $offset Stream offset
- * @param int $whence Specifies how the cursor position will be calculated
- * based on the seek offset. Valid values are identical to the built-in
- * PHP $whence values for `fseek()`. SEEK_SET: Set position equal to
- * offset bytes SEEK_CUR: Set position to current location plus offset
- * SEEK_END: Set position to end-of-stream plus offset.
- *
- * @throws RuntimeException on failure.
- */
- public function seek($offset, $whence = SEEK_SET)
- {
- // Note that fseek returns 0 on success!
- if (!$this->isSeekable() || fseek($this->stream, $offset, $whence) === -1) {
- throw new RuntimeException('Could not seek in stream');
- }
- }
-
- /**
- * Seek to the beginning of the stream.
- *
- * If the stream is not seekable, this method will raise an exception;
- * otherwise, it will perform a seek(0).
- *
- * @see seek()
- *
- * @link http://www.php.net/manual/en/function.fseek.php
- *
- * @throws RuntimeException on failure.
- */
- public function rewind()
- {
- if (!$this->isSeekable() || rewind($this->stream) === false) {
- throw new RuntimeException('Could not rewind stream');
- }
- }
-
- /**
- * Read data from the stream.
- *
- * @param int $length Read up to $length bytes from the object and return
- * them. Fewer than $length bytes may be returned if underlying stream
- * call returns fewer bytes.
- *
- * @return string Returns the data read from the stream, or an empty string
- * if no bytes are available.
- *
- * @throws RuntimeException if an error occurs.
- */
- public function read($length)
- {
- if (!$this->isReadable() || ($data = fread($this->stream, $length)) === false) {
- throw new RuntimeException('Could not read from stream');
- }
-
- return $data;
- }
-
- /**
- * Write data to the stream.
- *
- * @param string $string The string that is to be written.
- *
- * @return int Returns the number of bytes written to the stream.
- *
- * @throws RuntimeException on failure.
- */
- public function write($string)
- {
- if (!$this->isWritable() || ($written = fwrite($this->stream, $string)) === false) {
- throw new RuntimeException('Could not write to stream');
- }
-
- // reset size so that it will be recalculated on next call to getSize()
- $this->size = null;
-
- return $written;
- }
-
- /**
- * Returns the remaining contents in a string
- *
- * @return string
- *
- * @throws RuntimeException if unable to read or an error occurs while
- * reading.
- */
- public function getContents()
- {
- if (!$this->isReadable() || ($contents = stream_get_contents($this->stream)) === false) {
- throw new RuntimeException('Could not get contents of stream');
- }
-
- return $contents;
- }
-
- /**
- * Returns whether or not the stream is a pipe.
- *
- * @return bool
- */
- public function isPipe()
- {
- if ($this->isPipe === null) {
- $this->isPipe = false;
- if ($this->isAttached()) {
- $mode = fstat($this->stream)['mode'];
- $this->isPipe = ($mode & self::FSTAT_MODE_S_IFIFO) !== 0;
- }
- }
-
- return $this->isPipe;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/UploadedFile.php b/server/vendor/slim/slim/Slim/Http/UploadedFile.php
deleted file mode 100644
index ae5dfb6..0000000
--- a/server/vendor/slim/slim/Slim/Http/UploadedFile.php
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use RuntimeException;
-use InvalidArgumentException;
-use Psr\Http\Message\StreamInterface;
-use Psr\Http\Message\UploadedFileInterface;
-
-/**
- * Represents Uploaded Files.
- *
- * It manages and normalizes uploaded files according to the PSR-7 standard.
- *
- * @link https://github.com/php-fig/http-message/blob/master/src/UploadedFileInterface.php
- * @link https://github.com/php-fig/http-message/blob/master/src/StreamInterface.php
- */
-class UploadedFile implements UploadedFileInterface
-{
- /**
- * The client-provided full path to the file
- *
- * @note this is public to maintain BC with 3.1.0 and earlier.
- *
- * @var string
- */
- public $file;
- /**
- * The client-provided file name.
- *
- * @var string
- */
- protected $name;
- /**
- * The client-provided media type of the file.
- *
- * @var string
- */
- protected $type;
- /**
- * The size of the file in bytes.
- *
- * @var int
- */
- protected $size;
- /**
- * A valid PHP UPLOAD_ERR_xxx code for the file upload.
- *
- * @var int
- */
- protected $error = UPLOAD_ERR_OK;
- /**
- * Indicates if the upload is from a SAPI environment.
- *
- * @var bool
- */
- protected $sapi = false;
- /**
- * An optional StreamInterface wrapping the file resource.
- *
- * @var StreamInterface
- */
- protected $stream;
- /**
- * Indicates if the uploaded file has already been moved.
- *
- * @var bool
- */
- protected $moved = false;
-
- /**
- * Create a normalized tree of UploadedFile instances from the Environment.
- *
- * @param Environment $env The environment
- *
- * @return array|null A normalized tree of UploadedFile instances or null if none are provided.
- */
- public static function createFromEnvironment(Environment $env)
- {
- if (is_array($env['slim.files']) && $env->has('slim.files')) {
- return $env['slim.files'];
- } elseif (isset($_FILES)) {
- return static::parseUploadedFiles($_FILES);
- }
-
- return [];
- }
-
- /**
- * Parse a non-normalized, i.e. $_FILES superglobal, tree of uploaded file data.
- *
- * @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)
- {
- $parsed = [];
- foreach ($uploadedFiles as $field => $uploadedFile) {
- if (!isset($uploadedFile['error'])) {
- if (is_array($uploadedFile)) {
- $parsed[$field] = static::parseUploadedFiles($uploadedFile);
- }
- continue;
- }
-
- $parsed[$field] = [];
- if (!is_array($uploadedFile['error'])) {
- $parsed[$field] = new static(
- $uploadedFile['tmp_name'],
- isset($uploadedFile['name']) ? $uploadedFile['name'] : null,
- isset($uploadedFile['type']) ? $uploadedFile['type'] : null,
- isset($uploadedFile['size']) ? $uploadedFile['size'] : null,
- $uploadedFile['error'],
- true
- );
- } else {
- $subArray = [];
- foreach ($uploadedFile['error'] as $fileIdx => $error) {
- // normalise subarray and re-parse to move the input's keyname 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] = static::parseUploadedFiles($subArray);
- }
- }
- }
-
- return $parsed;
- }
-
- /**
- * Construct a new UploadedFile instance.
- *
- * @param string $file The full path to the uploaded file provided by the client.
- * @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.
- */
- public function __construct($file, $name = null, $type = null, $size = null, $error = UPLOAD_ERR_OK, $sapi = false)
- {
- $this->file = $file;
- $this->name = $name;
- $this->type = $type;
- $this->size = $size;
- $this->error = $error;
- $this->sapi = $sapi;
- }
-
- /**
- * Retrieve a stream representing the uploaded file.
- *
- * This method MUST return a StreamInterface instance, representing the
- * uploaded file. The purpose of this method is to allow utilizing native PHP
- * stream functionality to manipulate the file upload, such as
- * stream_copy_to_stream() (though the result will need to be decorated in a
- * native PHP stream wrapper to work with such functions).
- *
- * If the moveTo() method has been called previously, this method MUST raise
- * an exception.
- *
- * @return StreamInterface Stream representation of the uploaded file.
- * @throws \RuntimeException in cases when no stream is available or can be
- * created.
- */
- public function getStream()
- {
- if ($this->moved) {
- throw new \RuntimeException(sprintf('Uploaded file %1s has already been moved', $this->name));
- }
- if ($this->stream === null) {
- $this->stream = new Stream(fopen($this->file, 'r'));
- }
-
- return $this->stream;
- }
-
- /**
- * Move the uploaded file to a new location.
- *
- * Use this method as an alternative to move_uploaded_file(). This method is
- * guaranteed to work in both SAPI and non-SAPI environments.
- * Implementations must determine which environment they are in, and use the
- * appropriate method (move_uploaded_file(), rename(), or a stream
- * operation) to perform the operation.
- *
- * $targetPath may be an absolute path, or a relative path. If it is a
- * relative path, resolution should be the same as used by PHP's rename()
- * function.
- *
- * The original file or stream MUST be removed on completion.
- *
- * If this method is called more than once, any subsequent calls MUST raise
- * an exception.
- *
- * When used in an SAPI environment where $_FILES is populated, when writing
- * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be
- * used to ensure permissions and upload status are verified correctly.
- *
- * If you wish to move to a stream, use getStream(), as SAPI operations
- * cannot guarantee writing to stream destinations.
- *
- * @see http://php.net/is_uploaded_file
- * @see http://php.net/move_uploaded_file
- *
- * @param string $targetPath Path to which to move the uploaded file.
- *
- * @throws InvalidArgumentException if the $path specified is invalid.
- * @throws RuntimeException on any error during the move operation, or on
- * the second or subsequent call to the method.
- */
- public function moveTo($targetPath)
- {
- 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 %1s to %2s', $this->name, $targetPath));
- }
- if (!unlink($this->file)) {
- throw new RuntimeException(sprintf('Error removing uploaded file %1s', $this->name));
- }
- } elseif ($this->sapi) {
- if (!is_uploaded_file($this->file)) {
- throw new RuntimeException(sprintf('%1s is not a valid uploaded file', $this->file));
- }
-
- if (!move_uploaded_file($this->file, $targetPath)) {
- throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath));
- }
- } else {
- if (!rename($this->file, $targetPath)) {
- throw new RuntimeException(sprintf('Error moving uploaded file %1s to %2s', $this->name, $targetPath));
- }
- }
-
- $this->moved = true;
- }
-
- /**
- * Retrieve the error associated with the uploaded file.
- *
- * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.
- *
- * If the file was uploaded successfully, this method MUST return
- * UPLOAD_ERR_OK.
- *
- * Implementations SHOULD return the value stored in the "error" key of
- * the file in the $_FILES array.
- *
- * @see http://php.net/manual/en/features.file-upload.errors.php
- *
- * @return int One of PHP's UPLOAD_ERR_XXX constants.
- */
- public function getError()
- {
- return $this->error;
- }
-
- /**
- * Retrieve the filename sent by the client.
- *
- * Do not trust the value returned by this method. A client could send
- * a malicious filename with the intention to corrupt or hack your
- * application.
- *
- * Implementations SHOULD return the value stored in the "name" key of
- * the file in the $_FILES array.
- *
- * @return string|null The filename sent by the client or null if none
- * was provided.
- */
- public function getClientFilename()
- {
- return $this->name;
- }
-
- /**
- * Retrieve the media type sent by the client.
- *
- * Do not trust the value returned by this method. A client could send
- * a malicious media type with the intention to corrupt or hack your
- * application.
- *
- * Implementations SHOULD return the value stored in the "type" key of
- * the file in the $_FILES array.
- *
- * @return string|null The media type sent by the client or null if none
- * was provided.
- */
- public function getClientMediaType()
- {
- return $this->type;
- }
-
- /**
- * Retrieve the file size.
- *
- * Implementations SHOULD return the value stored in the "size" key of
- * the file in the $_FILES array if available, as PHP calculates this based
- * on the actual size transmitted.
- *
- * @return int|null The file size in bytes or null if unknown.
- */
- public function getSize()
- {
- return $this->size;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Http/Uri.php b/server/vendor/slim/slim/Slim/Http/Uri.php
deleted file mode 100644
index 31f202a..0000000
--- a/server/vendor/slim/slim/Slim/Http/Uri.php
+++ /dev/null
@@ -1,824 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Http;
-
-use InvalidArgumentException;
-use \Psr\Http\Message\UriInterface;
-use Slim\Http\Environment;
-
-/**
- * Value object representing a URI.
- *
- * This interface is meant to represent URIs according to RFC 3986 and to
- * provide methods for most common operations. Additional functionality for
- * working with URIs can be provided on top of the interface or externally.
- * Its primary use is for HTTP requests, but may also be used in other
- * contexts.
- *
- * Instances of this interface are considered immutable; all methods that
- * might change state MUST be implemented such that they retain the internal
- * state of the current instance and return an instance that contains the
- * changed state.
- *
- * Typically the Host header will be also be present in the request message.
- * For server-side requests, the scheme will typically be discoverable in the
- * server parameters.
- *
- * @link http://tools.ietf.org/html/rfc3986 (the URI specification)
- */
-class Uri implements UriInterface
-{
- /**
- * Uri scheme (without "://" suffix)
- *
- * @var string
- */
- protected $scheme = '';
-
- /**
- * Uri user
- *
- * @var string
- */
- protected $user = '';
-
- /**
- * Uri password
- *
- * @var string
- */
- protected $password = '';
-
- /**
- * Uri host
- *
- * @var string
- */
- protected $host = '';
-
- /**
- * Uri port number
- *
- * @var null|int
- */
- protected $port;
-
- /**
- * Uri base path
- *
- * @var string
- */
- protected $basePath = '';
-
- /**
- * Uri path
- *
- * @var string
- */
- protected $path = '';
-
- /**
- * Uri query string (without "?" prefix)
- *
- * @var string
- */
- protected $query = '';
-
- /**
- * Uri fragment string (without "#" prefix)
- *
- * @var string
- */
- protected $fragment = '';
-
- /**
- * Create new Uri.
- *
- * @param string $scheme Uri scheme.
- * @param string $host Uri host.
- * @param int $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(
- $scheme,
- $host,
- $port = null,
- $path = '/',
- $query = '',
- $fragment = '',
- $user = '',
- $password = ''
- ) {
- $this->scheme = $this->filterScheme($scheme);
- $this->host = $host;
- $this->port = $this->filterPort($port);
- $this->path = empty($path) ? '/' : $this->filterPath($path);
- $this->query = $this->filterQuery($query);
- $this->fragment = $this->filterQuery($fragment);
- $this->user = $user;
- $this->password = $password;
- }
-
- /**
- * Create new Uri from string.
- *
- * @param string $uri Complete Uri string
- * (i.e., https://user:pass@host:443/path?query).
- *
- * @return self
- */
- public static function createFromString($uri)
- {
- if (!is_string($uri) && !method_exists($uri, '__toString')) {
- throw new InvalidArgumentException('Uri must be a string');
- }
-
- $parts = parse_url($uri);
- $scheme = isset($parts['scheme']) ? $parts['scheme'] : '';
- $user = isset($parts['user']) ? $parts['user'] : '';
- $pass = isset($parts['pass']) ? $parts['pass'] : '';
- $host = isset($parts['host']) ? $parts['host'] : '';
- $port = isset($parts['port']) ? $parts['port'] : null;
- $path = isset($parts['path']) ? $parts['path'] : '';
- $query = isset($parts['query']) ? $parts['query'] : '';
- $fragment = isset($parts['fragment']) ? $parts['fragment'] : '';
-
- return new static($scheme, $host, $port, $path, $query, $fragment, $user, $pass);
- }
-
- /**
- * Create new Uri from environment.
- *
- * @param Environment $env
- *
- * @return self
- */
- public static function createFromEnvironment(Environment $env)
- {
- // Scheme
- $isSecure = $env->get('HTTPS');
- $scheme = (empty($isSecure) || $isSecure === 'off') ? 'http' : 'https';
-
- // Authority: Username and password
- $username = $env->get('PHP_AUTH_USER', '');
- $password = $env->get('PHP_AUTH_PW', '');
-
- // Authority: Host
- if ($env->has('HTTP_HOST')) {
- $host = $env->get('HTTP_HOST');
- } else {
- $host = $env->get('SERVER_NAME');
- }
-
- // Authority: Port
- $port = (int)$env->get('SERVER_PORT', 80);
- if (preg_match('/^(\[[a-fA-F0-9:.]+\])(:\d+)?\z/', $host, $matches)) {
- $host = $matches[1];
-
- if ($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);
- }
- }
-
- // Path
- $requestScriptName = parse_url($env->get('SCRIPT_NAME'), PHP_URL_PATH);
- $requestScriptDir = dirname($requestScriptName);
-
- // parse_url() requires a full URL. As we don't extract the domain name or scheme,
- // we use a stand-in.
- $requestUri = parse_url('http://example.com' . $env->get('REQUEST_URI'), PHP_URL_PATH);
-
- $basePath = '';
- $virtualPath = $requestUri;
- if (stripos($requestUri, $requestScriptName) === 0) {
- $basePath = $requestScriptName;
- } elseif ($requestScriptDir !== '/' && stripos($requestUri, $requestScriptDir) === 0) {
- $basePath = $requestScriptDir;
- }
-
- if ($basePath) {
- $virtualPath = ltrim(substr($requestUri, strlen($basePath)), '/');
- }
-
- // Query string
- $queryString = $env->get('QUERY_STRING', '');
- if ($queryString === '') {
- $queryString = parse_url('http://example.com' . $env->get('REQUEST_URI'), PHP_URL_QUERY);
- }
-
- // Fragment
- $fragment = '';
-
- // Build Uri
- $uri = new static($scheme, $host, $port, $virtualPath, $queryString, $fragment, $username, $password);
- if ($basePath) {
- $uri = $uri->withBasePath($basePath);
- }
-
- return $uri;
- }
-
- /********************************************************************************
- * Scheme
- *******************************************************************************/
-
- /**
- * Retrieve the scheme component of the URI.
- *
- * If no scheme is present, this method MUST return an empty string.
- *
- * The value returned MUST be normalized to lowercase, per RFC 3986
- * Section 3.1.
- *
- * The trailing ":" character is not part of the scheme and MUST NOT be
- * added.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-3.1
- * @return string The URI scheme.
- */
- public function getScheme()
- {
- return $this->scheme;
- }
-
- /**
- * Return an instance with the specified scheme.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified scheme.
- *
- * Implementations MUST support the schemes "http" and "https" case
- * insensitively, and MAY accommodate other schemes if required.
- *
- * An empty scheme is equivalent to removing the scheme.
- *
- * @param string $scheme The scheme to use with the new instance.
- * @return self A new instance with the specified scheme.
- * @throws \InvalidArgumentException for invalid or unsupported schemes.
- */
- public function withScheme($scheme)
- {
- $scheme = $this->filterScheme($scheme);
- $clone = clone $this;
- $clone->scheme = $scheme;
-
- return $clone;
- }
-
- /**
- * Filter Uri scheme.
- *
- * @param string $scheme Raw Uri scheme.
- * @return string
- *
- * @throws InvalidArgumentException If the Uri scheme is not a string.
- * @throws InvalidArgumentException If Uri scheme is not "", "https", or "http".
- */
- protected function filterScheme($scheme)
- {
- static $valid = [
- '' => true,
- 'https' => true,
- 'http' => true,
- ];
-
- if (!is_string($scheme) && !method_exists($scheme, '__toString')) {
- throw new InvalidArgumentException('Uri scheme must be a string');
- }
-
- $scheme = str_replace('://', '', strtolower((string)$scheme));
- if (!isset($valid[$scheme])) {
- throw new InvalidArgumentException('Uri scheme must be one of: "", "https", "http"');
- }
-
- return $scheme;
- }
-
- /********************************************************************************
- * Authority
- *******************************************************************************/
-
- /**
- * Retrieve the authority component of the URI.
- *
- * If no authority information is present, this method MUST return an empty
- * string.
- *
- * The authority syntax of the URI is:
- *
- * <pre>
- * [user-info@]host[:port]
- * </pre>
- *
- * If the port component is not set or is the standard port for the current
- * scheme, it SHOULD NOT be included.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-3.2
- * @return string The URI authority, in "[user-info@]host[:port]" format.
- */
- public function getAuthority()
- {
- $userInfo = $this->getUserInfo();
- $host = $this->getHost();
- $port = $this->getPort();
-
- return ($userInfo ? $userInfo . '@' : '') . $host . ($port !== null ? ':' . $port : '');
- }
-
- /**
- * Retrieve the user information component of the URI.
- *
- * If no user information is present, this method MUST return an empty
- * string.
- *
- * If a user is present in the URI, this will return that value;
- * additionally, if the password is also present, it will be appended to the
- * user value, with a colon (":") separating the values.
- *
- * The trailing "@" character is not part of the user information and MUST
- * NOT be added.
- *
- * @return string The URI user information, in "username[:password]" format.
- */
- public function getUserInfo()
- {
- return $this->user . ($this->password ? ':' . $this->password : '');
- }
-
- /**
- * Return an instance with the specified user information.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified user information.
- *
- * Password is optional, but the user information MUST include the
- * user; an empty string for the user is equivalent to removing user
- * information.
- *
- * @param string $user The user name to use for authority.
- * @param null|string $password The password associated with $user.
- * @return self A new instance with the specified user information.
- */
- public function withUserInfo($user, $password = null)
- {
- $clone = clone $this;
- $clone->user = $user;
- $clone->password = $password ? $password : '';
-
- return $clone;
- }
-
- /**
- * Retrieve the host component of the URI.
- *
- * If no host is present, this method MUST return an empty string.
- *
- * The value returned MUST be normalized to lowercase, per RFC 3986
- * Section 3.2.2.
- *
- * @see http://tools.ietf.org/html/rfc3986#section-3.2.2
- * @return string The URI host.
- */
- public function getHost()
- {
- return $this->host;
- }
-
- /**
- * Return an instance with the specified host.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified host.
- *
- * An empty host value is equivalent to removing the host.
- *
- * @param string $host The hostname to use with the new instance.
- * @return self A new instance with the specified host.
- * @throws \InvalidArgumentException for invalid hostnames.
- */
- public function withHost($host)
- {
- $clone = clone $this;
- $clone->host = $host;
-
- return $clone;
- }
-
- /**
- * Retrieve the port component of the URI.
- *
- * If a port is present, and it is non-standard for the current scheme,
- * this method MUST return it as an integer. If the port is the standard port
- * used with the current scheme, this method SHOULD return null.
- *
- * If no port is present, and no scheme is present, this method MUST return
- * a null value.
- *
- * If no port is present, but a scheme is present, this method MAY return
- * the standard port for that scheme, but SHOULD return null.
- *
- * @return null|int The URI port.
- */
- public function getPort()
- {
- return $this->port && !$this->hasStandardPort() ? $this->port : null;
- }
-
- /**
- * Return an instance with the specified port.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified port.
- *
- * Implementations MUST raise an exception for ports outside the
- * established TCP and UDP port ranges.
- *
- * A null value provided for the port is equivalent to removing the port
- * information.
- *
- * @param null|int $port The port to use with the new instance; a null value
- * removes the port information.
- * @return self A new instance with the specified port.
- * @throws \InvalidArgumentException for invalid ports.
- */
- 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()
- {
- return ($this->scheme === 'http' && $this->port === 80) || ($this->scheme === 'https' && $this->port === 443);
- }
-
- /**
- * Filter Uri port.
- *
- * @param null|int $port The Uri port number.
- * @return null|int
- *
- * @throws InvalidArgumentException If the port is invalid.
- */
- protected function filterPort($port)
- {
- 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)');
- }
-
- /********************************************************************************
- * Path
- *******************************************************************************/
-
- /**
- * Retrieve the path component of the URI.
- *
- * The path can either be empty or absolute (starting with a slash) or
- * rootless (not starting with a slash). Implementations MUST support all
- * three syntaxes.
- *
- * Normally, the empty path "" and absolute path "/" are considered equal as
- * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically
- * do this normalization because in contexts with a trimmed base path, e.g.
- * the front controller, this difference becomes significant. It's the task
- * of the user to handle both "" and "/".
- *
- * The value returned MUST be percent-encoded, but MUST NOT double-encode
- * any characters. To determine what characters to encode, please refer to
- * RFC 3986, Sections 2 and 3.3.
- *
- * As an example, if the value should include a slash ("/") not intended as
- * delimiter between path segments, that value MUST be passed in encoded
- * form (e.g., "%2F") to the instance.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-2
- * @see https://tools.ietf.org/html/rfc3986#section-3.3
- * @return string The URI path.
- */
- public function getPath()
- {
- return $this->path;
- }
-
- /**
- * Return an instance with the specified path.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified path.
- *
- * The path can either be empty or absolute (starting with a slash) or
- * rootless (not starting with a slash). Implementations MUST support all
- * three syntaxes.
- *
- * If the path is intended to be domain-relative rather than path relative then
- * it must begin with a slash ("/"). Paths not starting with a slash ("/")
- * are assumed to be relative to some base path known to the application or
- * consumer.
- *
- * Users can provide both encoded and decoded path characters.
- * Implementations ensure the correct encoding as outlined in getPath().
- *
- * @param string $path The path to use with the new instance.
- * @return self A new instance with the specified path.
- * @throws \InvalidArgumentException for invalid paths.
- */
- 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);
-
- // if the path is absolute, then clear basePath
- if (substr($path, 0, 1) == '/') {
- $clone->basePath = '';
- }
-
- return $clone;
- }
-
- /**
- * Retrieve the base path segment of the URI.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * This method MUST return a string; if no path is present it MUST return
- * an empty string.
- *
- * @return string The base path segment of the URI.
- */
- public function getBasePath()
- {
- return $this->basePath;
- }
-
- /**
- * Set base path.
- *
- * Note: This method is not part of the PSR-7 standard.
- *
- * @param string $basePath
- * @return self
- */
- public function withBasePath($basePath)
- {
- if (!is_string($basePath)) {
- throw new InvalidArgumentException('Uri path must be a string');
- }
- if (!empty($basePath)) {
- $basePath = '/' . trim($basePath, '/'); // <-- Trim on both sides
- }
- $clone = clone $this;
-
- if ($basePath !== '/') {
- $clone->basePath = $this->filterPath($basePath);
- }
-
- 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)
- {
- return preg_replace_callback(
- '/(?:[^a-zA-Z0-9_\-\.~:@&=\+\$,\/;%]+|%(?![A-Fa-f0-9]{2}))/',
- function ($match) {
- return rawurlencode($match[0]);
- },
- $path
- );
- }
-
- /********************************************************************************
- * Query
- *******************************************************************************/
-
- /**
- * Retrieve the query string of the URI.
- *
- * If no query string is present, this method MUST return an empty string.
- *
- * The leading "?" character is not part of the query and MUST NOT be
- * added.
- *
- * The value returned MUST be percent-encoded, but MUST NOT double-encode
- * any characters. To determine what characters to encode, please refer to
- * RFC 3986, Sections 2 and 3.4.
- *
- * As an example, if a value in a key/value pair of the query string should
- * include an ampersand ("&") not intended as a delimiter between values,
- * that value MUST be passed in encoded form (e.g., "%26") to the instance.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-2
- * @see https://tools.ietf.org/html/rfc3986#section-3.4
- * @return string The URI query string.
- */
- public function getQuery()
- {
- return $this->query;
- }
-
- /**
- * Return an instance with the specified query string.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified query string.
- *
- * Users can provide both encoded and decoded query characters.
- * Implementations ensure the correct encoding as outlined in getQuery().
- *
- * An empty query string value is equivalent to removing the query string.
- *
- * @param string $query The query string to use with the new instance.
- * @return self A new instance with the specified query string.
- * @throws \InvalidArgumentException for invalid query strings.
- */
- public function withQuery($query)
- {
- if (!is_string($query) && !method_exists($query, '__toString')) {
- throw new InvalidArgumentException('Uri query must be a string');
- }
- $query = ltrim((string)$query, '?');
- $clone = clone $this;
- $clone->query = $this->filterQuery($query);
-
- return $clone;
- }
-
- /**
- * Filters the query string or fragment of a URI.
- *
- * @param string $query The raw uri query string.
- * @return string The percent-encoded query string.
- */
- protected function filterQuery($query)
- {
- return preg_replace_callback(
- '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/',
- function ($match) {
- return rawurlencode($match[0]);
- },
- $query
- );
- }
-
- /********************************************************************************
- * Fragment
- *******************************************************************************/
-
- /**
- * Retrieve the fragment component of the URI.
- *
- * If no fragment is present, this method MUST return an empty string.
- *
- * The leading "#" character is not part of the fragment and MUST NOT be
- * added.
- *
- * The value returned MUST be percent-encoded, but MUST NOT double-encode
- * any characters. To determine what characters to encode, please refer to
- * RFC 3986, Sections 2 and 3.5.
- *
- * @see https://tools.ietf.org/html/rfc3986#section-2
- * @see https://tools.ietf.org/html/rfc3986#section-3.5
- * @return string The URI fragment.
- */
- public function getFragment()
- {
- return $this->fragment;
- }
-
- /**
- * Return an instance with the specified URI fragment.
- *
- * This method MUST retain the state of the current instance, and return
- * an instance that contains the specified URI fragment.
- *
- * Users can provide both encoded and decoded fragment characters.
- * Implementations ensure the correct encoding as outlined in getFragment().
- *
- * An empty fragment value is equivalent to removing the fragment.
- *
- * @param string $fragment The fragment to use with the new instance.
- * @return self A new instance with the specified fragment.
- */
- public function withFragment($fragment)
- {
- if (!is_string($fragment) && !method_exists($fragment, '__toString')) {
- throw new InvalidArgumentException('Uri fragment must be a string');
- }
- $fragment = ltrim((string)$fragment, '#');
- $clone = clone $this;
- $clone->fragment = $this->filterQuery($fragment);
-
- return $clone;
- }
-
- /********************************************************************************
- * Helpers
- *******************************************************************************/
-
- /**
- * Return the string representation as a URI reference.
- *
- * Depending on which components of the URI are present, the resulting
- * string is either a full URI or relative reference according to RFC 3986,
- * Section 4.1. The method concatenates the various components of the URI,
- * using the appropriate delimiters:
- *
- * - If a scheme is present, it MUST be suffixed by ":".
- * - If an authority is present, it MUST be prefixed by "//".
- * - The path can be concatenated without delimiters. But there are two
- * cases where the path has to be adjusted to make the URI reference
- * valid as PHP does not allow to throw an exception in __toString():
- * - If the path is rootless and an authority is present, the path MUST
- * be prefixed by "/".
- * - If the path is starting with more than one "/" and no authority is
- * present, the starting slashes MUST be reduced to one.
- * - If a query is present, it MUST be prefixed by "?".
- * - If a fragment is present, it MUST be prefixed by "#".
- *
- * @see http://tools.ietf.org/html/rfc3986#section-4.1
- * @return string
- */
- public function __toString()
- {
- $scheme = $this->getScheme();
- $authority = $this->getAuthority();
- $basePath = $this->getBasePath();
- $path = $this->getPath();
- $query = $this->getQuery();
- $fragment = $this->getFragment();
-
- $path = $basePath . '/' . ltrim($path, '/');
-
- return ($scheme ? $scheme . ':' : '')
- . ($authority ? '//' . $authority : '')
- . $path
- . ($query ? '?' . $query : '')
- . ($fragment ? '#' . $fragment : '');
- }
-
- /**
- * Return the fully qualified base URL.
- *
- * Note that this method never includes a trailing /
- *
- * This method is not part of PSR-7.
- *
- * @return string
- */
- public function getBaseUrl()
- {
- $scheme = $this->getScheme();
- $authority = $this->getAuthority();
- $basePath = $this->getBasePath();
-
- if ($authority && substr($basePath, 0, 1) !== '/') {
- $basePath = $basePath . '/' . $basePath;
- }
-
- return ($scheme ? $scheme . ':' : '')
- . ($authority ? '//' . $authority : '')
- . rtrim($basePath, '/');
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php b/server/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php
deleted file mode 100644
index 17d81db..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces;
-
-/**
- * Resolves a callable.
- *
- * @package Slim
- * @since 3.0.0
- */
-interface CallableResolverInterface
-{
- /**
- * Invoke the resolved callable.
- *
- * @param mixed $toResolve
- *
- * @return callable
- */
- public function resolve($toResolve);
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/CollectionInterface.php b/server/vendor/slim/slim/Slim/Interfaces/CollectionInterface.php
deleted file mode 100644
index be995bf..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/CollectionInterface.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces;
-
-/**
- * Collection Interface
- *
- * @package Slim
- * @since 3.0.0
- */
-interface CollectionInterface extends \ArrayAccess, \Countable, \IteratorAggregate
-{
- public function set($key, $value);
-
- public function get($key, $default = null);
-
- public function replace(array $items);
-
- public function all();
-
- public function has($key);
-
- public function remove($key);
-
- public function clear();
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/Http/CookiesInterface.php b/server/vendor/slim/slim/Slim/Interfaces/Http/CookiesInterface.php
deleted file mode 100644
index 206175a..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/Http/CookiesInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces\Http;
-
-/**
- * Cookies Interface
- *
- * @package Slim
- * @since 3.0.0
- */
-interface CookiesInterface
-{
- public function get($name, $default = null);
- public function set($name, $value);
- public function toHeaders();
- public static function parseHeader($header);
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php b/server/vendor/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php
deleted file mode 100644
index af19d28..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/Http/EnvironmentInterface.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces\Http;
-
-/**
- * Environment Interface
- *
- * @package Slim
- * @since 3.0.0
- */
-interface EnvironmentInterface
-{
- public static function mock(array $settings = []);
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/Http/HeadersInterface.php b/server/vendor/slim/slim/Slim/Interfaces/Http/HeadersInterface.php
deleted file mode 100644
index b737705..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/Http/HeadersInterface.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces\Http;
-
-use Slim\Interfaces\CollectionInterface;
-
-/**
- * Headers Interface
- *
- * @package Slim
- * @since 3.0.0
- */
-interface HeadersInterface extends CollectionInterface
-{
- public function add($key, $value);
-
- public function normalizeKey($key);
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php b/server/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php
deleted file mode 100644
index 14a92c1..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces;
-
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-
-/**
- * Defines a contract for invoking a route callable.
- */
-interface InvocationStrategyInterface
-{
- /**
- * Invoke a route callable.
- *
- * @param callable $callable The callable to invoke using the strategy.
- * @param ServerRequestInterface $request The request object.
- * @param ResponseInterface $response The response object.
- * @param array $routeArguments The route's placholder arguments
- *
- * @return ResponseInterface|string The response from the callable.
- */
- public function __invoke(
- callable $callable,
- ServerRequestInterface $request,
- ResponseInterface $response,
- array $routeArguments
- );
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php b/server/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php
deleted file mode 100644
index 5ed3303..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces;
-
-use Slim\App;
-
-/**
- * RouteGroup Interface
- *
- * @package Slim
- * @since 3.0.0
- */
-interface RouteGroupInterface
-{
- /**
- * Get route pattern
- *
- * @return string
- */
- public function getPattern();
-
- /**
- * Prepend middleware to the group middleware collection
- *
- * @param callable|string $callable The callback routine
- *
- * @return RouteGroupInterface
- */
- public function add($callable);
-
- /**
- * Execute route group callable in the context of the Slim App
- *
- * This method invokes the route group object's callable, collecting
- * nested route objects
- *
- * @param App $app
- */
- public function __invoke(App $app);
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/RouteInterface.php b/server/vendor/slim/slim/Slim/Interfaces/RouteInterface.php
deleted file mode 100644
index d2d0d24..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/RouteInterface.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces;
-
-use InvalidArgumentException;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-
-/**
- * Route Interface
- *
- * @package Slim
- * @since 3.0.0
- */
-interface RouteInterface
-{
-
- /**
- * Retrieve a specific route argument
- *
- * @param string $name
- * @param string|null $default
- *
- * @return string|null
- */
- public function getArgument($name, $default = null);
-
- /**
- * Get route arguments
- *
- * @return string[]
- */
- public function getArguments();
-
- /**
- * Get route name
- *
- * @return null|string
- */
- public function getName();
-
- /**
- * Get route pattern
- *
- * @return string
- */
- public function getPattern();
-
- /**
- * Set a route argument
- *
- * @param string $name
- * @param string $value
- *
- * @return self
- */
- public function setArgument($name, $value);
-
- /**
- * Replace route arguments
- *
- * @param string[] $arguments
- *
- * @return self
- */
- public function setArguments(array $arguments);
-
- /**
- * Set route name
- *
- * @param string $name
- *
- * @return static
- * @throws InvalidArgumentException if the route name is not a string
- */
- public function setName($name);
-
- /**
- * Add middleware
- *
- * This method prepends new middleware to the route's middleware stack.
- *
- * @param callable|string $callable The callback routine
- *
- * @return RouteInterface
- */
- public function add($callable);
-
- /**
- * Prepare the route for use
- *
- * @param ServerRequestInterface $request
- * @param array $arguments
- */
- public function prepare(ServerRequestInterface $request, array $arguments);
-
- /**
- * Run route
- *
- * This method traverses the middleware stack, including the route's callable
- * and captures the resultant HTTP response object. It then sends the response
- * back to the Application.
- *
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- * @return ResponseInterface
- */
- public function run(ServerRequestInterface $request, ResponseInterface $response);
-
- /**
- * Dispatch route callable against current Request and Response objects
- *
- * This method invokes the route object's callable. If middleware is
- * registered for the route, each callable middleware is invoked in
- * the order specified.
- *
- * @param ServerRequestInterface $request The current Request object
- * @param ResponseInterface $response The current Response object
- *
- * @return ResponseInterface
- */
- public function __invoke(ServerRequestInterface $request, ResponseInterface $response);
-}
diff --git a/server/vendor/slim/slim/Slim/Interfaces/RouterInterface.php b/server/vendor/slim/slim/Slim/Interfaces/RouterInterface.php
deleted file mode 100644
index 2ab8b67..0000000
--- a/server/vendor/slim/slim/Slim/Interfaces/RouterInterface.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim\Interfaces;
-
-use RuntimeException;
-use InvalidArgumentException;
-use Psr\Http\Message\ServerRequestInterface;
-
-/**
- * Router Interface
- *
- * @package Slim
- * @since 3.0.0
- */
-interface RouterInterface
-{
- // array keys from route result
- const DISPATCH_STATUS = 0;
- const ALLOWED_METHODS = 1;
-
- /**
- * Add route
- *
- * @param string[] $methods Array of HTTP methods
- * @param string $pattern The route pattern
- * @param callable $handler The route callable
- *
- * @return RouteInterface
- */
- public function map($methods, $pattern, $handler);
-
- /**
- * Dispatch router for HTTP request
- *
- * @param ServerRequestInterface $request The current HTTP request object
- *
- * @return array
- *
- * @link https://github.com/nikic/FastRoute/blob/master/src/Dispatcher.php
- */
- public function dispatch(ServerRequestInterface $request);
-
- /**
- * Add a route group to the array
- *
- * @param string $pattern The group pattern
- * @param callable $callable A group callable
- *
- * @return RouteGroupInterface
- */
- public function pushGroup($pattern, $callable);
-
- /**
- * Removes the last route group from the array
- *
- * @return bool True if successful, else False
- */
- public function popGroup();
-
- /**
- * Get named route object
- *
- * @param string $name Route name
- *
- * @return \Slim\Interfaces\RouteInterface
- *
- * @throws RuntimeException If named route does not exist
- */
- public function getNamedRoute($name);
-
- /**
- * @param $identifier
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- public function lookupRoute($identifier);
-
- /**
- * Build the path for a named route excluding the base path
- *
- * @param string $name Route name
- * @param array $data Named argument replacement data
- * @param array $queryParams Optional query string parameters
- *
- * @return string
- *
- * @throws RuntimeException If named route does not exist
- * @throws InvalidArgumentException If required data not provided
- */
- public function relativePathFor($name, array $data = [], array $queryParams = []);
-
- /**
- * Build the path for a named route including the base path
- *
- * @param string $name Route name
- * @param array $data Named argument replacement data
- * @param array $queryParams Optional query string parameters
- *
- * @return string
- *
- * @throws RuntimeException If named route does not exist
- * @throws InvalidArgumentException If required data not provided
- */
- public function pathFor($name, array $data = [], array $queryParams = []);
-}
diff --git a/server/vendor/slim/slim/Slim/MiddlewareAwareTrait.php b/server/vendor/slim/slim/Slim/MiddlewareAwareTrait.php
deleted file mode 100644
index 14404b5..0000000
--- a/server/vendor/slim/slim/Slim/MiddlewareAwareTrait.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use RuntimeException;
-use SplStack;
-use SplDoublyLinkedList;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use UnexpectedValueException;
-
-/**
- * Middleware
- *
- * This is an internal class that enables concentric middleware layers. This
- * class is an implementation detail and is used only inside of the Slim
- * application; it is not visible to—and should not be used by—end users.
- */
-trait MiddlewareAwareTrait
-{
- /**
- * Middleware call stack
- *
- * @var \SplStack
- * @link http://php.net/manual/class.splstack.php
- */
- protected $stack;
-
- /**
- * Middleware stack lock
- *
- * @var bool
- */
- protected $middlewareLock = false;
-
- /**
- * Add middleware
- *
- * This method prepends new middleware to the application middleware stack.
- *
- * @param callable $callable Any callable that accepts three arguments:
- * 1. A Request object
- * 2. A Response object
- * 3. A "next" middleware callable
- * @return static
- *
- * @throws RuntimeException If middleware is added while the stack is dequeuing
- * @throws UnexpectedValueException If the middleware doesn't return a Psr\Http\Message\ResponseInterface
- */
- protected function addMiddleware(callable $callable)
- {
- if ($this->middlewareLock) {
- throw new RuntimeException('Middleware can’t be added once the stack is dequeuing');
- }
-
- if (is_null($this->stack)) {
- $this->seedMiddlewareStack();
- }
- $next = $this->stack->top();
- $this->stack[] = function (
- ServerRequestInterface $request,
- ResponseInterface $response
- ) use (
- $callable,
- $next
- ) {
- $result = call_user_func($callable, $request, $response, $next);
- if ($result instanceof ResponseInterface === false) {
- throw new UnexpectedValueException(
- 'Middleware must return instance of \Psr\Http\Message\ResponseInterface'
- );
- }
-
- return $result;
- };
-
- return $this;
- }
-
- /**
- * Seed middleware stack with first callable
- *
- * @param callable $kernel The last item to run as middleware
- *
- * @throws RuntimeException if the stack is seeded more than once
- */
- protected function seedMiddlewareStack(callable $kernel = null)
- {
- if (!is_null($this->stack)) {
- throw new RuntimeException('MiddlewareStack can only be seeded once.');
- }
- if ($kernel === null) {
- $kernel = $this;
- }
- $this->stack = new SplStack;
- $this->stack->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO | SplDoublyLinkedList::IT_MODE_KEEP);
- $this->stack[] = $kernel;
- }
-
- /**
- * Call middleware stack
- *
- * @param ServerRequestInterface $request A request object
- * @param ResponseInterface $response A response object
- *
- * @return ResponseInterface
- */
- public function callMiddlewareStack(ServerRequestInterface $request, ResponseInterface $response)
- {
- if (is_null($this->stack)) {
- $this->seedMiddlewareStack();
- }
- /** @var callable $start */
- $start = $this->stack->top();
- $this->middlewareLock = true;
- $response = $start($request, $response);
- $this->middlewareLock = false;
- return $response;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Routable.php b/server/vendor/slim/slim/Slim/Routable.php
deleted file mode 100644
index c912db4..0000000
--- a/server/vendor/slim/slim/Slim/Routable.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use Psr\Container\ContainerInterface;
-
-/**
- * A routable, middleware-aware object
- *
- * @package Slim
- * @since 3.0.0
- */
-abstract class Routable
-{
- use CallableResolverAwareTrait;
-
- /**
- * Route callable
- *
- * @var callable
- */
- protected $callable;
-
- /**
- * Container
- *
- * @var ContainerInterface
- */
- protected $container;
-
- /**
- * Route middleware
- *
- * @var callable[]
- */
- protected $middleware = [];
-
- /**
- * Route pattern
- *
- * @var string
- */
- protected $pattern;
-
- /**
- * Get the middleware registered for the group
- *
- * @return callable[]
- */
- public function getMiddleware()
- {
- return $this->middleware;
- }
-
- /**
- * Get the route pattern
- *
- * @return string
- */
- public function getPattern()
- {
- return $this->pattern;
- }
-
- /**
- * Set container for use with resolveCallable
- *
- * @param ContainerInterface $container
- *
- * @return self
- */
- public function setContainer(ContainerInterface $container)
- {
- $this->container = $container;
- return $this;
- }
-
- /**
- * Prepend middleware to the middleware collection
- *
- * @param callable|string $callable The callback routine
- *
- * @return static
- */
- public function add($callable)
- {
- $this->middleware[] = new DeferredCallable($callable, $this->container);
- return $this;
- }
-
- /**
- * Set the route pattern
- *
- * @param string $newPattern
- */
- public function setPattern($newPattern)
- {
- $this->pattern = $newPattern;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Route.php b/server/vendor/slim/slim/Slim/Route.php
deleted file mode 100644
index 6a44b3f..0000000
--- a/server/vendor/slim/slim/Slim/Route.php
+++ /dev/null
@@ -1,381 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use Exception;
-use Throwable;
-use InvalidArgumentException;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Message\ResponseInterface;
-use Slim\Exception\SlimException;
-use Slim\Handlers\Strategies\RequestResponse;
-use Slim\Interfaces\InvocationStrategyInterface;
-use Slim\Interfaces\RouteInterface;
-
-/**
- * Route
- */
-class Route extends Routable implements RouteInterface
-{
- use MiddlewareAwareTrait;
-
- /**
- * HTTP methods supported by this route
- *
- * @var string[]
- */
- protected $methods = [];
-
- /**
- * Route identifier
- *
- * @var string
- */
- protected $identifier;
-
- /**
- * Route name
- *
- * @var null|string
- */
- protected $name;
-
- /**
- * Parent route groups
- *
- * @var RouteGroup[]
- */
- protected $groups;
-
- private $finalized = false;
-
- /**
- * Output buffering mode
- *
- * One of: false, 'prepend' or 'append'
- *
- * @var boolean|string
- */
- protected $outputBuffering = 'append';
-
- /**
- * Route parameters
- *
- * @var array
- */
- protected $arguments = [];
-
- /**
- * The callable payload
- *
- * @var callable
- */
- protected $callable;
-
- /**
- * Create new route
- *
- * @param string|string[] $methods The route HTTP methods
- * @param string $pattern The route pattern
- * @param callable $callable The route callable
- * @param RouteGroup[] $groups The parent route groups
- * @param int $identifier The route identifier
- */
- public function __construct($methods, $pattern, $callable, $groups = [], $identifier = 0)
- {
- $this->methods = is_string($methods) ? [$methods] : $methods;
- $this->pattern = $pattern;
- $this->callable = $callable;
- $this->groups = $groups;
- $this->identifier = 'route' . $identifier;
- }
-
- /**
- * Finalize the route in preparation for dispatching
- */
- public function finalize()
- {
- if ($this->finalized) {
- return;
- }
-
- $groupMiddleware = [];
- foreach ($this->getGroups() as $group) {
- $groupMiddleware = array_merge($group->getMiddleware(), $groupMiddleware);
- }
-
- $this->middleware = array_merge($this->middleware, $groupMiddleware);
-
- foreach ($this->getMiddleware() as $middleware) {
- $this->addMiddleware($middleware);
- }
-
- $this->finalized = true;
- }
-
- /**
- * Get route callable
- *
- * @return callable
- */
- public function getCallable()
- {
- return $this->callable;
- }
-
- /**
- * This method enables you to override the Route's callable
- *
- * @param string|\Closure $callable
- */
- public function setCallable($callable)
- {
- $this->callable = $callable;
- }
-
- /**
- * Get route methods
- *
- * @return string[]
- */
- public function getMethods()
- {
- return $this->methods;
- }
-
- /**
- * Get parent route groups
- *
- * @return RouteGroup[]
- */
- public function getGroups()
- {
- return $this->groups;
- }
-
- /**
- * Get route name
- *
- * @return null|string
- */
- public function getName()
- {
- return $this->name;
- }
-
- /**
- * Get route identifier
- *
- * @return string
- */
- public function getIdentifier()
- {
- return $this->identifier;
- }
-
- /**
- * Get output buffering mode
- *
- * @return boolean|string
- */
- public function getOutputBuffering()
- {
- return $this->outputBuffering;
- }
-
- /**
- * Set output buffering mode
- *
- * One of: false, 'prepend' or 'append'
- *
- * @param boolean|string $mode
- *
- * @throws InvalidArgumentException If an unknown buffering mode is specified
- */
- public function setOutputBuffering($mode)
- {
- if (!in_array($mode, [false, 'prepend', 'append'], true)) {
- throw new InvalidArgumentException('Unknown output buffering mode');
- }
- $this->outputBuffering = $mode;
- }
-
- /**
- * Set route name
- *
- * @param string $name
- *
- * @return self
- *
- * @throws InvalidArgumentException if the route name is not a string
- */
- public function setName($name)
- {
- if (!is_string($name)) {
- throw new InvalidArgumentException('Route name must be a string');
- }
- $this->name = $name;
- return $this;
- }
-
- /**
- * Set a route argument
- *
- * @param string $name
- * @param string $value
- *
- * @return self
- */
- public function setArgument($name, $value)
- {
- $this->arguments[$name] = $value;
- return $this;
- }
-
- /**
- * Replace route arguments
- *
- * @param array $arguments
- *
- * @return self
- */
- public function setArguments(array $arguments)
- {
- $this->arguments = $arguments;
- return $this;
- }
-
- /**
- * Retrieve route arguments
- *
- * @return array
- */
- public function getArguments()
- {
- return $this->arguments;
- }
-
- /**
- * Retrieve a specific route argument
- *
- * @param string $name
- * @param string|null $default
- *
- * @return mixed
- */
- public function getArgument($name, $default = null)
- {
- if (array_key_exists($name, $this->arguments)) {
- return $this->arguments[$name];
- }
- return $default;
- }
-
- /********************************************************************************
- * Route Runner
- *******************************************************************************/
-
- /**
- * Prepare the route for use
- *
- * @param ServerRequestInterface $request
- * @param array $arguments
- */
- public function prepare(ServerRequestInterface $request, array $arguments)
- {
- // Add the arguments
- foreach ($arguments as $k => $v) {
- $this->setArgument($k, $v);
- }
- }
-
- /**
- * Run route
- *
- * This method traverses the middleware stack, including the route's callable
- * and captures the resultant HTTP response object. It then sends the response
- * back to the Application.
- *
- * @param ServerRequestInterface $request
- * @param ResponseInterface $response
- *
- * @return ResponseInterface
- */
- public function run(ServerRequestInterface $request, ResponseInterface $response)
- {
- // Finalise route now that we are about to run it
- $this->finalize();
-
- // Traverse middleware stack and fetch updated response
- return $this->callMiddlewareStack($request, $response);
- }
-
- /**
- * Dispatch route callable against current Request and Response objects
- *
- * This method invokes the route object's callable. If middleware is
- * registered for the route, each callable middleware is invoked in
- * the order specified.
- *
- * @param ServerRequestInterface $request The current Request object
- * @param ResponseInterface $response The current Response object
- * @return \Psr\Http\Message\ResponseInterface
- * @throws \Exception if the route callable throws an exception
- */
- public function __invoke(ServerRequestInterface $request, ResponseInterface $response)
- {
- $this->callable = $this->resolveCallable($this->callable);
-
- /** @var InvocationStrategyInterface $handler */
- $handler = isset($this->container) ? $this->container->get('foundHandler') : new RequestResponse();
-
- // invoke route callable
- if ($this->outputBuffering === false) {
- $newResponse = $handler($this->callable, $request, $response, $this->arguments);
- } else {
- try {
- ob_start();
- $newResponse = $handler($this->callable, $request, $response, $this->arguments);
- $output = ob_get_clean();
- // @codeCoverageIgnoreStart
- } catch (Throwable $e) {
- ob_end_clean();
- throw $e;
- // @codeCoverageIgnoreEnd
- } catch (Exception $e) {
- ob_end_clean();
- throw $e;
- }
- }
-
- if ($newResponse instanceof ResponseInterface) {
- // if route callback returns a ResponseInterface, then use it
- $response = $newResponse;
- } elseif (is_string($newResponse)) {
- // if route callback returns a string, then append it to the response
- if ($response->getBody()->isWritable()) {
- $response->getBody()->write($newResponse);
- }
- }
-
- if (!empty($output) && $response->getBody()->isWritable()) {
- if ($this->outputBuffering === 'prepend') {
- // prepend output buffer content
- $body = new Http\Body(fopen('php://temp', 'r+'));
- $body->write($output . $response->getBody());
- $response = $response->withBody($body);
- } elseif ($this->outputBuffering === 'append') {
- // append output buffer content
- $response->getBody()->write($output);
- }
- }
-
- return $response;
- }
-}
diff --git a/server/vendor/slim/slim/Slim/RouteGroup.php b/server/vendor/slim/slim/Slim/RouteGroup.php
deleted file mode 100644
index 705ac45..0000000
--- a/server/vendor/slim/slim/Slim/RouteGroup.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use Closure;
-use Slim\Interfaces\RouteGroupInterface;
-
-/**
- * A collector for Routable objects with a common middleware stack
- *
- * @package Slim
- */
-class RouteGroup extends Routable implements RouteGroupInterface
-{
- /**
- * Create a new RouteGroup
- *
- * @param string $pattern The pattern prefix for the group
- * @param callable $callable The group callable
- */
- public function __construct($pattern, $callable)
- {
- $this->pattern = $pattern;
- $this->callable = $callable;
- }
-
- /**
- * Invoke the group to register any Routable objects within it.
- *
- * @param App $app The App to bind the callable to.
- */
- public function __invoke(App $app = null)
- {
- $callable = $this->resolveCallable($this->callable);
- if ($callable instanceof Closure && $app !== null) {
- $callable = $callable->bindTo($app);
- }
-
- $callable();
- }
-}
diff --git a/server/vendor/slim/slim/Slim/Router.php b/server/vendor/slim/slim/Slim/Router.php
deleted file mode 100644
index 8311628..0000000
--- a/server/vendor/slim/slim/Slim/Router.php
+++ /dev/null
@@ -1,455 +0,0 @@
-<?php
-/**
- * Slim Framework (https://slimframework.com)
- *
- * @link https://github.com/slimphp/Slim
- * @copyright Copyright (c) 2011-2017 Josh Lockhart
- * @license https://github.com/slimphp/Slim/blob/3.x/LICENSE.md (MIT License)
- */
-namespace Slim;
-
-use FastRoute\Dispatcher;
-use Psr\Container\ContainerInterface;
-use InvalidArgumentException;
-use RuntimeException;
-use Psr\Http\Message\ServerRequestInterface;
-use FastRoute\RouteCollector;
-use FastRoute\RouteParser;
-use FastRoute\RouteParser\Std as StdParser;
-use Slim\Interfaces\RouteGroupInterface;
-use Slim\Interfaces\RouterInterface;
-use Slim\Interfaces\RouteInterface;
-
-/**
- * Router
- *
- * This class organizes Slim application route objects. It is responsible
- * for registering route objects, assigning names to route objects,
- * finding routes that match the current HTTP request, and creating
- * URLs for a named route.
- */
-class Router implements RouterInterface
-{
- /**
- * Container Interface
- *
- * @var ContainerInterface
- */
- protected $container;
-
- /**
- * Parser
- *
- * @var \FastRoute\RouteParser
- */
- protected $routeParser;
-
- /**
- * Base path used in pathFor()
- *
- * @var string
- */
- protected $basePath = '';
-
- /**
- * Path to fast route cache file. Set to false to disable route caching
- *
- * @var string|False
- */
- protected $cacheFile = false;
-
- /**
- * Routes
- *
- * @var Route[]
- */
- protected $routes = [];
-
- /**
- * Route counter incrementer
- * @var int
- */
- protected $routeCounter = 0;
-
- /**
- * Route groups
- *
- * @var RouteGroup[]
- */
- protected $routeGroups = [];
-
- /**
- * @var \FastRoute\Dispatcher
- */
- protected $dispatcher;
-
- /**
- * Create new router
- *
- * @param RouteParser $parser
- */
- public function __construct(RouteParser $parser = null)
- {
- $this->routeParser = $parser ?: new StdParser;
- }
-
- /**
- * Set the base path used in pathFor()
- *
- * @param string $basePath
- *
- * @return self
- */
- public function setBasePath($basePath)
- {
- if (!is_string($basePath)) {
- throw new InvalidArgumentException('Router basePath must be a string');
- }
-
- $this->basePath = $basePath;
-
- return $this;
- }
-
- /**
- * Set path to fast route cache file. If this is false then route caching is disabled.
- *
- * @param string|false $cacheFile
- *
- * @return self
- */
- public function setCacheFile($cacheFile)
- {
- if (!is_string($cacheFile) && $cacheFile !== false) {
- throw new InvalidArgumentException('Router cacheFile must be a string or false');
- }
-
- $this->cacheFile = $cacheFile;
-
- if ($cacheFile !== false && !is_writable(dirname($cacheFile))) {
- throw new RuntimeException('Router cacheFile directory must be writable');
- }
-
-
- return $this;
- }
-
- /**
- * @param ContainerInterface $container
- */
- public function setContainer(ContainerInterface $container)
- {
- $this->container = $container;
- }
-
- /**
- * Add route
- *
- * @param string[] $methods Array of HTTP methods
- * @param string $pattern The route pattern
- * @param callable $handler The route callable
- *
- * @return RouteInterface
- *
- * @throws InvalidArgumentException if the route pattern isn't a string
- */
- public function map($methods, $pattern, $handler)
- {
- if (!is_string($pattern)) {
- throw new InvalidArgumentException('Route pattern must be a string');
- }
-
- // Prepend parent group pattern(s)
- if ($this->routeGroups) {
- $pattern = $this->processGroups() . $pattern;
- }
-
- // According to RFC methods are defined in uppercase (See RFC 7231)
- $methods = array_map("strtoupper", $methods);
-
- // Add route
- $route = $this->createRoute($methods, $pattern, $handler);
- $this->routes[$route->getIdentifier()] = $route;
- $this->routeCounter++;
-
- return $route;
- }
-
- /**
- * Dispatch router for HTTP request
- *
- * @param ServerRequestInterface $request The current HTTP request object
- *
- * @return array
- *
- * @link https://github.com/nikic/FastRoute/blob/master/src/Dispatcher.php
- */
- public function dispatch(ServerRequestInterface $request)
- {
- $uri = '/' . ltrim($request->getUri()->getPath(), '/');
-
- return $this->createDispatcher()->dispatch(
- $request->getMethod(),
- $uri
- );
- }
-
- /**
- * Create a new Route object
- *
- * @param string[] $methods Array of HTTP methods
- * @param string $pattern The route pattern
- * @param callable $callable The route callable
- *
- * @return \Slim\Interfaces\RouteInterface
- */
- protected function createRoute($methods, $pattern, $callable)
- {
- $route = new Route($methods, $pattern, $callable, $this->routeGroups, $this->routeCounter);
- if (!empty($this->container)) {
- $route->setContainer($this->container);
- }
-
- return $route;
- }
-
- /**
- * @return \FastRoute\Dispatcher
- */
- protected function createDispatcher()
- {
- if ($this->dispatcher) {
- return $this->dispatcher;
- }
-
- $routeDefinitionCallback = function (RouteCollector $r) {
- foreach ($this->getRoutes() as $route) {
- $r->addRoute($route->getMethods(), $route->getPattern(), $route->getIdentifier());
- }
- };
-
- if ($this->cacheFile) {
- $this->dispatcher = \FastRoute\cachedDispatcher($routeDefinitionCallback, [
- 'routeParser' => $this->routeParser,
- 'cacheFile' => $this->cacheFile,
- ]);
- } else {
- $this->dispatcher = \FastRoute\simpleDispatcher($routeDefinitionCallback, [
- 'routeParser' => $this->routeParser,
- ]);
- }
-
- return $this->dispatcher;
- }
-
- /**
- * @param \FastRoute\Dispatcher $dispatcher
- */
- public function setDispatcher(Dispatcher $dispatcher)
- {
- $this->dispatcher = $dispatcher;
- }
-
- /**
- * Get route objects
- *
- * @return Route[]
- */
- public function getRoutes()
- {
- return $this->routes;
- }
-
- /**
- * Get named route object
- *
- * @param string $name Route name
- *
- * @return Route
- *
- * @throws RuntimeException If named route does not exist
- */
- public function getNamedRoute($name)
- {
- foreach ($this->routes as $route) {
- if ($name == $route->getName()) {
- return $route;
- }
- }
- throw new RuntimeException('Named route does not exist for name: ' . $name);
- }
-
- /**
- * Remove named route
- *
- * @param string $name Route name
- *
- * @throws RuntimeException If named route does not exist
- */
- public function removeNamedRoute($name)
- {
- $route = $this->getNamedRoute($name);
-
- // no exception, route exists, now remove by id
- unset($this->routes[$route->getIdentifier()]);
- }
-
- /**
- * Process route groups
- *
- * @return string A group pattern to prefix routes with
- */
- protected function processGroups()
- {
- $pattern = "";
- foreach ($this->routeGroups as $group) {
- $pattern .= $group->getPattern();
- }
- return $pattern;
- }
-
- /**
- * Add a route group to the array
- *
- * @param string $pattern
- * @param callable $callable
- *
- * @return RouteGroupInterface
- */
- public function pushGroup($pattern, $callable)
- {
- $group = new RouteGroup($pattern, $callable);
- array_push($this->routeGroups, $group);
- return $group;
- }
-
- /**
- * Removes the last route group from the array
- *
- * @return RouteGroup|bool The RouteGroup if successful, else False
- */
- public function popGroup()
- {
- $group = array_pop($this->routeGroups);
- return $group instanceof RouteGroup ? $group : false;
- }
-
- /**
- * @param $identifier
- * @return \Slim\Interfaces\RouteInterface
- */
- public function lookupRoute($identifier)
- {
- if (!isset($this->routes[$identifier])) {
- throw new RuntimeException('Route not found, looks like your route cache is stale.');
- }
- return $this->routes[$identifier];
- }
-
- /**
- * Build the path for a named route excluding the base path
- *
- * @param string $name Route name
- * @param array $data Named argument replacement data
- * @param array $queryParams Optional query string parameters
- *
- * @return string
- *
- * @throws RuntimeException If named route does not exist
- * @throws InvalidArgumentException If required data not provided
- */
- public function relativePathFor($name, array $data = [], array $queryParams = [])
- {
- $route = $this->getNamedRoute($name);
- $pattern = $route->getPattern();
-
- $routeDatas = $this->routeParser->parse($pattern);
- // $routeDatas is an array of all possible routes that can be made. There is
- // one routedata for each optional parameter plus one for no optional parameters.
- //
- // The most specific is last, so we look for that first.
- $routeDatas = array_reverse($routeDatas);
-
- $segments = [];
- foreach ($routeDatas as $routeData) {
- foreach ($routeData as $item) {
- if (is_string($item)) {
- // this segment is a static string
- $segments[] = $item;
- continue;
- }
-
- // This segment has a parameter: first element is the name
- if (!array_key_exists($item[0], $data)) {
- // we don't have a data element for this segment: cancel
- // testing this routeData item, so that we can try a less
- // specific routeData item.
- $segments = [];
- $segmentName = $item[0];
- break;
- }
- $segments[] = $data[$item[0]];
- }
- if (!empty($segments)) {
- // we found all the parameters for this route data, no need to check
- // less specific ones
- 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;
- }
-
-
- /**
- * Build the path for a named route including the base path
- *
- * @param string $name Route name
- * @param array $data Named argument replacement data
- * @param array $queryParams Optional query string parameters
- *
- * @return string
- *
- * @throws RuntimeException If named route does not exist
- * @throws InvalidArgumentException If required data not provided
- */
- public function pathFor($name, array $data = [], array $queryParams = [])
- {
- $url = $this->relativePathFor($name, $data, $queryParams);
-
- if ($this->basePath) {
- $url = $this->basePath . $url;
- }
-
- return $url;
- }
-
- /**
- * Build the path for a named route.
- *
- * This method is deprecated. Use pathFor() from now on.
- *
- * @param string $name Route name
- * @param array $data Named argument replacement data
- * @param array $queryParams Optional query string parameters
- *
- * @return string
- *
- * @throws RuntimeException If named route does not exist
- * @throws InvalidArgumentException If required data not provided
- */
- public function urlFor($name, array $data = [], array $queryParams = [])
- {
- trigger_error('urlFor() is deprecated. Use pathFor() instead.', E_USER_DEPRECATED);
- return $this->pathFor($name, $data, $queryParams);
- }
-}
diff --git a/server/vendor/slim/slim/composer.json b/server/vendor/slim/slim/composer.json
deleted file mode 100644
index 554a838..0000000
--- a/server/vendor/slim/slim/composer.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "name": "slim/slim",
- "type": "library",
- "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
- "keywords": ["framework","micro","api","router"],
- "homepage": "https://slimframework.com",
- "license": "MIT",
- "authors": [
- {
- "name": "Josh Lockhart",
- "email": "hello@joshlockhart.com",
- "homepage": "https://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": "Gabriel Manricks",
- "email": "gmanricks@me.com",
- "homepage": "http://gabrielmanricks.com"
- }
- ],
- "require": {
- "php": ">=5.5.0",
- "pimple/pimple": "^3.0",
- "psr/http-message": "^1.0",
- "nikic/fast-route": "^1.0",
- "container-interop/container-interop": "^1.2",
- "psr/container": "^1.0"
- },
- "require-dev": {
- "squizlabs/php_codesniffer": "^2.5",
- "phpunit/phpunit": "^4.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "autoload": {
- "psr-4": {
- "Slim\\": "Slim"
- }
- },
- "scripts": {
- "test": [
- "@phpunit",
- "@phpcs"
- ],
- "phpunit": "php vendor/bin/phpunit",
- "phpcs": "php vendor/bin/phpcs"
- }
-}
diff --git a/server/verifycron.php b/server/verifycron.php
index ad4dc48..85c4e4a 100644
--- a/server/verifycron.php
+++ b/server/verifycron.php
@@ -19,20 +19,25 @@
*
*/
+use LookupServer\UserManager;
+
require __DIR__ . '/vendor/autoload.php';
if (PHP_SAPI !== 'cli') {
- return;
+ return;
}
-$env = \Slim\Http\Environment::mock(['REQUEST_URI' => '/verify']);
-$settings = require __DIR__ . '/src/config.php';
-$settings['environment'] = $env;
-$container = new \Slim\Container($settings);
-require __DIR__ . '/src/dependencies.php';
+require __DIR__ . '/init.php';
+
+if (!isset($app) || !isset($container)) {
+ return;
+}
+
+/** @var UserManager $userManager */
+$userManager = $container->get('UserManager');
+$userManager->verify();
-$app = new \Slim\App($container);
$app->map(['GET'], '/verify', 'UserManager:verify');
$app->run();
diff --git a/todo.md b/todo.md
deleted file mode 100755
index 8542fc5..0000000
--- a/todo.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Todo:
-
-## 1.0
-- Twitter verification and increase Karma level
-- Website verification and increase Karma level
-- Reset authkey by email feature
-- Make email verification website and verification email prettier
-- Cleanup Logging and Error levels and reporting
-
-## 2.0
-- Github verification and increase Karma level
-- Add automatic updater
-- REST call caching
-- Make IPv6 ready in brute-force protection and ip black listing