From 1e85222d8fd76305c1aeddc9311fcb6567d3d51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 5 Mar 2021 12:08:21 -0500 Subject: [PATCH 01/50] Work in progress --- fixtures/targets/p2/drupal/core.json | 2 +- fixtures/targets/packages.json | 4 +- src/HttpDownloaderAdapter.php | 228 ++++++++++++++++++ .../TufValidatedComposerRepository.php | 62 +---- 4 files changed, 243 insertions(+), 53 deletions(-) create mode 100644 src/HttpDownloaderAdapter.php diff --git a/fixtures/targets/p2/drupal/core.json b/fixtures/targets/p2/drupal/core.json index cbd63f3..5240bfb 100644 --- a/fixtures/targets/p2/drupal/core.json +++ b/fixtures/targets/p2/drupal/core.json @@ -1 +1 @@ -{"packages":{"drupal/core":[{"name":"drupal/core","description":"Drupal is an open source content management platform powering millions of websites and applications.","keywords":[],"homepage":"","version":"9.0.5","version_normalized":"9.0.5.0","license":["GPL-2.0-or-later"],"authors":[],"source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"145671b8ac88322c43c8415cf287b76dfe45ad38"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/145671b8ac88322c43c8415cf287b76dfe45ad38","reference":"145671b8ac88322c43c8415cf287b76dfe45ad38","shasum":""},"type":"drupal-core","time":"2020-09-03T21:05:44+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/DependencyInjection/Container.php","lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php","lib/Drupal/Component/FileCache/FileCacheFactory.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Cache/Cache.php","lib/Drupal/Core/Cache/CacheBackendInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumTrait.php","lib/Drupal/Core/Cache/CacheTagsInvalidatorInterface.php","lib/Drupal/Core/Cache/DatabaseBackend.php","lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php","lib/Drupal/Core/Database/Connection.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/Database/Driver/mysql/Connection.php","lib/Drupal/Core/Database/Driver/pgsql/Connection.php","lib/Drupal/Core/Database/Driver/sqlite/Connection.php","lib/Drupal/Core/Database/Statement.php","lib/Drupal/Core/Database/StatementInterface.php","lib/Drupal/Core/DependencyInjection/Container.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Installer/InstallerRedirectTrait.php","lib/Drupal/Core/Site/Settings.php"]},"extra":{"drupal-scaffold":{"file-mapping":{"[project-root]/.editorconfig":"assets/scaffold/files/editorconfig","[project-root]/.gitattributes":"assets/scaffold/files/gitattributes","[web-root]/.csslintrc":"assets/scaffold/files/csslintrc","[web-root]/.eslintignore":"assets/scaffold/files/eslintignore","[web-root]/.eslintrc.json":"assets/scaffold/files/eslintrc.json","[web-root]/.ht.router.php":"assets/scaffold/files/ht.router.php","[web-root]/.htaccess":"assets/scaffold/files/htaccess","[web-root]/example.gitignore":"assets/scaffold/files/example.gitignore","[web-root]/index.php":"assets/scaffold/files/index.php","[web-root]/INSTALL.txt":"assets/scaffold/files/drupal.INSTALL.txt","[web-root]/README.txt":"assets/scaffold/files/drupal.README.txt","[web-root]/robots.txt":"assets/scaffold/files/robots.txt","[web-root]/update.php":"assets/scaffold/files/update.php","[web-root]/web.config":"assets/scaffold/files/web.config","[web-root]/sites/README.txt":"assets/scaffold/files/sites.README.txt","[web-root]/sites/development.services.yml":"assets/scaffold/files/development.services.yml","[web-root]/sites/example.settings.local.php":"assets/scaffold/files/example.settings.local.php","[web-root]/sites/example.sites.php":"assets/scaffold/files/example.sites.php","[web-root]/sites/default/default.services.yml":"assets/scaffold/files/default.services.yml","[web-root]/sites/default/default.settings.php":"assets/scaffold/files/default.settings.php","[web-root]/modules/README.txt":"assets/scaffold/files/modules.README.txt","[web-root]/profiles/README.txt":"assets/scaffold/files/profiles.README.txt","[web-root]/themes/README.txt":"assets/scaffold/files/themes.README.txt"}}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"conflict":{"drush/drush":"<8.1.10"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.5"}},{"version":"9.0.4","version_normalized":"9.0.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f6366e4a42e23ebfdc4ad16750f50b5217b2765e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f6366e4a42e23ebfdc4ad16750f50b5217b2765e","reference":"f6366e4a42e23ebfdc4ad16750f50b5217b2765e","shasum":""},"time":"2020-09-02T11:23:11+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.4"}},{"version":"9.0.3","version_normalized":"9.0.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"883018fe0aa16cee450bb043fcb4893c05438283"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/883018fe0aa16cee450bb043fcb4893c05438283","reference":"883018fe0aa16cee450bb043fcb4893c05438283","shasum":""},"time":"2020-08-05T21:47:03+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.3"}},{"version":"9.0.2","version_normalized":"9.0.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ea6e0cef3240dc8e48f797698226467de121e9c9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ea6e0cef3240dc8e48f797698226467de121e9c9","reference":"ea6e0cef3240dc8e48f797698226467de121e9c9","shasum":""},"time":"2020-07-08T18:31:41+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.2"}},{"version":"9.0.1","version_normalized":"9.0.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1cd5f38665c789df215b0f145798b44bd88fdab2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1cd5f38665c789df215b0f145798b44bd88fdab2","reference":"1cd5f38665c789df215b0f145798b44bd88fdab2","shasum":""},"time":"2020-06-17T17:56:46+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.1"}},{"version":"9.0.0","version_normalized":"9.0.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b86a9ddcc7f33608845a3219ed63507661ea69ee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b86a9ddcc7f33608845a3219ed63507661ea69ee","reference":"b86a9ddcc7f33608845a3219ed63507661ea69ee","shasum":""},"time":"2020-06-03T21:43:50+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0"}},{"version":"9.0.0-rc1","version_normalized":"9.0.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b97eebe9799d323f3dc0a5c372b341de57bbc7d4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b97eebe9799d323f3dc0a5c372b341de57bbc7d4","reference":"b97eebe9799d323f3dc0a5c372b341de57bbc7d4","shasum":""},"time":"2020-05-22T22:32:46+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0-rc1"}},{"version":"9.0.0-beta3","version_normalized":"9.0.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"084a8705f4169a95366eea1451012c81ca2cd500"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/084a8705f4169a95366eea1451012c81ca2cd500","reference":"084a8705f4169a95366eea1451012c81ca2cd500","shasum":""},"time":"2020-05-15T23:57:43+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta3"}},{"version":"9.0.0-beta2","version_normalized":"9.0.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ae085c68b25b78cc77091fb3d8d29fcd941f8d35"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ae085c68b25b78cc77091fb3d8d29fcd941f8d35","reference":"ae085c68b25b78cc77091fb3d8d29fcd941f8d35","shasum":""},"time":"2020-03-30T19:13:47+00:00","conflict":{"drupal/pathauto":"<1.6","drush/drush":"<8.1.10"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta2"}},{"version":"9.0.0-beta1","version_normalized":"9.0.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a3547cf77d19b680834e3fae5cb159219814641a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a3547cf77d19b680834e3fae5cb159219814641a","reference":"a3547cf77d19b680834e3fae5cb159219814641a","shasum":""},"time":"2020-03-20T19:21:18+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_environment":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta1"}},{"version":"9.0.0-alpha2","version_normalized":"9.0.0.0-alpha2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e7430881bfe5eea47cb384a82bda9d73ae9072f4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e7430881bfe5eea47cb384a82bda9d73ae9072f4","reference":"e7430881bfe5eea47cb384a82bda9d73ae9072f4","shasum":""},"time":"2020-03-04T18:12:13+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-alpha2"}},{"version":"9.0.0-alpha1","version_normalized":"9.0.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b3be17114997f4e3ae95b5607744bc0c1031356f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b3be17114997f4e3ae95b5607744bc0c1031356f","reference":"b3be17114997f4e3ae95b5607744bc0c1031356f","shasum":""},"time":"2020-02-11T18:17:58+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php"]},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/class-loader":"~3.4.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_environment":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-alpha1"}},{"version":"8.9.5","version_normalized":"8.9.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c9b9643663b80f02c038f9dea15b8717a22c3339"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c9b9643663b80f02c038f9dea15b8717a22c3339","reference":"c9b9643663b80f02c038f9dea15b8717a22c3339","shasum":""},"time":"2020-09-03T21:07:45+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.9.5"}},{"version":"8.9.4","version_normalized":"8.9.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1de88703485c755d0db7420156432306a0acad8f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1de88703485c755d0db7420156432306a0acad8f","reference":"1de88703485c755d0db7420156432306a0acad8f","shasum":""},"time":"2020-09-02T11:37:12+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.4"}},{"version":"8.9.3","version_normalized":"8.9.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ee02fd4cbe4ac148b4d7e297ec63b3459983862e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ee02fd4cbe4ac148b4d7e297ec63b3459983862e","reference":"ee02fd4cbe4ac148b4d7e297ec63b3459983862e","shasum":""},"time":"2020-08-05T21:49:40+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.3"}},{"version":"8.9.2","version_normalized":"8.9.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8f0e24555c093669ce41edbb30637fe19df16802"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8f0e24555c093669ce41edbb30637fe19df16802","reference":"8f0e24555c093669ce41edbb30637fe19df16802","shasum":""},"time":"2020-07-08T18:53:45+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.2"}},{"version":"8.9.1","version_normalized":"8.9.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e8ee964c562870381876e85d3f5eaaf8c8ecc9ee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e8ee964c562870381876e85d3f5eaaf8c8ecc9ee","reference":"e8ee964c562870381876e85d3f5eaaf8c8ecc9ee","shasum":""},"time":"2020-06-17T17:57:48+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.1"}},{"version":"8.9.0","version_normalized":"8.9.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f90882ab0723becda2333e4d33e1a6ab27cb8f0c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f90882ab0723becda2333e4d33e1a6ab27cb8f0c","reference":"f90882ab0723becda2333e4d33e1a6ab27cb8f0c","shasum":""},"time":"2020-06-03T16:44:36+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0"}},{"version":"8.9.0-rc1","version_normalized":"8.9.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bd856870252c1c102e5a99272e02cb91127f4afd"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bd856870252c1c102e5a99272e02cb91127f4afd","reference":"bd856870252c1c102e5a99272e02cb91127f4afd","shasum":""},"time":"2020-05-22T22:57:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.0-rc1"}},{"version":"8.9.0-beta3","version_normalized":"8.9.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f33d30a9e1f4a7b20a1eccd963767ec70c716c8e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f33d30a9e1f4a7b20a1eccd963767ec70c716c8e","reference":"f33d30a9e1f4a7b20a1eccd963767ec70c716c8e","shasum":""},"time":"2020-05-17T19:53:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta3"}},{"version":"8.9.0-beta2","version_normalized":"8.9.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d67c87a64c552525b3c2433047d96c445310d4c4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d67c87a64c552525b3c2433047d96c445310d4c4","reference":"d67c87a64c552525b3c2433047d96c445310d4c4","shasum":""},"time":"2020-04-02T18:59:14+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta2"}},{"version":"8.9.0-beta1","version_normalized":"8.9.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bd38e6c7df640867de0fe41f055864645e1bf0a8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bd38e6c7df640867de0fe41f055864645e1bf0a8","reference":"bd38e6c7df640867de0fe41f055864645e1bf0a8","shasum":""},"time":"2020-03-26T22:24:05+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta1"}},{"version":"8.8.9","version_normalized":"8.8.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c8270789d71767c6482ccb6cc6e51f5ca4302cbc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c8270789d71767c6482ccb6cc6e51f5ca4302cbc","reference":"c8270789d71767c6482ccb6cc6e51f5ca4302cbc","shasum":""},"time":"2020-09-03T21:09:29+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"support":{"source":"https://github.com/drupal/core/tree/8.8.9"}},{"version":"8.8.8","version_normalized":"8.8.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c067109fcdf86184a7c75081fd8f1d81e4e23f56"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c067109fcdf86184a7c75081fd8f1d81e4e23f56","reference":"c067109fcdf86184a7c75081fd8f1d81e4e23f56","shasum":""},"time":"2020-06-17T17:58:48+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.8"}},{"version":"8.8.7","version_normalized":"8.8.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"92735f06d41145d96c2ec48cfe9776bcbe68baa2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/92735f06d41145d96c2ec48cfe9776bcbe68baa2","reference":"92735f06d41145d96c2ec48cfe9776bcbe68baa2","shasum":""},"time":"2020-06-03T16:39:46+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.7"}},{"version":"8.8.6","version_normalized":"8.8.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a5daf2aa45bbc72da72e1e64d5261f746ffb508c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a5daf2aa45bbc72da72e1e64d5261f746ffb508c","reference":"a5daf2aa45bbc72da72e1e64d5261f746ffb508c","shasum":""},"time":"2020-05-20T08:22:02+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"support":{"source":"https://github.com/drupal/core/tree/8.8.6"}},{"version":"8.8.5","version_normalized":"8.8.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e22cfc3adf1dac7a92452287a7d8602f3c27b68f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e22cfc3adf1dac7a92452287a7d8602f3c27b68f","reference":"e22cfc3adf1dac7a92452287a7d8602f3c27b68f","shasum":""},"time":"2020-04-02T19:01:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.5"}},{"version":"8.8.4","version_normalized":"8.8.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"34e59fcf702c1b3c497bbd6e92e68e546c5d15b8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/34e59fcf702c1b3c497bbd6e92e68e546c5d15b8","reference":"34e59fcf702c1b3c497bbd6e92e68e546c5d15b8","shasum":""},"time":"2020-03-18T16:26:33+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.4"}},{"version":"8.8.3","version_normalized":"8.8.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"77971de6d6ade7366cdd3fadfc16c5d02e531446"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/77971de6d6ade7366cdd3fadfc16c5d02e531446","reference":"77971de6d6ade7366cdd3fadfc16c5d02e531446","shasum":""},"time":"2020-03-04T18:01:37+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.3"}},{"version":"8.8.2","version_normalized":"8.8.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f997857003276c2ae6d27db30f0eab9c7dd10e62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f997857003276c2ae6d27db30f0eab9c7dd10e62","reference":"f997857003276c2ae6d27db30f0eab9c7dd10e62","shasum":""},"time":"2020-02-01T19:51:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.2"}},{"version":"8.8.1","version_normalized":"8.8.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d339279f4c4b89477e0f4a8b775eb5dcb86b3087"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d339279f4c4b89477e0f4a8b775eb5dcb86b3087","reference":"d339279f4c4b89477e0f4a8b775eb5dcb86b3087","shasum":""},"time":"2019-12-18T10:34:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.1"}},{"version":"8.8.0","version_normalized":"8.8.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c4890669449ccbab770818de9c9cb7a9f0ffc32e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c4890669449ccbab770818de9c9cb7a9f0ffc32e","reference":"c4890669449ccbab770818de9c9cb7a9f0ffc32e","shasum":""},"time":"2019-12-04T08:44:18+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.8"},"support":{"source":"https://github.com/drupal/core/tree/8.8.0"}},{"version":"8.8.0-rc1","version_normalized":"8.8.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2e16925020254f876c0ba3a4e11c4cd9ccbc6856"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2e16925020254f876c0ba3a4e11c4cd9ccbc6856","reference":"2e16925020254f876c0ba3a4e11c4cd9ccbc6856","shasum":""},"time":"2019-11-22T22:29:01+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.0-rc1"}},{"version":"8.8.0-beta1","version_normalized":"8.8.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6017c881bc0cec2d096a1e9d31c36f6a06e1f560"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6017c881bc0cec2d096a1e9d31c36f6a06e1f560","reference":"6017c881bc0cec2d096a1e9d31c36f6a06e1f560","shasum":""},"time":"2019-11-08T23:22:14+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.0-beta1"}},{"version":"8.8.0-alpha1","version_normalized":"8.8.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aa2ea999ca5d2173f14b5030dfba81bec41f5e09"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aa2ea999ca5d2173f14b5030dfba81bec41f5e09","reference":"aa2ea999ca5d2173f14b5030dfba81bec41f5e09","shasum":""},"time":"2019-10-17T23:33:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.2","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":">=1.7 <1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.5"},"conflict":{"drush/drush":"<8.1.10"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.8.0-alpha1"}},{"version":"8.7.14","version_normalized":"8.7.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326","reference":"3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326","shasum":""},"time":"2020-05-20T08:22:34+00:00","extra":{"merge-plugin":{"require":["core/lib/Drupal/Component/Annotation/composer.json","core/lib/Drupal/Component/Assertion/composer.json","core/lib/Drupal/Component/Bridge/composer.json","core/lib/Drupal/Component/ClassFinder/composer.json","core/lib/Drupal/Component/Datetime/composer.json","core/lib/Drupal/Component/DependencyInjection/composer.json","core/lib/Drupal/Component/Diff/composer.json","core/lib/Drupal/Component/Discovery/composer.json","core/lib/Drupal/Component/EventDispatcher/composer.json","core/lib/Drupal/Component/FileCache/composer.json","core/lib/Drupal/Component/FileSystem/composer.json","core/lib/Drupal/Component/Gettext/composer.json","core/lib/Drupal/Component/Graph/composer.json","core/lib/Drupal/Component/HttpFoundation/composer.json","core/lib/Drupal/Component/PhpStorage/composer.json","core/lib/Drupal/Component/Plugin/composer.json","core/lib/Drupal/Component/ProxyBuilder/composer.json","core/lib/Drupal/Component/Render/composer.json","core/lib/Drupal/Component/Serialization/composer.json","core/lib/Drupal/Component/Transliteration/composer.json","core/lib/Drupal/Component/Utility/composer.json","core/lib/Drupal/Component/Uuid/composer.json","core/lib/Drupal/Component/Version/composer.json"],"recurse":false,"replace":false,"merge-extra":false}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.3.1","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.7","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0","justinrainbow/json-schema":"^5.2"},"conflict":{"drush/drush":"<8.1.10","symfony/dom-crawler":">=4"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.7.14"}},{"version":"8.7.13","version_normalized":"8.7.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e31ff52ba598ed97f83379ca6444efc2ffcbae62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e31ff52ba598ed97f83379ca6444efc2ffcbae62","reference":"e31ff52ba598ed97f83379ca6444efc2ffcbae62","shasum":""},"time":"2020-04-02T19:05:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.13"}},{"version":"8.7.12","version_normalized":"8.7.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"412ac47f5a17a718617a844504db15208ff61245"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/412ac47f5a17a718617a844504db15208ff61245","reference":"412ac47f5a17a718617a844504db15208ff61245","shasum":""},"time":"2020-03-18T16:27:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.12"}},{"version":"8.7.11","version_normalized":"8.7.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a691876294fadc2795a8add96359b5ffc109d7f2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a691876294fadc2795a8add96359b5ffc109d7f2","reference":"a691876294fadc2795a8add96359b5ffc109d7f2","shasum":""},"time":"2019-12-18T08:55:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.11"}},{"version":"8.7.10","version_normalized":"8.7.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"02400f3ac4970b218dc63064895b3cbbe8576ad9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/02400f3ac4970b218dc63064895b3cbbe8576ad9","reference":"02400f3ac4970b218dc63064895b3cbbe8576ad9","shasum":""},"time":"2019-11-13T23:20:55+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.10"}},{"version":"8.7.9","version_normalized":"8.7.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"881e60062ea86a8f6809a298f09f56afd20b3cf3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/881e60062ea86a8f6809a298f09f56afd20b3cf3","reference":"881e60062ea86a8f6809a298f09f56afd20b3cf3","shasum":""},"time":"2019-11-06T18:00:38+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.9"}},{"version":"8.7.8","version_normalized":"8.7.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"476f491b85306c09101106d9b66a5dbe73c21bf0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/476f491b85306c09101106d9b66a5dbe73c21bf0","reference":"476f491b85306c09101106d9b66a5dbe73c21bf0","shasum":""},"time":"2019-10-02T18:41:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.8"}},{"version":"8.7.7","version_normalized":"8.7.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92","reference":"32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92","shasum":""},"time":"2019-09-04T10:26:35+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.7"}},{"version":"8.7.6","version_normalized":"8.7.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"39164616332832e1456199d32fc3ed11562f4721"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/39164616332832e1456199d32fc3ed11562f4721","reference":"39164616332832e1456199d32fc3ed11562f4721","shasum":""},"time":"2019-08-07T19:19:20+00:00","conflict":{"drush/drush":"<8.1.10"},"support":{"source":"https://github.com/drupal/core/tree/8.7.6"}},{"version":"8.7.5","version_normalized":"8.7.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"12cea52c782bb76e666c54c2a65cd3946daa3613"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/12cea52c782bb76e666c54c2a65cd3946daa3613","reference":"12cea52c782bb76e666c54c2a65cd3946daa3613","shasum":""},"time":"2019-07-16T16:24:57+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.5"}},{"version":"8.7.4","version_normalized":"8.7.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a6d447d41545323f54c5034e551fb43b8050eca9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a6d447d41545323f54c5034e551fb43b8050eca9","reference":"a6d447d41545323f54c5034e551fb43b8050eca9","shasum":""},"time":"2019-07-04T07:26:51+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.4"}},{"version":"8.7.3","version_normalized":"8.7.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b8ca92d4274048aff6bb020c329596c0e9b91269"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b8ca92d4274048aff6bb020c329596c0e9b91269","reference":"b8ca92d4274048aff6bb020c329596c0e9b91269","shasum":""},"time":"2019-06-05T19:21:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.3"}},{"version":"8.7.2","version_normalized":"8.7.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9","reference":"31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9","shasum":""},"time":"2019-05-23T07:22:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.x"}},{"version":"8.7.1","version_normalized":"8.7.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"969f24810fb31eac71dd624de593f551bd6dc2a3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/969f24810fb31eac71dd624de593f551bd6dc2a3","reference":"969f24810fb31eac71dd624de593f551bd6dc2a3","shasum":""},"time":"2019-05-08T16:00:55+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.1"}},{"version":"8.7.0","version_normalized":"8.7.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5da135abcf5dbc0204e9a75c87381c7553a74d5e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5da135abcf5dbc0204e9a75c87381c7553a74d5e","reference":"5da135abcf5dbc0204e9a75c87381c7553a74d5e","shasum":""},"time":"2019-05-01T18:39:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0"}},{"version":"8.7.0-rc1","version_normalized":"8.7.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e46d94843a9281b6d72bcf411f3ad6d2647ae2b3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e46d94843a9281b6d72bcf411f3ad6d2647ae2b3","reference":"e46d94843a9281b6d72bcf411f3ad6d2647ae2b3","shasum":""},"time":"2019-04-18T15:48:04+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-rc1"}},{"version":"8.7.0-beta2","version_normalized":"8.7.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bb1c05930162e80277b2cb88eb2d0f647c856946"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bb1c05930162e80277b2cb88eb2d0f647c856946","reference":"bb1c05930162e80277b2cb88eb2d0f647c856946","shasum":""},"time":"2019-04-08T00:25:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-beta2"}},{"version":"8.7.0-beta1","version_normalized":"8.7.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aad975103541446bb5da161e011d27474e107c48"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aad975103541446bb5da161e011d27474e107c48","reference":"aad975103541446bb5da161e011d27474e107c48","shasum":""},"time":"2019-03-29T17:36:49+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.0-beta1"}},{"version":"8.7.0-alpha2","version_normalized":"8.7.0.0-alpha2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"01186536523f5a15363ee536c177cf415890a10b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/01186536523f5a15363ee536c177cf415890a10b","reference":"01186536523f5a15363ee536c177cf415890a10b","shasum":""},"time":"2019-03-20T18:08:26+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.7","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-alpha2"}},{"version":"8.7.0-alpha1","version_normalized":"8.7.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e64e88c0945cb2dfc251b38a7a20266abdf36420"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e64e88c0945cb2dfc251b38a7a20266abdf36420","reference":"e64e88c0945cb2dfc251b38a7a20266abdf36420","shasum":""},"time":"2019-03-14T22:16:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.0-alpha1"}},{"version":"8.6.18","version_normalized":"8.6.18.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"90b77022dd055705369b98ebc7895997096d459f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/90b77022dd055705369b98ebc7895997096d459f","reference":"90b77022dd055705369b98ebc7895997096d459f","shasum":""},"time":"2019-11-13T23:24:48+00:00","extra":{"merge-plugin":{"require":["core/lib/Drupal/Component/Annotation/composer.json","core/lib/Drupal/Component/Assertion/composer.json","core/lib/Drupal/Component/Bridge/composer.json","core/lib/Drupal/Component/ClassFinder/composer.json","core/lib/Drupal/Component/Datetime/composer.json","core/lib/Drupal/Component/DependencyInjection/composer.json","core/lib/Drupal/Component/Diff/composer.json","core/lib/Drupal/Component/Discovery/composer.json","core/lib/Drupal/Component/EventDispatcher/composer.json","core/lib/Drupal/Component/FileCache/composer.json","core/lib/Drupal/Component/FileSystem/composer.json","core/lib/Drupal/Component/Gettext/composer.json","core/lib/Drupal/Component/Graph/composer.json","core/lib/Drupal/Component/HttpFoundation/composer.json","core/lib/Drupal/Component/PhpStorage/composer.json","core/lib/Drupal/Component/Plugin/composer.json","core/lib/Drupal/Component/ProxyBuilder/composer.json","core/lib/Drupal/Component/Render/composer.json","core/lib/Drupal/Component/Serialization/composer.json","core/lib/Drupal/Component/Transliteration/composer.json","core/lib/Drupal/Component/Utility/composer.json","core/lib/Drupal/Component/Uuid/composer.json"],"recurse":false,"replace":false,"merge-extra":false}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.6.18"}},{"version":"8.6.17","version_normalized":"8.6.17.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"47cb4ad62b01424221d045313d76385cbd19df22"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/47cb4ad62b01424221d045313d76385cbd19df22","reference":"47cb4ad62b01424221d045313d76385cbd19df22","shasum":""},"time":"2019-06-17T07:26:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.17"}},{"version":"8.6.16","version_normalized":"8.6.16.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a9c4c97c7da9ec1a38782912bb06784d28590539"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a9c4c97c7da9ec1a38782912bb06784d28590539","reference":"a9c4c97c7da9ec1a38782912bb06784d28590539","shasum":""},"time":"2019-05-08T16:00:58+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.16"}},{"version":"8.6.15","version_normalized":"8.6.15.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"936456cdeac25c6bbd2f55b0d587239c6a81ba86"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/936456cdeac25c6bbd2f55b0d587239c6a81ba86","reference":"936456cdeac25c6bbd2f55b0d587239c6a81ba86","shasum":""},"time":"2019-04-17T20:00:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.15"}},{"version":"8.6.14","version_normalized":"8.6.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5","reference":"7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5","shasum":""},"time":"2019-04-08T01:37:34+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.14"}},{"version":"8.6.13","version_normalized":"8.6.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8d5b80030ac3f13df2d66aeef0ea388fd9a90632"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8d5b80030ac3f13df2d66aeef0ea388fd9a90632","reference":"8d5b80030ac3f13df2d66aeef0ea388fd9a90632","shasum":""},"time":"2019-03-20T06:01:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.13"}},{"version":"8.6.12","version_normalized":"8.6.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f81e50dd6145c1d35797eb522f841a96804e9869"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f81e50dd6145c1d35797eb522f841a96804e9869","reference":"f81e50dd6145c1d35797eb522f841a96804e9869","shasum":""},"time":"2019-03-14T22:08:21+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.12"}},{"version":"8.6.11","version_normalized":"8.6.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"95233343dca7d0276b800ec2a1d9a3e7d0fc622d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/95233343dca7d0276b800ec2a1d9a3e7d0fc622d","reference":"95233343dca7d0276b800ec2a1d9a3e7d0fc622d","shasum":""},"time":"2019-03-13T20:52:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.11"}},{"version":"8.6.10","version_normalized":"8.6.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59568ac02948cf075ee8543e6c6d4386ad8daec1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59568ac02948cf075ee8543e6c6d4386ad8daec1","reference":"59568ac02948cf075ee8543e6c6d4386ad8daec1","shasum":""},"time":"2019-02-20T18:35:01+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.10"}},{"version":"8.6.9","version_normalized":"8.6.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cac12e0ec19d5c6fa53778522b3ff4c542f86c8d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cac12e0ec19d5c6fa53778522b3ff4c542f86c8d","reference":"cac12e0ec19d5c6fa53778522b3ff4c542f86c8d","shasum":""},"time":"2019-02-08T12:21:40+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.9"}},{"version":"8.6.8","version_normalized":"8.6.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0e0ccce552859f6fd3aec6b5754ad0d6ede07227"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0e0ccce552859f6fd3aec6b5754ad0d6ede07227","reference":"0e0ccce552859f6fd3aec6b5754ad0d6ede07227","shasum":""},"time":"2019-02-06T15:13:52+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.8"}},{"version":"8.6.7","version_normalized":"8.6.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e0a09bda1da7552204464894811a59387608c9f9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e0a09bda1da7552204464894811a59387608c9f9","reference":"e0a09bda1da7552204464894811a59387608c9f9","shasum":""},"time":"2019-01-16T23:30:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.7"}},{"version":"8.6.6","version_normalized":"8.6.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6736973f399a3a9ac8ecd41f3a159e1153f7ee39"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6736973f399a3a9ac8ecd41f3a159e1153f7ee39","reference":"6736973f399a3a9ac8ecd41f3a159e1153f7ee39","shasum":""},"time":"2019-01-15T17:41:52+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.6"}},{"version":"8.6.5","version_normalized":"8.6.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b66c9334d4a4264589c8b8a2fef73eefcb34a26e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b66c9334d4a4264589c8b8a2fef73eefcb34a26e","reference":"b66c9334d4a4264589c8b8a2fef73eefcb34a26e","shasum":""},"time":"2019-01-02T21:52:52+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.5"}},{"version":"8.6.4","version_normalized":"8.6.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4","reference":"652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4","shasum":""},"time":"2018-12-05T11:58:02+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.x"}},{"version":"8.6.3","version_normalized":"8.6.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9e9a1dd9e280ebaf10622217e54448b529167965"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9e9a1dd9e280ebaf10622217e54448b529167965","reference":"9e9a1dd9e280ebaf10622217e54448b529167965","shasum":""},"time":"2018-11-07T14:45:40+00:00"},{"version":"8.6.2","version_normalized":"8.6.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"356292934802bb1aecc478e88a3cba77442d7c62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/356292934802bb1aecc478e88a3cba77442d7c62","reference":"356292934802bb1aecc478e88a3cba77442d7c62","shasum":""},"time":"2018-10-17T22:19:50+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.6.2"}},{"version":"8.6.1","version_normalized":"8.6.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970","reference":"1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970","shasum":""},"time":"2018-09-10T11:50:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.x"}},{"version":"8.6.0","version_normalized":"8.6.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4a2507b102fcedc74507fd372131f2ed72913429"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4a2507b102fcedc74507fd372131f2ed72913429","reference":"4a2507b102fcedc74507fd372131f2ed72913429","shasum":""},"time":"2018-09-05T22:16:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0"}},{"version":"8.6.0-rc1","version_normalized":"8.6.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9","reference":"2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9","shasum":""},"time":"2018-08-17T18:43:58+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0-rc1"}},{"version":"8.6.0-beta2","version_normalized":"8.6.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b0f9c6865588b1f557e15e284514e807452df270"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b0f9c6865588b1f557e15e284514e807452df270","reference":"b0f9c6865588b1f557e15e284514e807452df270","shasum":""},"time":"2018-08-03T11:56:18+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0-beta2"}},{"version":"8.6.0-beta1","version_normalized":"8.6.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1ae53a417211bcc024320cba01b4be7a0c3962ba"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1ae53a417211bcc024320cba01b4be7a0c3962ba","reference":"1ae53a417211bcc024320cba01b4be7a0c3962ba","shasum":""},"time":"2018-08-03T04:09:25+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.0-beta1"}},{"version":"8.6.0-alpha1","version_normalized":"8.6.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cefeacd9ca768387d42b5fc6b895c41439f4a7f5"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cefeacd9ca768387d42b5fc6b895c41439f4a7f5","reference":"cefeacd9ca768387d42b5fc6b895c41439f4a7f5","shasum":""},"time":"2018-07-19T20:14:40+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.6.0-alpha1"}},{"version":"8.5.15","version_normalized":"8.5.15.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"912e7dd0985ece07bd0cff2e213f1423e2627082"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/912e7dd0985ece07bd0cff2e213f1423e2627082","reference":"912e7dd0985ece07bd0cff2e213f1423e2627082","shasum":""},"time":"2019-04-17T20:00:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.5.15"}},{"version":"8.5.14","version_normalized":"8.5.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59b22210b8d4602a35529cca82a543a631933423"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59b22210b8d4602a35529cca82a543a631933423","reference":"59b22210b8d4602a35529cca82a543a631933423","shasum":""},"time":"2019-03-20T06:01:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.14"}},{"version":"8.5.13","version_normalized":"8.5.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2737f8d6165fcb509846c8232bbedfe152b90c02"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2737f8d6165fcb509846c8232bbedfe152b90c02","reference":"2737f8d6165fcb509846c8232bbedfe152b90c02","shasum":""},"time":"2019-03-14T22:09:26+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.13"}},{"version":"8.5.12","version_normalized":"8.5.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f61bb0ec95b958befa0f59430614d1f5718860bf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f61bb0ec95b958befa0f59430614d1f5718860bf","reference":"f61bb0ec95b958befa0f59430614d1f5718860bf","shasum":""},"time":"2019-03-13T20:58:57+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.12"}},{"version":"8.5.11","version_normalized":"8.5.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3750c5b2e39857825a2631179d0b9a06b240193f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3750c5b2e39857825a2631179d0b9a06b240193f","reference":"3750c5b2e39857825a2631179d0b9a06b240193f","shasum":""},"time":"2019-02-20T18:35:05+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.11"}},{"version":"8.5.10","version_normalized":"8.5.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"596f97e4d55dae28e00605d9825529bd8b8ad382"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/596f97e4d55dae28e00605d9825529bd8b8ad382","reference":"596f97e4d55dae28e00605d9825529bd8b8ad382","shasum":""},"time":"2019-01-16T23:30:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.10"}},{"version":"8.5.9","version_normalized":"8.5.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bf8e511b751e3e2147c4009f28167f5545c13e31"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bf8e511b751e3e2147c4009f28167f5545c13e31","reference":"bf8e511b751e3e2147c4009f28167f5545c13e31","shasum":""},"time":"2019-01-15T17:41:56+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.9"}},{"version":"8.5.8","version_normalized":"8.5.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"01703d6f3995fcaa9c67bb02c524d7061dc040b4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/01703d6f3995fcaa9c67bb02c524d7061dc040b4","reference":"01703d6f3995fcaa9c67bb02c524d7061dc040b4","shasum":""},"time":"2018-10-17T22:19:47+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.8"}},{"version":"8.5.7","version_normalized":"8.5.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d8bdf376c0549e9bfc33030157b498df4b9bec87"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d8bdf376c0549e9bfc33030157b498df4b9bec87","reference":"d8bdf376c0549e9bfc33030157b498df4b9bec87","shasum":""},"time":"2018-09-05T22:26:39+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.7"}},{"version":"8.5.6","version_normalized":"8.5.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7d7184a69ac90ce53929ce99f18458043416107a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7d7184a69ac90ce53929ce99f18458043416107a","reference":"7d7184a69ac90ce53929ce99f18458043416107a","shasum":""},"time":"2018-08-01T20:50:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.6"}},{"version":"8.5.5","version_normalized":"8.5.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"900c28f19d4b5643f43c1cf046684046402eaac4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/900c28f19d4b5643f43c1cf046684046402eaac4","reference":"900c28f19d4b5643f43c1cf046684046402eaac4","shasum":""},"time":"2018-07-04T21:08:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.5"}},{"version":"8.5.4","version_normalized":"8.5.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6b4dc1cf3347761f63152a31786b4680b8ac7781"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6b4dc1cf3347761f63152a31786b4680b8ac7781","reference":"6b4dc1cf3347761f63152a31786b4680b8ac7781","shasum":""},"time":"2018-06-06T21:02:51+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.4"}},{"version":"8.5.3","version_normalized":"8.5.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b012f0ae51504880e920f2c6efdbdf03b6fe2129"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b012f0ae51504880e920f2c6efdbdf03b6fe2129","reference":"b012f0ae51504880e920f2c6efdbdf03b6fe2129","shasum":""},"time":"2018-04-25T15:39:01+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.3"}},{"version":"8.5.2","version_normalized":"8.5.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bc21760d4be4ad117851809183c8d18880ab275a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bc21760d4be4ad117851809183c8d18880ab275a","reference":"bc21760d4be4ad117851809183c8d18880ab275a","shasum":""},"time":"2018-04-18T17:00:56+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.2"}},{"version":"8.5.1","version_normalized":"8.5.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2aeca7dfa2661296602ac16bf9fd6085f0a121be"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2aeca7dfa2661296602ac16bf9fd6085f0a121be","reference":"2aeca7dfa2661296602ac16bf9fd6085f0a121be","shasum":""},"time":"2018-03-27T09:58:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.1"}},{"version":"8.5.0","version_normalized":"8.5.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0b9070370e272da441b4be52561c559c05f4553d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0b9070370e272da441b4be52561c559c05f4553d","reference":"0b9070370e272da441b4be52561c559c05f4553d","shasum":""},"time":"2018-03-07T21:10:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.0"}},{"version":"8.5.0-rc1","version_normalized":"8.5.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a8897035912d10ecd7930ab15ee1b229746f3db9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a8897035912d10ecd7930ab15ee1b229746f3db9","reference":"a8897035912d10ecd7930ab15ee1b229746f3db9","shasum":""},"time":"2018-02-21T17:08:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.0","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-rc1"}},{"version":"8.5.0-beta1","version_normalized":"8.5.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a32b4341c46d4e3c4ebb4328375ce2510cf576a7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a32b4341c46d4e3c4ebb4328375ce2510cf576a7","reference":"a32b4341c46d4e3c4ebb4328375ce2510cf576a7","shasum":""},"time":"2018-02-09T21:09:34+00:00","require":{"php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.0","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0","behat/mink-selenium2-driver":"^1.3"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-beta1"}},{"version":"8.5.0-alpha1","version_normalized":"8.5.0.0-alpha1","license":["GPL-2.0+"],"source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"affe6a6651a416bd998acc8840e7ce5f08c2d0e2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/affe6a6651a416bd998acc8840e7ce5f08c2d0e2","reference":"affe6a6651a416bd998acc8840e7ce5f08c2d0e2","shasum":""},"time":"2018-01-18T23:47:28+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-alpha1"},"extra":"__unset"},{"version":"8.4.8","version_normalized":"8.4.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878","reference":"3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878","shasum":""},"time":"2018-04-25T15:39:04+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~3.2.8","symfony/console":"~3.2.8","symfony/dependency-injection":"~3.2.8","symfony/event-dispatcher":"~3.2.8","symfony/http-foundation":"~3.2.8","symfony/http-kernel":"~3.2.8","symfony/routing":"~3.2.8","symfony/serializer":"~3.2.8","symfony/translation":"~3.2.8","symfony/validator":"~3.2.8","symfony/process":"~3.2.8","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.2.8","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":">=4.8.35 <5","phpspec/prophecy":"^1.4","symfony/css-selector":"~3.2.8","symfony/phpunit-bridge":"~3.2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.8"}},{"version":"8.4.7","version_normalized":"8.4.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9","reference":"07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9","shasum":""},"time":"2018-04-18T17:19:54+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.7"}},{"version":"8.4.6","version_normalized":"8.4.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f439a43c7da1df8d16067f797c0bc3498eb4c699"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f439a43c7da1df8d16067f797c0bc3498eb4c699","reference":"f439a43c7da1df8d16067f797c0bc3498eb4c699","shasum":""},"time":"2018-03-27T10:03:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.6"}},{"version":"8.4.5","version_normalized":"8.4.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"44a857df6f7ffd063cffed9a41767cdc50dd7474"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/44a857df6f7ffd063cffed9a41767cdc50dd7474","reference":"44a857df6f7ffd063cffed9a41767cdc50dd7474","shasum":""},"time":"2018-02-20T21:35:13+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.5"}},{"version":"8.4.4","version_normalized":"8.4.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c6585ffaea5df4ed529e2bdf4371850f8fc3b88c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c6585ffaea5df4ed529e2bdf4371850f8fc3b88c","reference":"c6585ffaea5df4ed529e2bdf4371850f8fc3b88c","shasum":""},"time":"2018-01-03T19:27:53+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.4"}},{"version":"8.4.3","version_normalized":"8.4.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"793cb14c54624b4be160b78f742af44a01cc7b4e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/793cb14c54624b4be160b78f742af44a01cc7b4e","reference":"793cb14c54624b4be160b78f742af44a01cc7b4e","shasum":""},"time":"2017-12-06T22:45:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.3"}},{"version":"8.4.2","version_normalized":"8.4.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"68d25c07b7306340900abc4020c38683a817f0eb"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/68d25c07b7306340900abc4020c38683a817f0eb","reference":"68d25c07b7306340900abc4020c38683a817f0eb","shasum":""},"time":"2017-11-03T13:20:16+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.2"}},{"version":"8.4.1","version_normalized":"8.4.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dbdd31c4e1a21d2188622107c0b856f5c1b0e56e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dbdd31c4e1a21d2188622107c0b856f5c1b0e56e","reference":"dbdd31c4e1a21d2188622107c0b856f5c1b0e56e","shasum":""},"time":"2017-11-01T18:38:24+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.1"}},{"version":"8.4.0","version_normalized":"8.4.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d4be8e12d9e8b4db82ece760c632213247f56fa7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d4be8e12d9e8b4db82ece760c632213247f56fa7","reference":"d4be8e12d9e8b4db82ece760c632213247f56fa7","shasum":""},"time":"2017-10-04T19:25:32+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0"}},{"version":"8.4.0-rc2","version_normalized":"8.4.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b2a6d61fe5752a7c8336611852f027f327e329d3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b2a6d61fe5752a7c8336611852f027f327e329d3","reference":"b2a6d61fe5752a7c8336611852f027f327e329d3","shasum":""},"time":"2017-09-20T12:43:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.0-rc2"}},{"version":"8.4.0-rc1","version_normalized":"8.4.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c544a05049e028f61d8c85c4cfc5734e6b3863b2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c544a05049e028f61d8c85c4cfc5734e6b3863b2","reference":"c544a05049e028f61d8c85c4cfc5734e6b3863b2","shasum":""},"time":"2017-09-06T21:12:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.0-rc1"}},{"version":"8.4.0-beta1","version_normalized":"8.4.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"48a043dc25c4b284fe88dff26f2f48360f5d87c8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/48a043dc25c4b284fe88dff26f2f48360f5d87c8","reference":"48a043dc25c4b284fe88dff26f2f48360f5d87c8","shasum":""},"time":"2017-08-17T17:21:44+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0-beta1"}},{"version":"8.4.0-alpha1","version_normalized":"8.4.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"770b95b3b0667a3c7f138183babf9a1e78426b7e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/770b95b3b0667a3c7f138183babf9a1e78426b7e","reference":"770b95b3b0667a3c7f138183babf9a1e78426b7e","shasum":""},"time":"2017-08-03T19:24:50+00:00","require":{"php":">=5.5.9","symfony/class-loader":"^3.2","symfony/console":"^3.2","symfony/dependency-injection":"^3.2","symfony/event-dispatcher":"^3.2","symfony/http-foundation":"^3.2","symfony/http-kernel":"^3.2","symfony/routing":"^3.2","symfony/serializer":"^3.2","symfony/translation":"^3.2","symfony/validator":"^3.2","symfony/process":"^3.2","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^3.2","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":">=4.8.35 <5","symfony/css-selector":"^3.2","symfony/phpunit-bridge":"^3.2"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0-alpha1"}},{"version":"8.3.9","version_normalized":"8.3.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a83cbc50bf96ab5e8580413f6a359d999e981883"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a83cbc50bf96ab5e8580413f6a359d999e981883","reference":"a83cbc50bf96ab5e8580413f6a359d999e981883","shasum":""},"time":"2018-03-27T10:06:04+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.12","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/browser-kit":">=2.8.13 <3.0","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.3.9"}},{"version":"8.3.8","version_normalized":"8.3.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5d991a86fc445ebe71a63eed8804c4209f8794c4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5d991a86fc445ebe71a63eed8804c4209f8794c4","reference":"5d991a86fc445ebe71a63eed8804c4209f8794c4","shasum":""},"time":"2018-03-12T19:09:32+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.8"}},{"version":"8.3.7","version_normalized":"8.3.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff","reference":"32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff","shasum":""},"time":"2017-08-16T17:10:35+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.7"}},{"version":"8.3.6","version_normalized":"8.3.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a6d76c4428ee40cb3f60974ccc19b41feaf58dc0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a6d76c4428ee40cb3f60974ccc19b41feaf58dc0","reference":"a6d76c4428ee40cb3f60974ccc19b41feaf58dc0","shasum":""},"time":"2017-08-02T15:27:39+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.6"}},{"version":"8.3.5","version_normalized":"8.3.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7adfc8c43615258e242868a393e82971a67be51a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7adfc8c43615258e242868a393e82971a67be51a","reference":"7adfc8c43615258e242868a393e82971a67be51a","shasum":""},"time":"2017-07-05T17:03:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.5"}},{"version":"8.3.4","version_normalized":"8.3.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f34eee7255142ab5416107972ef13d011f11e163"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f34eee7255142ab5416107972ef13d011f11e163","reference":"f34eee7255142ab5416107972ef13d011f11e163","shasum":""},"time":"2017-06-21T18:13:27+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.4"}},{"version":"8.3.3","version_normalized":"8.3.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"98da955d81c79f1a753536ab9c9dad5f80a72922"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/98da955d81c79f1a753536ab9c9dad5f80a72922","reference":"98da955d81c79f1a753536ab9c9dad5f80a72922","shasum":""},"time":"2017-06-07T17:35:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.3"}},{"version":"8.3.2","version_normalized":"8.3.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"82c432cfe728458538d4826c9c4be57dcf35443b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/82c432cfe728458538d4826c9c4be57dcf35443b","reference":"82c432cfe728458538d4826c9c4be57dcf35443b","shasum":""},"time":"2017-05-03T17:12:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.2"}},{"version":"8.3.1","version_normalized":"8.3.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"53326f9503e5e9e406fab22e4fbae6ddb706f7be"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/53326f9503e5e9e406fab22e4fbae6ddb706f7be","reference":"53326f9503e5e9e406fab22e4fbae6ddb706f7be","shasum":""},"time":"2017-04-19T16:07:22+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.1"},"conflict":"__unset"},{"version":"8.3.0","version_normalized":"8.3.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e503a252ec5c2811abed6af0c7b70afda8e93a3f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e503a252ec5c2811abed6af0c7b70afda8e93a3f","reference":"e503a252ec5c2811abed6af0c7b70afda8e93a3f","shasum":""},"time":"2017-04-06T00:12:44+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0"}},{"version":"8.3.0-rc2","version_normalized":"8.3.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3","reference":"cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3","shasum":""},"time":"2017-03-15T21:19:09+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/dom-crawler":">=2.8.13 <3.0","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.11","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-rc2"}},{"version":"8.3.0-rc1","version_normalized":"8.3.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f9f055385da1f94bb255179f7335ed3a5dbdf28f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f9f055385da1f94bb255179f7335ed3a5dbdf28f","reference":"f9f055385da1f94bb255179f7335ed3a5dbdf28f","shasum":""},"time":"2017-03-01T15:35:49+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.10","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-rc1"}},{"version":"8.3.0-beta1","version_normalized":"8.3.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7b628e88038c32482a5f9552ca400c8cbdef8c1c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7b628e88038c32482a5f9552ca400c8cbdef8c1c","reference":"7b628e88038c32482a5f9552ca400c8cbdef8c1c","shasum":""},"time":"2017-02-15T16:16:18+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-beta1"}},{"version":"8.3.0-alpha1","version_normalized":"8.3.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9cf9a8fb5a53674491efcd62f82a70b4cd138aee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9cf9a8fb5a53674491efcd62f82a70b4cd138aee","reference":"9cf9a8fb5a53674491efcd62f82a70b4cd138aee","shasum":""},"time":"2017-02-01T16:59:40+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.8","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-alpha1"}},{"version":"8.2.8","version_normalized":"8.2.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7ccc248f4058dd5985ad0c61c129243d0d2b58b8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7ccc248f4058dd5985ad0c61c129243d0d2b58b8","reference":"7ccc248f4058dd5985ad0c61c129243d0d2b58b8","shasum":""},"time":"2017-04-19T16:45:52+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1|^2","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.8"}},{"version":"8.2.7","version_normalized":"8.2.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7e3e9eb8ceb1428d36f8281fccede3c7f6469216"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7e3e9eb8ceb1428d36f8281fccede3c7f6469216","reference":"7e3e9eb8ceb1428d36f8281fccede3c7f6469216","shasum":""},"time":"2017-03-15T20:19:51+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.7"}},{"version":"8.2.6","version_normalized":"8.2.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d1b22419f24414def8333861842cd1a8083b24bf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d1b22419f24414def8333861842cd1a8083b24bf","reference":"d1b22419f24414def8333861842cd1a8083b24bf","shasum":""},"time":"2017-02-01T17:03:36+00:00","require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","symfony/css-selector":"~2.8","phpunit/phpunit":"~4.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.6"}},{"version":"8.2.5","version_normalized":"8.2.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"12ec8a14c0cd269af823375bc05b0738b5293e2a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/12ec8a14c0cd269af823375bc05b0738b5293e2a","reference":"12ec8a14c0cd269af823375bc05b0738b5293e2a","shasum":""},"time":"2017-01-04T11:31:35+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.5"}},{"version":"8.2.4","version_normalized":"8.2.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5365700e0d9632bd7bf257fc0ec5ab0af5755430"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5365700e0d9632bd7bf257fc0ec5ab0af5755430","reference":"5365700e0d9632bd7bf257fc0ec5ab0af5755430","shasum":""},"time":"2016-12-07T18:31:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.4"}},{"version":"8.2.3","version_normalized":"8.2.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8734c80df2715e9e1aa30bbe16cef820251c9463"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8734c80df2715e9e1aa30bbe16cef820251c9463","reference":"8734c80df2715e9e1aa30bbe16cef820251c9463","shasum":""},"time":"2016-11-16T18:45:36+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"~1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.3"}},{"version":"8.2.2","version_normalized":"8.2.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"65db92a776d426d39c5e60caf163212af5586119"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/65db92a776d426d39c5e60caf163212af5586119","reference":"65db92a776d426d39c5e60caf163212af5586119","shasum":""},"time":"2016-11-02T17:43:45+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.2"}},{"version":"8.2.1","version_normalized":"8.2.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"43f2009dec1957c5dbbe47b9200ce020095192fc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/43f2009dec1957c5dbbe47b9200ce020095192fc","reference":"43f2009dec1957c5dbbe47b9200ce020095192fc","shasum":""},"time":"2016-10-11T10:18:49+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.1"}},{"version":"8.2.0","version_normalized":"8.2.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b21089ec64c3de37311ba679663d39d62a7a782b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b21089ec64c3de37311ba679663d39d62a7a782b","reference":"b21089ec64c3de37311ba679663d39d62a7a782b","shasum":""},"time":"2016-10-05T09:36:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0"}},{"version":"8.2.0-rc2","version_normalized":"8.2.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"74a5d5a36c304f77644b08a4ed754f26ca772110"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/74a5d5a36c304f77644b08a4ed754f26ca772110","reference":"74a5d5a36c304f77644b08a4ed754f26ca772110","shasum":""},"time":"2016-09-21T18:56:05+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"^1.0|^2.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-rc2"}},{"version":"8.2.0-rc1","version_normalized":"8.2.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"49b794692bb31e241712ad5ef5446befcd206fe3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/49b794692bb31e241712ad5ef5446befcd206fe3","reference":"49b794692bb31e241712ad5ef5446befcd206fe3","shasum":""},"time":"2016-09-07T21:40:46+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"~1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-rc1"}},{"version":"8.2.0-beta3","version_normalized":"8.2.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0d8af425bbcfa7c6c97fee64f830b2b57888d435"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0d8af425bbcfa7c6c97fee64f830b2b57888d435","reference":"0d8af425bbcfa7c6c97fee64f830b2b57888d435","shasum":""},"time":"2016-08-26T14:28:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta3"}},{"version":"8.2.0-beta2","version_normalized":"8.2.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dc1d25edb1cedf25287cb1b525f1537f62e95171"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dc1d25edb1cedf25287cb1b525f1537f62e95171","reference":"dc1d25edb1cedf25287cb1b525f1537f62e95171","shasum":""},"time":"2016-08-20T16:29:45+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta2"}},{"version":"8.2.0-beta1","version_normalized":"8.2.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aabe310b294af029d56311cb2995970e953ead1f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aabe310b294af029d56311cb2995970e953ead1f","reference":"aabe310b294af029d56311cb2995970e953ead1f","shasum":""},"time":"2016-08-03T13:18:11+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta1"}},{"version":"8.1.10","version_normalized":"8.1.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"feeefdebf0579524ee67fa86860050e25eb92d1c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/feeefdebf0579524ee67fa86860050e25eb92d1c","reference":"feeefdebf0579524ee67fa86860050e25eb92d1c","shasum":""},"time":"2016-09-21T17:09:42+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0"},"require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.10"}},{"version":"8.1.9","version_normalized":"8.1.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4cdebb9039fa4c9abf22258db41a7343908ec1e6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4cdebb9039fa4c9abf22258db41a7343908ec1e6","reference":"4cdebb9039fa4c9abf22258db41a7343908ec1e6","shasum":""},"time":"2016-09-07T19:16:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.9"}},{"version":"8.1.8","version_normalized":"8.1.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"df2199a585b8c0096adc365de7a3ec582f253a8f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/df2199a585b8c0096adc365de7a3ec582f253a8f","reference":"df2199a585b8c0096adc365de7a3ec582f253a8f","shasum":""},"time":"2016-08-03T14:09:08+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.8"}},{"version":"8.1.7","version_normalized":"8.1.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b38637330f9759abcdc4af343e59a29a59cc98db"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b38637330f9759abcdc4af343e59a29a59cc98db","reference":"b38637330f9759abcdc4af343e59a29a59cc98db","shasum":""},"time":"2016-07-18T15:01:43+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.2"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.7"}},{"version":"8.1.6","version_normalized":"8.1.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4f40eff880595ca7d94941cd5b22a861596f5d18"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4f40eff880595ca7d94941cd5b22a861596f5d18","reference":"4f40eff880595ca7d94941cd5b22a861596f5d18","shasum":""},"time":"2016-07-11T13:07:34+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.1"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.6"}},{"version":"8.1.5","version_normalized":"8.1.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"51d414e479fffddb7d235078ff25ea97bb4399e7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/51d414e479fffddb7d235078ff25ea97bb4399e7","reference":"51d414e479fffddb7d235078ff25ea97bb4399e7","shasum":""},"time":"2016-07-07T09:38:59+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.5"}},{"version":"8.1.4","version_normalized":"8.1.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1323599cd94da383516771f2da39960e826f83b1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1323599cd94da383516771f2da39960e826f83b1","reference":"1323599cd94da383516771f2da39960e826f83b1","shasum":""},"time":"2016-07-05T08:59:22+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.4"}},{"version":"8.1.3","version_normalized":"8.1.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"621df9820f53a560226d86ded801d37641a11bf6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/621df9820f53a560226d86ded801d37641a11bf6","reference":"621df9820f53a560226d86ded801d37641a11bf6","shasum":""},"time":"2016-06-15T20:08:27+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.3"}},{"version":"8.1.2","version_normalized":"8.1.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b","reference":"59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b","shasum":""},"time":"2016-06-01T23:31:24+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.2"}},{"version":"8.1.1","version_normalized":"8.1.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9d357f0f0916627048fe9fac016dde1685fbffd9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9d357f0f0916627048fe9fac016dde1685fbffd9","reference":"9d357f0f0916627048fe9fac016dde1685fbffd9","shasum":""},"time":"2016-05-04T11:20:24+00:00","require-dev":{"behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8","behat/mink":"~1.6"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.1"}},{"version":"8.1.0","version_normalized":"8.1.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bacb5b6a9b9695819f15edf12099bd3bb378d75b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bacb5b6a9b9695819f15edf12099bd3bb378d75b","reference":"bacb5b6a9b9695819f15edf12099bd3bb378d75b","shasum":""},"time":"2016-04-20T01:34:34+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"],"classmap":["lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php"]},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0"}},{"version":"8.1.0-rc1","version_normalized":"8.1.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a8cde28699b6e131e5454fe0689cb62d228d5d19"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a8cde28699b6e131e5454fe0689cb62d228d5d19","reference":"a8cde28699b6e131e5454fe0689cb62d228d5d19","shasum":""},"time":"2016-04-06T20:58:23+00:00","require-dev":{"behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","behat/mink":"~1.6","symfony/css-selector":"2.7.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-rc1"}},{"version":"8.1.0-beta2","version_normalized":"8.1.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"396109d5d6f4cff0c1a064591e738fae45201772"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/396109d5d6f4cff0c1a064591e738fae45201772","reference":"396109d5d6f4cff0c1a064591e738fae45201772","shasum":""},"time":"2016-03-23T02:19:35+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-beta2"}},{"version":"8.1.0-beta1","version_normalized":"8.1.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dd636ef74fe482f1f253ab5410463c02cd7f5e36"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dd636ef74fe482f1f253ab5410463c02cd7f5e36","reference":"dd636ef74fe482f1f253ab5410463c02cd7f5e36","shasum":""},"time":"2016-03-03T03:26:59+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.1"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-beta1"}},{"version":"8.0.6","version_normalized":"8.0.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cc6ff1fc4067c674db839eb7bec0517d756c39c8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cc6ff1fc4067c674db839eb7bec0517d756c39c8","reference":"cc6ff1fc4067c674db839eb7bec0517d756c39c8","shasum":""},"time":"2016-04-05T23:34:17+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0"},"require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.6"}},{"version":"8.0.5","version_normalized":"8.0.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a3aa1ee0153eefebd1d0163bb49a18e907ae8dac"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a3aa1ee0153eefebd1d0163bb49a18e907ae8dac","reference":"a3aa1ee0153eefebd1d0163bb49a18e907ae8dac","shasum":""},"time":"2016-03-02T10:31:56+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.5"}},{"version":"8.0.4","version_normalized":"8.0.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c68a2e5ace8dded85af775fb1ee83706ba5f38de"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c68a2e5ace8dded85af775fb1ee83706ba5f38de","reference":"c68a2e5ace8dded85af775fb1ee83706ba5f38de","shasum":""},"time":"2016-02-24T18:59:52+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*","jcalderonzumba/gastonjs":"^1.1@dev"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.4"}},{"version":"8.0.3","version_normalized":"8.0.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab","reference":"b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab","shasum":""},"time":"2016-02-03T08:47:36+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.3"}},{"version":"8.0.2","version_normalized":"8.0.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"fb5230be7507dda09eb3b246a6d51bda85258d6a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/fb5230be7507dda09eb3b246a6d51bda85258d6a","reference":"fb5230be7507dda09eb3b246a6d51bda85258d6a","shasum":""},"time":"2016-01-06T22:36:23+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.2"}},{"version":"8.0.1","version_normalized":"8.0.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6741bb0c474fb03cf2562524f19e5678df70dc52"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6741bb0c474fb03cf2562524f19e5678df70dc52","reference":"6741bb0c474fb03cf2562524f19e5678df70dc52","shasum":""},"time":"2015-12-02T14:08:29+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*","jcalderonzumba/gastonjs":"^1.1@dev","jcalderonzumba/mink-phantomjs-driver":"dev-master#10d7c48c9a4129463052321b52450d98983c4332"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.1"}},{"version":"8.0.0","version_normalized":"8.0.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"344b81f442bfe136a515c864c6d1d5eb7bb711de"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/344b81f442bfe136a515c864c6d1d5eb7bb711de","reference":"344b81f442bfe136a515c864c6d1d5eb7bb711de","shasum":""},"time":"2015-11-19T14:02:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0"}},{"version":"8.0.0-rc4","version_normalized":"8.0.0.0-RC4","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba","reference":"8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba","shasum":""},"time":"2015-11-13T11:21:34+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc4"}},{"version":"8.0.0-rc3","version_normalized":"8.0.0.0-RC3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e82f1217d4695799b45cd38110530c70a24a4a3f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e82f1217d4695799b45cd38110530c70a24a4a3f","reference":"e82f1217d4695799b45cd38110530c70a24a4a3f","shasum":""},"time":"2015-11-04T10:15:22+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","twig/twig":"^1.22.2"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc3"}},{"version":"8.0.0-rc2","version_normalized":"8.0.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"80b12982cf84a9dec175ec86c9ef6a1eb0a40984"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/80b12982cf84a9dec175ec86c9ef6a1eb0a40984","reference":"80b12982cf84a9dec175ec86c9ef6a1eb0a40984","shasum":""},"time":"2015-10-21T22:51:01+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc2"}},{"version":"8.0.0-rc1","version_normalized":"8.0.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b42c200a1452a9ff309e3e30e171373ad71cbb97"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b42c200a1452a9ff309e3e30e171373ad71cbb97","reference":"b42c200a1452a9ff309e3e30e171373ad71cbb97","shasum":""},"time":"2015-10-07T21:20:43+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc1"}},{"version":"8.0.0-beta16","version_normalized":"8.0.0.0-beta16","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"563da4c404d12f24ee8ee9098ca05875af613c58"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/563da4c404d12f24ee8ee9098ca05875af613c58","reference":"563da4c404d12f24ee8ee9098ca05875af613c58","shasum":""},"time":"2015-10-02T00:39:06+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","twig/twig":"^1.22.2"},"require-dev":{"behat/mink":"~1.6","mikey179/vfsstream":"~1.2","symfony/css-selector":"2.7.*","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","phpunit/phpunit":"4.8.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta16"}},{"version":"8.0.0-beta15","version_normalized":"8.0.0.0-beta15","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b6013eba2dfacc04ffc855b9547b3f258f0e8066"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b6013eba2dfacc04ffc855b9547b3f258f0e8066","reference":"b6013eba2dfacc04ffc855b9547b3f258f0e8066","shasum":""},"time":"2015-09-04T08:56:05+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.20.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"dev-master#1879fbe853b0c64d109e369c7aeff09849e62d1e","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"~1.2","behat/mink":"~1.6","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","fabpot/goutte":"~3.1","zendframework/zend-diactoros":"1.1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta15"},"require-dev":"__unset"},{"version":"8.0.0-beta14","version_normalized":"8.0.0.0-beta14","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a346886d5f85f93a90f306bc3b814ddca1ed7cd6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a346886d5f85f93a90f306bc3b814ddca1ed7cd6","reference":"a346886d5f85f93a90f306bc3b814ddca1ed7cd6","shasum":""},"time":"2015-08-03T09:10:38+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"dev-master#1879fbe853b0c64d109e369c7aeff09849e62d1e","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"~1.2","behat/mink":"~1.6","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","fabpot/goutte":"~3.1","zendframework/zend-diactoros":"1.1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta14"}},{"version":"8.0.0-beta13","version_normalized":"8.0.0.0-beta13","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"39062bf24f3cfa996dbc0a009fc64dec14624c60"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/39062bf24f3cfa996dbc0a009fc64dec14624c60","reference":"39062bf24f3cfa996dbc0a009fc64dec14624c60","shasum":""},"time":"2015-07-29T18:06:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta13"}},{"version":"8.0.0-beta12","version_normalized":"8.0.0.0-beta12","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e0f5550ea38bd53d05512f078e0cf5c413c7bda0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e0f5550ea38bd53d05512f078e0cf5c413c7bda0","reference":"e0f5550ea38bd53d05512f078e0cf5c413c7bda0","shasum":""},"time":"2015-06-29T18:12:48+00:00","require":{"symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta12"}},{"version":"8.0.0-beta11","version_normalized":"8.0.0.0-beta11","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b2d77934d1a82c8c285cbe44ab2f62418a86b93a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b2d77934d1a82c8c285cbe44ab2f62418a86b93a","reference":"b2d77934d1a82c8c285cbe44ab2f62418a86b93a","shasum":""},"time":"2015-05-27T20:26:08+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*@dev","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta11"},"replace":"__unset"},{"version":"8.0.0-beta10","version_normalized":"8.0.0.0-beta10","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"fc83f4c32a4fda2a755b07ee47935d8d6f596578"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/fc83f4c32a4fda2a755b07ee47935d8d6f596578","reference":"fc83f4c32a4fda2a755b07ee47935d8d6f596578","shasum":""},"time":"2015-04-29T13:28:43+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta10"}},{"version":"8.0.0-beta9","version_normalized":"8.0.0.0-beta9","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"600d79f984f2ab37a72cfe1c7c766d4b320ba926"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/600d79f984f2ab37a72cfe1c7c766d4b320ba926","reference":"600d79f984f2ab37a72cfe1c7c766d4b320ba926","shasum":""},"time":"2015-03-25T16:13:13+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"],"classmap":["lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernelInterface.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/TerminableInterface.php"]},"require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta9"}},{"version":"8.0.0-beta8","version_normalized":"8.0.0.0-beta8","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"529c681e48f03884cb6c30ac5a0aac37346e8266"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/529c681e48f03884cb6c30ac5a0aac37346e8266","reference":"529c681e48f03884cb6c30ac5a0aac37346e8266","shasum":""},"time":"2015-03-24T23:50:56+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta8"}},{"version":"8.0.0-beta7","version_normalized":"8.0.0.0-beta7","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"292329995117fe5ce3cd4e3b8f68bb577e522617"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/292329995117fe5ce3cd4e3b8f68bb577e522617","reference":"292329995117fe5ce3cd4e3b8f68bb577e522617","shasum":""},"time":"2015-02-24T23:52:34+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta7"}},{"version":"8.0.0-beta6","version_normalized":"8.0.0.0-beta6","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e9174812eb5816f9d9c03b4552a9af5a8f7782cf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e9174812eb5816f9d9c03b4552a9af5a8f7782cf","reference":"e9174812eb5816f9d9c03b4552a9af5a8f7782cf","shasum":""},"time":"2015-01-28T10:55:26+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"]},"require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","phpunit/phpunit-mock-objects":"dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta6"}}]},"minified":"composer/2.0"} \ No newline at end of file +{"packages":{"drupal/core":[{"name":"drupal/core","description":"Drupal is an open source content management platform powering millions of websites and applications.","keywords":[],"homepage":"","version":"9.1.5","version_normalized":"9.1.5.0","license":["GPL-2.0-or-later"],"authors":[],"source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"075ea2e792edbe573a29f02e80d6edf445f18e14"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/075ea2e792edbe573a29f02e80d6edf445f18e14","reference":"075ea2e792edbe573a29f02e80d6edf445f18e14","shasum":""},"type":"drupal-core","time":"2021-03-04T14:36:14+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/DependencyInjection/Container.php","lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php","lib/Drupal/Component/FileCache/FileCacheFactory.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Cache/Cache.php","lib/Drupal/Core/Cache/CacheBackendInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumTrait.php","lib/Drupal/Core/Cache/CacheTagsInvalidatorInterface.php","lib/Drupal/Core/Cache/DatabaseBackend.php","lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php","lib/Drupal/Core/Database/Connection.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/Database/Driver/mysql/Connection.php","lib/Drupal/Core/Database/Driver/pgsql/Connection.php","lib/Drupal/Core/Database/Driver/sqlite/Connection.php","lib/Drupal/Core/Database/Statement.php","lib/Drupal/Core/Database/StatementInterface.php","lib/Drupal/Core/DependencyInjection/Container.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Installer/InstallerRedirectTrait.php","lib/Drupal/Core/Site/Settings.php"],"files":["includes/bootstrap.inc"]},"extra":{"drupal-scaffold":{"file-mapping":{"[project-root]/.editorconfig":"assets/scaffold/files/editorconfig","[project-root]/.gitattributes":"assets/scaffold/files/gitattributes","[web-root]/.csslintrc":"assets/scaffold/files/csslintrc","[web-root]/.eslintignore":"assets/scaffold/files/eslintignore","[web-root]/.eslintrc.json":"assets/scaffold/files/eslintrc.json","[web-root]/.ht.router.php":"assets/scaffold/files/ht.router.php","[web-root]/.htaccess":"assets/scaffold/files/htaccess","[web-root]/example.gitignore":"assets/scaffold/files/example.gitignore","[web-root]/index.php":"assets/scaffold/files/index.php","[web-root]/INSTALL.txt":"assets/scaffold/files/drupal.INSTALL.txt","[web-root]/README.txt":"assets/scaffold/files/drupal.README.txt","[web-root]/robots.txt":"assets/scaffold/files/robots.txt","[web-root]/update.php":"assets/scaffold/files/update.php","[web-root]/web.config":"assets/scaffold/files/web.config","[web-root]/sites/README.txt":"assets/scaffold/files/sites.README.txt","[web-root]/sites/development.services.yml":"assets/scaffold/files/development.services.yml","[web-root]/sites/example.settings.local.php":"assets/scaffold/files/example.settings.local.php","[web-root]/sites/example.sites.php":"assets/scaffold/files/example.sites.php","[web-root]/sites/default/default.services.yml":"assets/scaffold/files/default.services.yml","[web-root]/sites/default/default.settings.php":"assets/scaffold/files/default.settings.php","[web-root]/modules/README.txt":"assets/scaffold/files/modules.README.txt","[web-root]/profiles/README.txt":"assets/scaffold/files/profiles.README.txt","[web-root]/themes/README.txt":"assets/scaffold/files/themes.README.txt"}}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.12","psr/log":"^1.0"},"conflict":{"drush/drush":"<8.1.10"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-front-matter":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/olivero":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.1.5"}},{"version":"9.1.4","version_normalized":"9.1.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d16a7cb33b7a01e3b2e66d36e2011f27ba9786f4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d16a7cb33b7a01e3b2e66d36e2011f27ba9786f4","reference":"d16a7cb33b7a01e3b2e66d36e2011f27ba9786f4","shasum":""},"time":"2021-02-03T19:21:05+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.4"}},{"version":"9.1.3","version_normalized":"9.1.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"62f5d7d0f9f7c279b996b0f33d0ccd501adcd980"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/62f5d7d0f9f7c279b996b0f33d0ccd501adcd980","reference":"62f5d7d0f9f7c279b996b0f33d0ccd501adcd980","shasum":""},"time":"2021-01-19T23:10:47+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.3"}},{"version":"9.1.2","version_normalized":"9.1.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"62b7a8e2f1c78b076d9e54d2b24234cac3aea548"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/62b7a8e2f1c78b076d9e54d2b24234cac3aea548","reference":"62b7a8e2f1c78b076d9e54d2b24234cac3aea548","shasum":""},"time":"2021-01-07T01:42:38+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.2"}},{"version":"9.1.1","version_normalized":"9.1.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"35a713562382b5c0ebe534faf3deb3f8e72b6a53"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/35a713562382b5c0ebe534faf3deb3f8e72b6a53","reference":"35a713562382b5c0ebe534faf3deb3f8e72b6a53","shasum":""},"time":"2021-01-06T23:04:09+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.1"}},{"version":"9.1.0","version_normalized":"9.1.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"de8c1769ea3d8b640e1a35c9228880d0b74ca4cc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/de8c1769ea3d8b640e1a35c9228880d0b74ca4cc","reference":"de8c1769ea3d8b640e1a35c9228880d0b74ca4cc","shasum":""},"time":"2020-12-02T18:11:58+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.0"}},{"version":"9.1.0-rc3","version_normalized":"9.1.0.0-RC3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"abd45076a0eee9f35e3a2d3df1a52d2d9feb1995"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/abd45076a0eee9f35e3a2d3df1a52d2d9feb1995","reference":"abd45076a0eee9f35e3a2d3df1a52d2d9feb1995","shasum":""},"time":"2020-11-26T01:34:06+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.0-rc3"}},{"version":"9.1.0-rc2","version_normalized":"9.1.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0c0ebb0e93e216cd8f3d65e0877c4d2eeed3a745"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0c0ebb0e93e216cd8f3d65e0877c4d2eeed3a745","reference":"0c0ebb0e93e216cd8f3d65e0877c4d2eeed3a745","shasum":""},"time":"2020-11-25T19:19:10+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.0-rc2"}},{"version":"9.1.0-rc1","version_normalized":"9.1.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1130d1562f5e6ab8b0f62515498bd85eed6d71eb"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1130d1562f5e6ab8b0f62515498bd85eed6d71eb","reference":"1130d1562f5e6ab8b0f62515498bd85eed6d71eb","shasum":""},"time":"2020-11-17T22:20:36+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.0-rc1"}},{"version":"9.1.0-beta1","version_normalized":"9.1.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"38c8517a8d6adafb06d8ec33cdb24eeb7cd97a38"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/38c8517a8d6adafb06d8ec33cdb24eeb7cd97a38","reference":"38c8517a8d6adafb06d8ec33cdb24eeb7cd97a38","shasum":""},"time":"2020-11-06T14:10:18+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.0-beta1"}},{"version":"9.1.0-alpha1","version_normalized":"9.1.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3e5e7ac4dea52f6fd90a3ec4455c64926b7a30e1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3e5e7ac4dea52f6fd90a3ec4455c64926b7a30e1","reference":"3e5e7ac4dea52f6fd90a3ec4455c64926b7a30e1","shasum":""},"time":"2020-10-23T15:03:28+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/DependencyInjection/Container.php","lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php","lib/Drupal/Component/FileCache/FileCacheFactory.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Cache/Cache.php","lib/Drupal/Core/Cache/CacheBackendInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumTrait.php","lib/Drupal/Core/Cache/CacheTagsInvalidatorInterface.php","lib/Drupal/Core/Cache/DatabaseBackend.php","lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php","lib/Drupal/Core/Database/Connection.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/Database/Driver/mysql/Connection.php","lib/Drupal/Core/Database/Driver/pgsql/Connection.php","lib/Drupal/Core/Database/Driver/sqlite/Connection.php","lib/Drupal/Core/Database/Statement.php","lib/Drupal/Core/Database/StatementInterface.php","lib/Drupal/Core/DependencyInjection/Container.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Installer/InstallerRedirectTrait.php","lib/Drupal/Core/Site/Settings.php"]},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.0-alpha1"}},{"version":"9.0.11","version_normalized":"9.0.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"41697df079ae8aa64fa45b61976f50e7a2998d7f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/41697df079ae8aa64fa45b61976f50e7a2998d7f","reference":"41697df079ae8aa64fa45b61976f50e7a2998d7f","shasum":""},"time":"2021-01-19T23:10:53+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.12","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.11"}},{"version":"9.0.10","version_normalized":"9.0.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8a0cdab9f6a0e2f48b4886b31d050dca034e6049"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8a0cdab9f6a0e2f48b4886b31d050dca034e6049","reference":"8a0cdab9f6a0e2f48b4886b31d050dca034e6049","shasum":""},"time":"2020-12-03T20:54:37+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.10"}},{"version":"9.0.9","version_normalized":"9.0.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"03d815cf785654d03cf39dd911c8ae53b2fdd6cd"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/03d815cf785654d03cf39dd911c8ae53b2fdd6cd","reference":"03d815cf785654d03cf39dd911c8ae53b2fdd6cd","shasum":""},"time":"2020-11-26T00:53:25+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.9"}},{"version":"9.0.8","version_normalized":"9.0.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"67ec8d625bb29c4323bc34c680887bf4af0187e1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/67ec8d625bb29c4323bc34c680887bf4af0187e1","reference":"67ec8d625bb29c4323bc34c680887bf4af0187e1","shasum":""},"time":"2020-11-17T22:05:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.8"}},{"version":"9.0.7","version_normalized":"9.0.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5159f7e335ba2484075b2460b10780fed583d74c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5159f7e335ba2484075b2460b10780fed583d74c","reference":"5159f7e335ba2484075b2460b10780fed583d74c","shasum":""},"time":"2020-10-07T19:33:16+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.7"}},{"version":"9.0.6","version_normalized":"9.0.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"783122d82abb104cebc73ea1f0659f7ccd46f9a8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/783122d82abb104cebc73ea1f0659f7ccd46f9a8","reference":"783122d82abb104cebc73ea1f0659f7ccd46f9a8","shasum":""},"time":"2020-09-16T11:21:49+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.6"}},{"version":"9.0.5","version_normalized":"9.0.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"145671b8ac88322c43c8415cf287b76dfe45ad38"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/145671b8ac88322c43c8415cf287b76dfe45ad38","reference":"145671b8ac88322c43c8415cf287b76dfe45ad38","shasum":""},"time":"2020-09-03T21:05:44+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.5"}},{"version":"9.0.4","version_normalized":"9.0.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f6366e4a42e23ebfdc4ad16750f50b5217b2765e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f6366e4a42e23ebfdc4ad16750f50b5217b2765e","reference":"f6366e4a42e23ebfdc4ad16750f50b5217b2765e","shasum":""},"time":"2020-09-02T11:23:11+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.4"}},{"version":"9.0.3","version_normalized":"9.0.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"883018fe0aa16cee450bb043fcb4893c05438283"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/883018fe0aa16cee450bb043fcb4893c05438283","reference":"883018fe0aa16cee450bb043fcb4893c05438283","shasum":""},"time":"2020-08-05T21:47:03+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.3"}},{"version":"9.0.2","version_normalized":"9.0.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ea6e0cef3240dc8e48f797698226467de121e9c9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ea6e0cef3240dc8e48f797698226467de121e9c9","reference":"ea6e0cef3240dc8e48f797698226467de121e9c9","shasum":""},"time":"2020-07-08T18:31:41+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.2"}},{"version":"9.0.1","version_normalized":"9.0.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1cd5f38665c789df215b0f145798b44bd88fdab2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1cd5f38665c789df215b0f145798b44bd88fdab2","reference":"1cd5f38665c789df215b0f145798b44bd88fdab2","shasum":""},"time":"2020-06-17T17:56:46+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.1"}},{"version":"9.0.0","version_normalized":"9.0.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b86a9ddcc7f33608845a3219ed63507661ea69ee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b86a9ddcc7f33608845a3219ed63507661ea69ee","reference":"b86a9ddcc7f33608845a3219ed63507661ea69ee","shasum":""},"time":"2020-06-03T21:43:50+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0"}},{"version":"9.0.0-rc1","version_normalized":"9.0.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b97eebe9799d323f3dc0a5c372b341de57bbc7d4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b97eebe9799d323f3dc0a5c372b341de57bbc7d4","reference":"b97eebe9799d323f3dc0a5c372b341de57bbc7d4","shasum":""},"time":"2020-05-22T22:32:46+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0-rc1"}},{"version":"9.0.0-beta3","version_normalized":"9.0.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"084a8705f4169a95366eea1451012c81ca2cd500"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/084a8705f4169a95366eea1451012c81ca2cd500","reference":"084a8705f4169a95366eea1451012c81ca2cd500","shasum":""},"time":"2020-05-15T23:57:43+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta3"}},{"version":"9.0.0-beta2","version_normalized":"9.0.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ae085c68b25b78cc77091fb3d8d29fcd941f8d35"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ae085c68b25b78cc77091fb3d8d29fcd941f8d35","reference":"ae085c68b25b78cc77091fb3d8d29fcd941f8d35","shasum":""},"time":"2020-03-30T19:13:47+00:00","conflict":{"drupal/pathauto":"<1.6","drush/drush":"<8.1.10"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta2"}},{"version":"9.0.0-beta1","version_normalized":"9.0.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a3547cf77d19b680834e3fae5cb159219814641a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a3547cf77d19b680834e3fae5cb159219814641a","reference":"a3547cf77d19b680834e3fae5cb159219814641a","shasum":""},"time":"2020-03-20T19:21:18+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_environment":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta1"}},{"version":"9.0.0-alpha2","version_normalized":"9.0.0.0-alpha2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e7430881bfe5eea47cb384a82bda9d73ae9072f4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e7430881bfe5eea47cb384a82bda9d73ae9072f4","reference":"e7430881bfe5eea47cb384a82bda9d73ae9072f4","shasum":""},"time":"2020-03-04T18:12:13+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-alpha2"}},{"version":"9.0.0-alpha1","version_normalized":"9.0.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b3be17114997f4e3ae95b5607744bc0c1031356f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b3be17114997f4e3ae95b5607744bc0c1031356f","reference":"b3be17114997f4e3ae95b5607744bc0c1031356f","shasum":""},"time":"2020-02-11T18:17:58+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php"]},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/class-loader":"~3.4.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_environment":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-alpha1"}},{"version":"8.9.13","version_normalized":"8.9.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a53db77b55a035453d7229e0c3069f8591cb4cb6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a53db77b55a035453d7229e0c3069f8591cb4cb6","reference":"a53db77b55a035453d7229e0c3069f8591cb4cb6","shasum":""},"time":"2021-01-19T23:11:00+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.12","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.9.13"}},{"version":"8.9.12","version_normalized":"8.9.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ec7ac2bd2b7fa7f06df654c637b7f29f019d356f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ec7ac2bd2b7fa7f06df654c637b7f29f019d356f","reference":"ec7ac2bd2b7fa7f06df654c637b7f29f019d356f","shasum":""},"time":"2021-01-06T23:44:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.12"}},{"version":"8.9.11","version_normalized":"8.9.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8fc1d510b8fcff90e2f3a7c96a893ba16bbdc62d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8fc1d510b8fcff90e2f3a7c96a893ba16bbdc62d","reference":"8fc1d510b8fcff90e2f3a7c96a893ba16bbdc62d","shasum":""},"time":"2020-12-03T20:57:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.11"}},{"version":"8.9.10","version_normalized":"8.9.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e725c01cdf6fb6d8b330a27fa75caab91034805a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e725c01cdf6fb6d8b330a27fa75caab91034805a","reference":"e725c01cdf6fb6d8b330a27fa75caab91034805a","shasum":""},"time":"2020-11-26T01:49:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.10"}},{"version":"8.9.9","version_normalized":"8.9.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"724ada1a6c497a663797c40e4ee3d0c7c618371d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/724ada1a6c497a663797c40e4ee3d0c7c618371d","reference":"724ada1a6c497a663797c40e4ee3d0c7c618371d","shasum":""},"time":"2020-11-17T22:05:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.9"}},{"version":"8.9.8","version_normalized":"8.9.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e16f650e7bd7f0cfb4ff4dd8ed753625313cdfdb"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e16f650e7bd7f0cfb4ff4dd8ed753625313cdfdb","reference":"e16f650e7bd7f0cfb4ff4dd8ed753625313cdfdb","shasum":""},"time":"2020-11-05T16:34:55+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.8"}},{"version":"8.9.7","version_normalized":"8.9.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ded1be08c23f19211f9a2514a72e7defb1204efc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ded1be08c23f19211f9a2514a72e7defb1204efc","reference":"ded1be08c23f19211f9a2514a72e7defb1204efc","shasum":""},"time":"2020-10-07T19:37:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.7"}},{"version":"8.9.6","version_normalized":"8.9.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"caf4e756d31dfb0c2e52cd0748e900efe4b57766"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/caf4e756d31dfb0c2e52cd0748e900efe4b57766","reference":"caf4e756d31dfb0c2e52cd0748e900efe4b57766","shasum":""},"time":"2020-09-16T11:22:21+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.6"}},{"version":"8.9.5","version_normalized":"8.9.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c9b9643663b80f02c038f9dea15b8717a22c3339"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c9b9643663b80f02c038f9dea15b8717a22c3339","reference":"c9b9643663b80f02c038f9dea15b8717a22c3339","shasum":""},"time":"2020-09-03T21:07:45+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.5"}},{"version":"8.9.4","version_normalized":"8.9.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1de88703485c755d0db7420156432306a0acad8f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1de88703485c755d0db7420156432306a0acad8f","reference":"1de88703485c755d0db7420156432306a0acad8f","shasum":""},"time":"2020-09-02T11:37:12+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.4"}},{"version":"8.9.3","version_normalized":"8.9.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ee02fd4cbe4ac148b4d7e297ec63b3459983862e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ee02fd4cbe4ac148b4d7e297ec63b3459983862e","reference":"ee02fd4cbe4ac148b4d7e297ec63b3459983862e","shasum":""},"time":"2020-08-05T21:49:40+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.3"}},{"version":"8.9.2","version_normalized":"8.9.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8f0e24555c093669ce41edbb30637fe19df16802"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8f0e24555c093669ce41edbb30637fe19df16802","reference":"8f0e24555c093669ce41edbb30637fe19df16802","shasum":""},"time":"2020-07-08T18:53:45+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.2"}},{"version":"8.9.1","version_normalized":"8.9.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e8ee964c562870381876e85d3f5eaaf8c8ecc9ee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e8ee964c562870381876e85d3f5eaaf8c8ecc9ee","reference":"e8ee964c562870381876e85d3f5eaaf8c8ecc9ee","shasum":""},"time":"2020-06-17T17:57:48+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.1"}},{"version":"8.9.0","version_normalized":"8.9.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f90882ab0723becda2333e4d33e1a6ab27cb8f0c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f90882ab0723becda2333e4d33e1a6ab27cb8f0c","reference":"f90882ab0723becda2333e4d33e1a6ab27cb8f0c","shasum":""},"time":"2020-06-03T16:44:36+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0"}},{"version":"8.9.0-rc1","version_normalized":"8.9.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bd856870252c1c102e5a99272e02cb91127f4afd"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bd856870252c1c102e5a99272e02cb91127f4afd","reference":"bd856870252c1c102e5a99272e02cb91127f4afd","shasum":""},"time":"2020-05-22T22:57:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.0-rc1"}},{"version":"8.9.0-beta3","version_normalized":"8.9.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f33d30a9e1f4a7b20a1eccd963767ec70c716c8e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f33d30a9e1f4a7b20a1eccd963767ec70c716c8e","reference":"f33d30a9e1f4a7b20a1eccd963767ec70c716c8e","shasum":""},"time":"2020-05-17T19:53:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta3"}},{"version":"8.9.0-beta2","version_normalized":"8.9.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d67c87a64c552525b3c2433047d96c445310d4c4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d67c87a64c552525b3c2433047d96c445310d4c4","reference":"d67c87a64c552525b3c2433047d96c445310d4c4","shasum":""},"time":"2020-04-02T18:59:14+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta2"}},{"version":"8.9.0-beta1","version_normalized":"8.9.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bd38e6c7df640867de0fe41f055864645e1bf0a8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bd38e6c7df640867de0fe41f055864645e1bf0a8","reference":"bd38e6c7df640867de0fe41f055864645e1bf0a8","shasum":""},"time":"2020-03-26T22:24:05+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta1"}},{"version":"8.8.12","version_normalized":"8.8.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9cbfd3b0e955bc34649bdc471b9a702650887f73"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9cbfd3b0e955bc34649bdc471b9a702650887f73","reference":"9cbfd3b0e955bc34649bdc471b9a702650887f73","shasum":""},"time":"2020-11-26T02:06:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11"},"support":{"source":"https://github.com/drupal/core/tree/8.8.12"}},{"version":"8.8.11","version_normalized":"8.8.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"049a282977f56cf58aa2fb70bb9be9ca6c87d250"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/049a282977f56cf58aa2fb70bb9be9ca6c87d250","reference":"049a282977f56cf58aa2fb70bb9be9ca6c87d250","shasum":""},"time":"2020-11-17T22:06:51+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"support":{"source":"https://github.com/drupal/core/tree/8.8.11"}},{"version":"8.8.10","version_normalized":"8.8.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3df0c753d18bc8982d819f43b47759ae50be94bc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3df0c753d18bc8982d819f43b47759ae50be94bc","reference":"3df0c753d18bc8982d819f43b47759ae50be94bc","shasum":""},"time":"2020-09-16T11:22:50+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.10"}},{"version":"8.8.9","version_normalized":"8.8.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c8270789d71767c6482ccb6cc6e51f5ca4302cbc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c8270789d71767c6482ccb6cc6e51f5ca4302cbc","reference":"c8270789d71767c6482ccb6cc6e51f5ca4302cbc","shasum":""},"time":"2020-09-03T21:09:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.9"}},{"version":"8.8.8","version_normalized":"8.8.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c067109fcdf86184a7c75081fd8f1d81e4e23f56"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c067109fcdf86184a7c75081fd8f1d81e4e23f56","reference":"c067109fcdf86184a7c75081fd8f1d81e4e23f56","shasum":""},"time":"2020-06-17T17:58:48+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.8"}},{"version":"8.8.7","version_normalized":"8.8.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"92735f06d41145d96c2ec48cfe9776bcbe68baa2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/92735f06d41145d96c2ec48cfe9776bcbe68baa2","reference":"92735f06d41145d96c2ec48cfe9776bcbe68baa2","shasum":""},"time":"2020-06-03T16:39:46+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.7"}},{"version":"8.8.6","version_normalized":"8.8.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a5daf2aa45bbc72da72e1e64d5261f746ffb508c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a5daf2aa45bbc72da72e1e64d5261f746ffb508c","reference":"a5daf2aa45bbc72da72e1e64d5261f746ffb508c","shasum":""},"time":"2020-05-20T08:22:02+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"support":{"source":"https://github.com/drupal/core/tree/8.8.6"}},{"version":"8.8.5","version_normalized":"8.8.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e22cfc3adf1dac7a92452287a7d8602f3c27b68f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e22cfc3adf1dac7a92452287a7d8602f3c27b68f","reference":"e22cfc3adf1dac7a92452287a7d8602f3c27b68f","shasum":""},"time":"2020-04-02T19:01:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.5"}},{"version":"8.8.4","version_normalized":"8.8.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"34e59fcf702c1b3c497bbd6e92e68e546c5d15b8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/34e59fcf702c1b3c497bbd6e92e68e546c5d15b8","reference":"34e59fcf702c1b3c497bbd6e92e68e546c5d15b8","shasum":""},"time":"2020-03-18T16:26:33+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.4"}},{"version":"8.8.3","version_normalized":"8.8.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"77971de6d6ade7366cdd3fadfc16c5d02e531446"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/77971de6d6ade7366cdd3fadfc16c5d02e531446","reference":"77971de6d6ade7366cdd3fadfc16c5d02e531446","shasum":""},"time":"2020-03-04T18:01:37+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.3"}},{"version":"8.8.2","version_normalized":"8.8.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f997857003276c2ae6d27db30f0eab9c7dd10e62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f997857003276c2ae6d27db30f0eab9c7dd10e62","reference":"f997857003276c2ae6d27db30f0eab9c7dd10e62","shasum":""},"time":"2020-02-01T19:51:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.2"}},{"version":"8.8.1","version_normalized":"8.8.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d339279f4c4b89477e0f4a8b775eb5dcb86b3087"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d339279f4c4b89477e0f4a8b775eb5dcb86b3087","reference":"d339279f4c4b89477e0f4a8b775eb5dcb86b3087","shasum":""},"time":"2019-12-18T10:34:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.1"}},{"version":"8.8.0","version_normalized":"8.8.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c4890669449ccbab770818de9c9cb7a9f0ffc32e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c4890669449ccbab770818de9c9cb7a9f0ffc32e","reference":"c4890669449ccbab770818de9c9cb7a9f0ffc32e","shasum":""},"time":"2019-12-04T08:44:18+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.8"},"support":{"source":"https://github.com/drupal/core/tree/8.8.0"}},{"version":"8.8.0-rc1","version_normalized":"8.8.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2e16925020254f876c0ba3a4e11c4cd9ccbc6856"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2e16925020254f876c0ba3a4e11c4cd9ccbc6856","reference":"2e16925020254f876c0ba3a4e11c4cd9ccbc6856","shasum":""},"time":"2019-11-22T22:29:01+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.0-rc1"}},{"version":"8.8.0-beta1","version_normalized":"8.8.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6017c881bc0cec2d096a1e9d31c36f6a06e1f560"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6017c881bc0cec2d096a1e9d31c36f6a06e1f560","reference":"6017c881bc0cec2d096a1e9d31c36f6a06e1f560","shasum":""},"time":"2019-11-08T23:22:14+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.0-beta1"}},{"version":"8.8.0-alpha1","version_normalized":"8.8.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aa2ea999ca5d2173f14b5030dfba81bec41f5e09"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aa2ea999ca5d2173f14b5030dfba81bec41f5e09","reference":"aa2ea999ca5d2173f14b5030dfba81bec41f5e09","shasum":""},"time":"2019-10-17T23:33:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.2","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":">=1.7 <1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.5"},"conflict":{"drush/drush":"<8.1.10"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.8.0-alpha1"}},{"version":"8.7.14","version_normalized":"8.7.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326","reference":"3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326","shasum":""},"time":"2020-05-20T08:22:34+00:00","extra":{"merge-plugin":{"require":["core/lib/Drupal/Component/Annotation/composer.json","core/lib/Drupal/Component/Assertion/composer.json","core/lib/Drupal/Component/Bridge/composer.json","core/lib/Drupal/Component/ClassFinder/composer.json","core/lib/Drupal/Component/Datetime/composer.json","core/lib/Drupal/Component/DependencyInjection/composer.json","core/lib/Drupal/Component/Diff/composer.json","core/lib/Drupal/Component/Discovery/composer.json","core/lib/Drupal/Component/EventDispatcher/composer.json","core/lib/Drupal/Component/FileCache/composer.json","core/lib/Drupal/Component/FileSystem/composer.json","core/lib/Drupal/Component/Gettext/composer.json","core/lib/Drupal/Component/Graph/composer.json","core/lib/Drupal/Component/HttpFoundation/composer.json","core/lib/Drupal/Component/PhpStorage/composer.json","core/lib/Drupal/Component/Plugin/composer.json","core/lib/Drupal/Component/ProxyBuilder/composer.json","core/lib/Drupal/Component/Render/composer.json","core/lib/Drupal/Component/Serialization/composer.json","core/lib/Drupal/Component/Transliteration/composer.json","core/lib/Drupal/Component/Utility/composer.json","core/lib/Drupal/Component/Uuid/composer.json","core/lib/Drupal/Component/Version/composer.json"],"recurse":false,"replace":false,"merge-extra":false}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.3.1","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.7","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0","justinrainbow/json-schema":"^5.2"},"conflict":{"drush/drush":"<8.1.10","symfony/dom-crawler":">=4"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.7.14"}},{"version":"8.7.13","version_normalized":"8.7.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e31ff52ba598ed97f83379ca6444efc2ffcbae62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e31ff52ba598ed97f83379ca6444efc2ffcbae62","reference":"e31ff52ba598ed97f83379ca6444efc2ffcbae62","shasum":""},"time":"2020-04-02T19:05:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.13"}},{"version":"8.7.12","version_normalized":"8.7.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"412ac47f5a17a718617a844504db15208ff61245"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/412ac47f5a17a718617a844504db15208ff61245","reference":"412ac47f5a17a718617a844504db15208ff61245","shasum":""},"time":"2020-03-18T16:27:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.12"}},{"version":"8.7.11","version_normalized":"8.7.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a691876294fadc2795a8add96359b5ffc109d7f2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a691876294fadc2795a8add96359b5ffc109d7f2","reference":"a691876294fadc2795a8add96359b5ffc109d7f2","shasum":""},"time":"2019-12-18T08:55:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.11"}},{"version":"8.7.10","version_normalized":"8.7.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"02400f3ac4970b218dc63064895b3cbbe8576ad9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/02400f3ac4970b218dc63064895b3cbbe8576ad9","reference":"02400f3ac4970b218dc63064895b3cbbe8576ad9","shasum":""},"time":"2019-11-13T23:20:55+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.10"}},{"version":"8.7.9","version_normalized":"8.7.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"881e60062ea86a8f6809a298f09f56afd20b3cf3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/881e60062ea86a8f6809a298f09f56afd20b3cf3","reference":"881e60062ea86a8f6809a298f09f56afd20b3cf3","shasum":""},"time":"2019-11-06T18:00:38+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.9"}},{"version":"8.7.8","version_normalized":"8.7.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"476f491b85306c09101106d9b66a5dbe73c21bf0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/476f491b85306c09101106d9b66a5dbe73c21bf0","reference":"476f491b85306c09101106d9b66a5dbe73c21bf0","shasum":""},"time":"2019-10-02T18:41:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.8"}},{"version":"8.7.7","version_normalized":"8.7.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92","reference":"32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92","shasum":""},"time":"2019-09-04T10:26:35+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.7"}},{"version":"8.7.6","version_normalized":"8.7.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"39164616332832e1456199d32fc3ed11562f4721"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/39164616332832e1456199d32fc3ed11562f4721","reference":"39164616332832e1456199d32fc3ed11562f4721","shasum":""},"time":"2019-08-07T19:19:20+00:00","conflict":{"drush/drush":"<8.1.10"},"support":{"source":"https://github.com/drupal/core/tree/8.7.6"}},{"version":"8.7.5","version_normalized":"8.7.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"12cea52c782bb76e666c54c2a65cd3946daa3613"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/12cea52c782bb76e666c54c2a65cd3946daa3613","reference":"12cea52c782bb76e666c54c2a65cd3946daa3613","shasum":""},"time":"2019-07-16T16:24:57+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.5"}},{"version":"8.7.4","version_normalized":"8.7.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a6d447d41545323f54c5034e551fb43b8050eca9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a6d447d41545323f54c5034e551fb43b8050eca9","reference":"a6d447d41545323f54c5034e551fb43b8050eca9","shasum":""},"time":"2019-07-04T07:26:51+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.4"}},{"version":"8.7.3","version_normalized":"8.7.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b8ca92d4274048aff6bb020c329596c0e9b91269"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b8ca92d4274048aff6bb020c329596c0e9b91269","reference":"b8ca92d4274048aff6bb020c329596c0e9b91269","shasum":""},"time":"2019-06-05T19:21:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.3"}},{"version":"8.7.2","version_normalized":"8.7.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9","reference":"31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9","shasum":""},"time":"2019-05-23T07:22:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.x"}},{"version":"8.7.1","version_normalized":"8.7.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"969f24810fb31eac71dd624de593f551bd6dc2a3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/969f24810fb31eac71dd624de593f551bd6dc2a3","reference":"969f24810fb31eac71dd624de593f551bd6dc2a3","shasum":""},"time":"2019-05-08T16:00:55+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.1"}},{"version":"8.7.0","version_normalized":"8.7.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5da135abcf5dbc0204e9a75c87381c7553a74d5e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5da135abcf5dbc0204e9a75c87381c7553a74d5e","reference":"5da135abcf5dbc0204e9a75c87381c7553a74d5e","shasum":""},"time":"2019-05-01T18:39:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0"}},{"version":"8.7.0-rc1","version_normalized":"8.7.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e46d94843a9281b6d72bcf411f3ad6d2647ae2b3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e46d94843a9281b6d72bcf411f3ad6d2647ae2b3","reference":"e46d94843a9281b6d72bcf411f3ad6d2647ae2b3","shasum":""},"time":"2019-04-18T15:48:04+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-rc1"}},{"version":"8.7.0-beta2","version_normalized":"8.7.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bb1c05930162e80277b2cb88eb2d0f647c856946"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bb1c05930162e80277b2cb88eb2d0f647c856946","reference":"bb1c05930162e80277b2cb88eb2d0f647c856946","shasum":""},"time":"2019-04-08T00:25:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-beta2"}},{"version":"8.7.0-beta1","version_normalized":"8.7.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aad975103541446bb5da161e011d27474e107c48"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aad975103541446bb5da161e011d27474e107c48","reference":"aad975103541446bb5da161e011d27474e107c48","shasum":""},"time":"2019-03-29T17:36:49+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.0-beta1"}},{"version":"8.7.0-alpha2","version_normalized":"8.7.0.0-alpha2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"01186536523f5a15363ee536c177cf415890a10b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/01186536523f5a15363ee536c177cf415890a10b","reference":"01186536523f5a15363ee536c177cf415890a10b","shasum":""},"time":"2019-03-20T18:08:26+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.7","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-alpha2"}},{"version":"8.7.0-alpha1","version_normalized":"8.7.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e64e88c0945cb2dfc251b38a7a20266abdf36420"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e64e88c0945cb2dfc251b38a7a20266abdf36420","reference":"e64e88c0945cb2dfc251b38a7a20266abdf36420","shasum":""},"time":"2019-03-14T22:16:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.0-alpha1"}},{"version":"8.6.18","version_normalized":"8.6.18.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"90b77022dd055705369b98ebc7895997096d459f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/90b77022dd055705369b98ebc7895997096d459f","reference":"90b77022dd055705369b98ebc7895997096d459f","shasum":""},"time":"2019-11-13T23:24:48+00:00","extra":{"merge-plugin":{"require":["core/lib/Drupal/Component/Annotation/composer.json","core/lib/Drupal/Component/Assertion/composer.json","core/lib/Drupal/Component/Bridge/composer.json","core/lib/Drupal/Component/ClassFinder/composer.json","core/lib/Drupal/Component/Datetime/composer.json","core/lib/Drupal/Component/DependencyInjection/composer.json","core/lib/Drupal/Component/Diff/composer.json","core/lib/Drupal/Component/Discovery/composer.json","core/lib/Drupal/Component/EventDispatcher/composer.json","core/lib/Drupal/Component/FileCache/composer.json","core/lib/Drupal/Component/FileSystem/composer.json","core/lib/Drupal/Component/Gettext/composer.json","core/lib/Drupal/Component/Graph/composer.json","core/lib/Drupal/Component/HttpFoundation/composer.json","core/lib/Drupal/Component/PhpStorage/composer.json","core/lib/Drupal/Component/Plugin/composer.json","core/lib/Drupal/Component/ProxyBuilder/composer.json","core/lib/Drupal/Component/Render/composer.json","core/lib/Drupal/Component/Serialization/composer.json","core/lib/Drupal/Component/Transliteration/composer.json","core/lib/Drupal/Component/Utility/composer.json","core/lib/Drupal/Component/Uuid/composer.json"],"recurse":false,"replace":false,"merge-extra":false}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.6.18"}},{"version":"8.6.17","version_normalized":"8.6.17.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"47cb4ad62b01424221d045313d76385cbd19df22"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/47cb4ad62b01424221d045313d76385cbd19df22","reference":"47cb4ad62b01424221d045313d76385cbd19df22","shasum":""},"time":"2019-06-17T07:26:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.17"}},{"version":"8.6.16","version_normalized":"8.6.16.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a9c4c97c7da9ec1a38782912bb06784d28590539"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a9c4c97c7da9ec1a38782912bb06784d28590539","reference":"a9c4c97c7da9ec1a38782912bb06784d28590539","shasum":""},"time":"2019-05-08T16:00:58+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.16"}},{"version":"8.6.15","version_normalized":"8.6.15.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"936456cdeac25c6bbd2f55b0d587239c6a81ba86"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/936456cdeac25c6bbd2f55b0d587239c6a81ba86","reference":"936456cdeac25c6bbd2f55b0d587239c6a81ba86","shasum":""},"time":"2019-04-17T20:00:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.15"}},{"version":"8.6.14","version_normalized":"8.6.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5","reference":"7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5","shasum":""},"time":"2019-04-08T01:37:34+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.14"}},{"version":"8.6.13","version_normalized":"8.6.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8d5b80030ac3f13df2d66aeef0ea388fd9a90632"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8d5b80030ac3f13df2d66aeef0ea388fd9a90632","reference":"8d5b80030ac3f13df2d66aeef0ea388fd9a90632","shasum":""},"time":"2019-03-20T06:01:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.13"}},{"version":"8.6.12","version_normalized":"8.6.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f81e50dd6145c1d35797eb522f841a96804e9869"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f81e50dd6145c1d35797eb522f841a96804e9869","reference":"f81e50dd6145c1d35797eb522f841a96804e9869","shasum":""},"time":"2019-03-14T22:08:21+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.12"}},{"version":"8.6.11","version_normalized":"8.6.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"95233343dca7d0276b800ec2a1d9a3e7d0fc622d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/95233343dca7d0276b800ec2a1d9a3e7d0fc622d","reference":"95233343dca7d0276b800ec2a1d9a3e7d0fc622d","shasum":""},"time":"2019-03-13T20:52:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.11"}},{"version":"8.6.10","version_normalized":"8.6.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59568ac02948cf075ee8543e6c6d4386ad8daec1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59568ac02948cf075ee8543e6c6d4386ad8daec1","reference":"59568ac02948cf075ee8543e6c6d4386ad8daec1","shasum":""},"time":"2019-02-20T18:35:01+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.10"}},{"version":"8.6.9","version_normalized":"8.6.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cac12e0ec19d5c6fa53778522b3ff4c542f86c8d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cac12e0ec19d5c6fa53778522b3ff4c542f86c8d","reference":"cac12e0ec19d5c6fa53778522b3ff4c542f86c8d","shasum":""},"time":"2019-02-08T12:21:40+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.9"}},{"version":"8.6.8","version_normalized":"8.6.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0e0ccce552859f6fd3aec6b5754ad0d6ede07227"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0e0ccce552859f6fd3aec6b5754ad0d6ede07227","reference":"0e0ccce552859f6fd3aec6b5754ad0d6ede07227","shasum":""},"time":"2019-02-06T15:13:52+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.8"}},{"version":"8.6.7","version_normalized":"8.6.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e0a09bda1da7552204464894811a59387608c9f9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e0a09bda1da7552204464894811a59387608c9f9","reference":"e0a09bda1da7552204464894811a59387608c9f9","shasum":""},"time":"2019-01-16T23:30:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.7"}},{"version":"8.6.6","version_normalized":"8.6.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6736973f399a3a9ac8ecd41f3a159e1153f7ee39"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6736973f399a3a9ac8ecd41f3a159e1153f7ee39","reference":"6736973f399a3a9ac8ecd41f3a159e1153f7ee39","shasum":""},"time":"2019-01-15T17:41:52+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.6"}},{"version":"8.6.5","version_normalized":"8.6.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b66c9334d4a4264589c8b8a2fef73eefcb34a26e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b66c9334d4a4264589c8b8a2fef73eefcb34a26e","reference":"b66c9334d4a4264589c8b8a2fef73eefcb34a26e","shasum":""},"time":"2019-01-02T21:52:52+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.5"}},{"version":"8.6.4","version_normalized":"8.6.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4","reference":"652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4","shasum":""},"time":"2018-12-05T11:58:02+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.x"}},{"version":"8.6.3","version_normalized":"8.6.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9e9a1dd9e280ebaf10622217e54448b529167965"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9e9a1dd9e280ebaf10622217e54448b529167965","reference":"9e9a1dd9e280ebaf10622217e54448b529167965","shasum":""},"time":"2018-11-07T14:45:40+00:00"},{"version":"8.6.2","version_normalized":"8.6.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"356292934802bb1aecc478e88a3cba77442d7c62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/356292934802bb1aecc478e88a3cba77442d7c62","reference":"356292934802bb1aecc478e88a3cba77442d7c62","shasum":""},"time":"2018-10-17T22:19:50+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.6.2"}},{"version":"8.6.1","version_normalized":"8.6.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970","reference":"1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970","shasum":""},"time":"2018-09-10T11:50:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.x"}},{"version":"8.6.0","version_normalized":"8.6.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4a2507b102fcedc74507fd372131f2ed72913429"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4a2507b102fcedc74507fd372131f2ed72913429","reference":"4a2507b102fcedc74507fd372131f2ed72913429","shasum":""},"time":"2018-09-05T22:16:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0"}},{"version":"8.6.0-rc1","version_normalized":"8.6.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9","reference":"2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9","shasum":""},"time":"2018-08-17T18:43:58+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0-rc1"}},{"version":"8.6.0-beta2","version_normalized":"8.6.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b0f9c6865588b1f557e15e284514e807452df270"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b0f9c6865588b1f557e15e284514e807452df270","reference":"b0f9c6865588b1f557e15e284514e807452df270","shasum":""},"time":"2018-08-03T11:56:18+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0-beta2"}},{"version":"8.6.0-beta1","version_normalized":"8.6.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1ae53a417211bcc024320cba01b4be7a0c3962ba"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1ae53a417211bcc024320cba01b4be7a0c3962ba","reference":"1ae53a417211bcc024320cba01b4be7a0c3962ba","shasum":""},"time":"2018-08-03T04:09:25+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.0-beta1"}},{"version":"8.6.0-alpha1","version_normalized":"8.6.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cefeacd9ca768387d42b5fc6b895c41439f4a7f5"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cefeacd9ca768387d42b5fc6b895c41439f4a7f5","reference":"cefeacd9ca768387d42b5fc6b895c41439f4a7f5","shasum":""},"time":"2018-07-19T20:14:40+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.6.0-alpha1"}},{"version":"8.5.15","version_normalized":"8.5.15.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"912e7dd0985ece07bd0cff2e213f1423e2627082"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/912e7dd0985ece07bd0cff2e213f1423e2627082","reference":"912e7dd0985ece07bd0cff2e213f1423e2627082","shasum":""},"time":"2019-04-17T20:00:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.5.15"}},{"version":"8.5.14","version_normalized":"8.5.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59b22210b8d4602a35529cca82a543a631933423"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59b22210b8d4602a35529cca82a543a631933423","reference":"59b22210b8d4602a35529cca82a543a631933423","shasum":""},"time":"2019-03-20T06:01:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.14"}},{"version":"8.5.13","version_normalized":"8.5.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2737f8d6165fcb509846c8232bbedfe152b90c02"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2737f8d6165fcb509846c8232bbedfe152b90c02","reference":"2737f8d6165fcb509846c8232bbedfe152b90c02","shasum":""},"time":"2019-03-14T22:09:26+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.13"}},{"version":"8.5.12","version_normalized":"8.5.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f61bb0ec95b958befa0f59430614d1f5718860bf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f61bb0ec95b958befa0f59430614d1f5718860bf","reference":"f61bb0ec95b958befa0f59430614d1f5718860bf","shasum":""},"time":"2019-03-13T20:58:57+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.12"}},{"version":"8.5.11","version_normalized":"8.5.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3750c5b2e39857825a2631179d0b9a06b240193f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3750c5b2e39857825a2631179d0b9a06b240193f","reference":"3750c5b2e39857825a2631179d0b9a06b240193f","shasum":""},"time":"2019-02-20T18:35:05+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.11"}},{"version":"8.5.10","version_normalized":"8.5.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"596f97e4d55dae28e00605d9825529bd8b8ad382"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/596f97e4d55dae28e00605d9825529bd8b8ad382","reference":"596f97e4d55dae28e00605d9825529bd8b8ad382","shasum":""},"time":"2019-01-16T23:30:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.10"}},{"version":"8.5.9","version_normalized":"8.5.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bf8e511b751e3e2147c4009f28167f5545c13e31"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bf8e511b751e3e2147c4009f28167f5545c13e31","reference":"bf8e511b751e3e2147c4009f28167f5545c13e31","shasum":""},"time":"2019-01-15T17:41:56+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.9"}},{"version":"8.5.8","version_normalized":"8.5.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"01703d6f3995fcaa9c67bb02c524d7061dc040b4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/01703d6f3995fcaa9c67bb02c524d7061dc040b4","reference":"01703d6f3995fcaa9c67bb02c524d7061dc040b4","shasum":""},"time":"2018-10-17T22:19:47+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.8"}},{"version":"8.5.7","version_normalized":"8.5.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d8bdf376c0549e9bfc33030157b498df4b9bec87"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d8bdf376c0549e9bfc33030157b498df4b9bec87","reference":"d8bdf376c0549e9bfc33030157b498df4b9bec87","shasum":""},"time":"2018-09-05T22:26:39+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.7"}},{"version":"8.5.6","version_normalized":"8.5.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7d7184a69ac90ce53929ce99f18458043416107a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7d7184a69ac90ce53929ce99f18458043416107a","reference":"7d7184a69ac90ce53929ce99f18458043416107a","shasum":""},"time":"2018-08-01T20:50:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.6"}},{"version":"8.5.5","version_normalized":"8.5.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"900c28f19d4b5643f43c1cf046684046402eaac4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/900c28f19d4b5643f43c1cf046684046402eaac4","reference":"900c28f19d4b5643f43c1cf046684046402eaac4","shasum":""},"time":"2018-07-04T21:08:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.5"}},{"version":"8.5.4","version_normalized":"8.5.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6b4dc1cf3347761f63152a31786b4680b8ac7781"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6b4dc1cf3347761f63152a31786b4680b8ac7781","reference":"6b4dc1cf3347761f63152a31786b4680b8ac7781","shasum":""},"time":"2018-06-06T21:02:51+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.4"}},{"version":"8.5.3","version_normalized":"8.5.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b012f0ae51504880e920f2c6efdbdf03b6fe2129"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b012f0ae51504880e920f2c6efdbdf03b6fe2129","reference":"b012f0ae51504880e920f2c6efdbdf03b6fe2129","shasum":""},"time":"2018-04-25T15:39:01+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.3"}},{"version":"8.5.2","version_normalized":"8.5.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bc21760d4be4ad117851809183c8d18880ab275a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bc21760d4be4ad117851809183c8d18880ab275a","reference":"bc21760d4be4ad117851809183c8d18880ab275a","shasum":""},"time":"2018-04-18T17:00:56+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.2"}},{"version":"8.5.1","version_normalized":"8.5.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2aeca7dfa2661296602ac16bf9fd6085f0a121be"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2aeca7dfa2661296602ac16bf9fd6085f0a121be","reference":"2aeca7dfa2661296602ac16bf9fd6085f0a121be","shasum":""},"time":"2018-03-27T09:58:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.1"}},{"version":"8.5.0","version_normalized":"8.5.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0b9070370e272da441b4be52561c559c05f4553d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0b9070370e272da441b4be52561c559c05f4553d","reference":"0b9070370e272da441b4be52561c559c05f4553d","shasum":""},"time":"2018-03-07T21:10:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.0"}},{"version":"8.5.0-rc1","version_normalized":"8.5.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a8897035912d10ecd7930ab15ee1b229746f3db9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a8897035912d10ecd7930ab15ee1b229746f3db9","reference":"a8897035912d10ecd7930ab15ee1b229746f3db9","shasum":""},"time":"2018-02-21T17:08:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.0","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-rc1"}},{"version":"8.5.0-beta1","version_normalized":"8.5.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a32b4341c46d4e3c4ebb4328375ce2510cf576a7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a32b4341c46d4e3c4ebb4328375ce2510cf576a7","reference":"a32b4341c46d4e3c4ebb4328375ce2510cf576a7","shasum":""},"time":"2018-02-09T21:09:34+00:00","require":{"php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.0","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0","behat/mink-selenium2-driver":"^1.3"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-beta1"}},{"version":"8.5.0-alpha1","version_normalized":"8.5.0.0-alpha1","license":["GPL-2.0+"],"source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"affe6a6651a416bd998acc8840e7ce5f08c2d0e2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/affe6a6651a416bd998acc8840e7ce5f08c2d0e2","reference":"affe6a6651a416bd998acc8840e7ce5f08c2d0e2","shasum":""},"time":"2018-01-18T23:47:28+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-alpha1"},"extra":"__unset"},{"version":"8.4.8","version_normalized":"8.4.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878","reference":"3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878","shasum":""},"time":"2018-04-25T15:39:04+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~3.2.8","symfony/console":"~3.2.8","symfony/dependency-injection":"~3.2.8","symfony/event-dispatcher":"~3.2.8","symfony/http-foundation":"~3.2.8","symfony/http-kernel":"~3.2.8","symfony/routing":"~3.2.8","symfony/serializer":"~3.2.8","symfony/translation":"~3.2.8","symfony/validator":"~3.2.8","symfony/process":"~3.2.8","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.2.8","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":">=4.8.35 <5","phpspec/prophecy":"^1.4","symfony/css-selector":"~3.2.8","symfony/phpunit-bridge":"~3.2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.8"}},{"version":"8.4.7","version_normalized":"8.4.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9","reference":"07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9","shasum":""},"time":"2018-04-18T17:19:54+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.7"}},{"version":"8.4.6","version_normalized":"8.4.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f439a43c7da1df8d16067f797c0bc3498eb4c699"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f439a43c7da1df8d16067f797c0bc3498eb4c699","reference":"f439a43c7da1df8d16067f797c0bc3498eb4c699","shasum":""},"time":"2018-03-27T10:03:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.6"}},{"version":"8.4.5","version_normalized":"8.4.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"44a857df6f7ffd063cffed9a41767cdc50dd7474"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/44a857df6f7ffd063cffed9a41767cdc50dd7474","reference":"44a857df6f7ffd063cffed9a41767cdc50dd7474","shasum":""},"time":"2018-02-20T21:35:13+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.5"}},{"version":"8.4.4","version_normalized":"8.4.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c6585ffaea5df4ed529e2bdf4371850f8fc3b88c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c6585ffaea5df4ed529e2bdf4371850f8fc3b88c","reference":"c6585ffaea5df4ed529e2bdf4371850f8fc3b88c","shasum":""},"time":"2018-01-03T19:27:53+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.4"}},{"version":"8.4.3","version_normalized":"8.4.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"793cb14c54624b4be160b78f742af44a01cc7b4e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/793cb14c54624b4be160b78f742af44a01cc7b4e","reference":"793cb14c54624b4be160b78f742af44a01cc7b4e","shasum":""},"time":"2017-12-06T22:45:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.3"}},{"version":"8.4.2","version_normalized":"8.4.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"68d25c07b7306340900abc4020c38683a817f0eb"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/68d25c07b7306340900abc4020c38683a817f0eb","reference":"68d25c07b7306340900abc4020c38683a817f0eb","shasum":""},"time":"2017-11-03T13:20:16+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.2"}},{"version":"8.4.1","version_normalized":"8.4.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dbdd31c4e1a21d2188622107c0b856f5c1b0e56e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dbdd31c4e1a21d2188622107c0b856f5c1b0e56e","reference":"dbdd31c4e1a21d2188622107c0b856f5c1b0e56e","shasum":""},"time":"2017-11-01T18:38:24+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.1"}},{"version":"8.4.0","version_normalized":"8.4.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d4be8e12d9e8b4db82ece760c632213247f56fa7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d4be8e12d9e8b4db82ece760c632213247f56fa7","reference":"d4be8e12d9e8b4db82ece760c632213247f56fa7","shasum":""},"time":"2017-10-04T19:25:32+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0"}},{"version":"8.4.0-rc2","version_normalized":"8.4.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b2a6d61fe5752a7c8336611852f027f327e329d3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b2a6d61fe5752a7c8336611852f027f327e329d3","reference":"b2a6d61fe5752a7c8336611852f027f327e329d3","shasum":""},"time":"2017-09-20T12:43:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.0-rc2"}},{"version":"8.4.0-rc1","version_normalized":"8.4.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c544a05049e028f61d8c85c4cfc5734e6b3863b2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c544a05049e028f61d8c85c4cfc5734e6b3863b2","reference":"c544a05049e028f61d8c85c4cfc5734e6b3863b2","shasum":""},"time":"2017-09-06T21:12:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.0-rc1"}},{"version":"8.4.0-beta1","version_normalized":"8.4.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"48a043dc25c4b284fe88dff26f2f48360f5d87c8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/48a043dc25c4b284fe88dff26f2f48360f5d87c8","reference":"48a043dc25c4b284fe88dff26f2f48360f5d87c8","shasum":""},"time":"2017-08-17T17:21:44+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0-beta1"}},{"version":"8.4.0-alpha1","version_normalized":"8.4.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"770b95b3b0667a3c7f138183babf9a1e78426b7e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/770b95b3b0667a3c7f138183babf9a1e78426b7e","reference":"770b95b3b0667a3c7f138183babf9a1e78426b7e","shasum":""},"time":"2017-08-03T19:24:50+00:00","require":{"php":">=5.5.9","symfony/class-loader":"^3.2","symfony/console":"^3.2","symfony/dependency-injection":"^3.2","symfony/event-dispatcher":"^3.2","symfony/http-foundation":"^3.2","symfony/http-kernel":"^3.2","symfony/routing":"^3.2","symfony/serializer":"^3.2","symfony/translation":"^3.2","symfony/validator":"^3.2","symfony/process":"^3.2","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^3.2","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":">=4.8.35 <5","symfony/css-selector":"^3.2","symfony/phpunit-bridge":"^3.2"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0-alpha1"}},{"version":"8.3.9","version_normalized":"8.3.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a83cbc50bf96ab5e8580413f6a359d999e981883"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a83cbc50bf96ab5e8580413f6a359d999e981883","reference":"a83cbc50bf96ab5e8580413f6a359d999e981883","shasum":""},"time":"2018-03-27T10:06:04+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.12","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/browser-kit":">=2.8.13 <3.0","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.3.9"}},{"version":"8.3.8","version_normalized":"8.3.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5d991a86fc445ebe71a63eed8804c4209f8794c4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5d991a86fc445ebe71a63eed8804c4209f8794c4","reference":"5d991a86fc445ebe71a63eed8804c4209f8794c4","shasum":""},"time":"2018-03-12T19:09:32+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.8"}},{"version":"8.3.7","version_normalized":"8.3.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff","reference":"32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff","shasum":""},"time":"2017-08-16T17:10:35+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.7"}},{"version":"8.3.6","version_normalized":"8.3.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a6d76c4428ee40cb3f60974ccc19b41feaf58dc0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a6d76c4428ee40cb3f60974ccc19b41feaf58dc0","reference":"a6d76c4428ee40cb3f60974ccc19b41feaf58dc0","shasum":""},"time":"2017-08-02T15:27:39+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.6"}},{"version":"8.3.5","version_normalized":"8.3.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7adfc8c43615258e242868a393e82971a67be51a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7adfc8c43615258e242868a393e82971a67be51a","reference":"7adfc8c43615258e242868a393e82971a67be51a","shasum":""},"time":"2017-07-05T17:03:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.5"}},{"version":"8.3.4","version_normalized":"8.3.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f34eee7255142ab5416107972ef13d011f11e163"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f34eee7255142ab5416107972ef13d011f11e163","reference":"f34eee7255142ab5416107972ef13d011f11e163","shasum":""},"time":"2017-06-21T18:13:27+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.4"}},{"version":"8.3.3","version_normalized":"8.3.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"98da955d81c79f1a753536ab9c9dad5f80a72922"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/98da955d81c79f1a753536ab9c9dad5f80a72922","reference":"98da955d81c79f1a753536ab9c9dad5f80a72922","shasum":""},"time":"2017-06-07T17:35:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.3"}},{"version":"8.3.2","version_normalized":"8.3.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"82c432cfe728458538d4826c9c4be57dcf35443b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/82c432cfe728458538d4826c9c4be57dcf35443b","reference":"82c432cfe728458538d4826c9c4be57dcf35443b","shasum":""},"time":"2017-05-03T17:12:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.2"}},{"version":"8.3.1","version_normalized":"8.3.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"53326f9503e5e9e406fab22e4fbae6ddb706f7be"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/53326f9503e5e9e406fab22e4fbae6ddb706f7be","reference":"53326f9503e5e9e406fab22e4fbae6ddb706f7be","shasum":""},"time":"2017-04-19T16:07:22+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.1"},"conflict":"__unset"},{"version":"8.3.0","version_normalized":"8.3.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e503a252ec5c2811abed6af0c7b70afda8e93a3f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e503a252ec5c2811abed6af0c7b70afda8e93a3f","reference":"e503a252ec5c2811abed6af0c7b70afda8e93a3f","shasum":""},"time":"2017-04-06T00:12:44+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0"}},{"version":"8.3.0-rc2","version_normalized":"8.3.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3","reference":"cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3","shasum":""},"time":"2017-03-15T21:19:09+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/dom-crawler":">=2.8.13 <3.0","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.11","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-rc2"}},{"version":"8.3.0-rc1","version_normalized":"8.3.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f9f055385da1f94bb255179f7335ed3a5dbdf28f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f9f055385da1f94bb255179f7335ed3a5dbdf28f","reference":"f9f055385da1f94bb255179f7335ed3a5dbdf28f","shasum":""},"time":"2017-03-01T15:35:49+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.10","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-rc1"}},{"version":"8.3.0-beta1","version_normalized":"8.3.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7b628e88038c32482a5f9552ca400c8cbdef8c1c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7b628e88038c32482a5f9552ca400c8cbdef8c1c","reference":"7b628e88038c32482a5f9552ca400c8cbdef8c1c","shasum":""},"time":"2017-02-15T16:16:18+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-beta1"}},{"version":"8.3.0-alpha1","version_normalized":"8.3.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9cf9a8fb5a53674491efcd62f82a70b4cd138aee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9cf9a8fb5a53674491efcd62f82a70b4cd138aee","reference":"9cf9a8fb5a53674491efcd62f82a70b4cd138aee","shasum":""},"time":"2017-02-01T16:59:40+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.8","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-alpha1"}},{"version":"8.2.8","version_normalized":"8.2.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7ccc248f4058dd5985ad0c61c129243d0d2b58b8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7ccc248f4058dd5985ad0c61c129243d0d2b58b8","reference":"7ccc248f4058dd5985ad0c61c129243d0d2b58b8","shasum":""},"time":"2017-04-19T16:45:52+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1|^2","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.8"}},{"version":"8.2.7","version_normalized":"8.2.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7e3e9eb8ceb1428d36f8281fccede3c7f6469216"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7e3e9eb8ceb1428d36f8281fccede3c7f6469216","reference":"7e3e9eb8ceb1428d36f8281fccede3c7f6469216","shasum":""},"time":"2017-03-15T20:19:51+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.7"}},{"version":"8.2.6","version_normalized":"8.2.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d1b22419f24414def8333861842cd1a8083b24bf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d1b22419f24414def8333861842cd1a8083b24bf","reference":"d1b22419f24414def8333861842cd1a8083b24bf","shasum":""},"time":"2017-02-01T17:03:36+00:00","require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","symfony/css-selector":"~2.8","phpunit/phpunit":"~4.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.6"}},{"version":"8.2.5","version_normalized":"8.2.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"12ec8a14c0cd269af823375bc05b0738b5293e2a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/12ec8a14c0cd269af823375bc05b0738b5293e2a","reference":"12ec8a14c0cd269af823375bc05b0738b5293e2a","shasum":""},"time":"2017-01-04T11:31:35+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.5"}},{"version":"8.2.4","version_normalized":"8.2.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5365700e0d9632bd7bf257fc0ec5ab0af5755430"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5365700e0d9632bd7bf257fc0ec5ab0af5755430","reference":"5365700e0d9632bd7bf257fc0ec5ab0af5755430","shasum":""},"time":"2016-12-07T18:31:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.4"}},{"version":"8.2.3","version_normalized":"8.2.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8734c80df2715e9e1aa30bbe16cef820251c9463"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8734c80df2715e9e1aa30bbe16cef820251c9463","reference":"8734c80df2715e9e1aa30bbe16cef820251c9463","shasum":""},"time":"2016-11-16T18:45:36+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"~1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.3"}},{"version":"8.2.2","version_normalized":"8.2.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"65db92a776d426d39c5e60caf163212af5586119"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/65db92a776d426d39c5e60caf163212af5586119","reference":"65db92a776d426d39c5e60caf163212af5586119","shasum":""},"time":"2016-11-02T17:43:45+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.2"}},{"version":"8.2.1","version_normalized":"8.2.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"43f2009dec1957c5dbbe47b9200ce020095192fc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/43f2009dec1957c5dbbe47b9200ce020095192fc","reference":"43f2009dec1957c5dbbe47b9200ce020095192fc","shasum":""},"time":"2016-10-11T10:18:49+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.1"}},{"version":"8.2.0","version_normalized":"8.2.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b21089ec64c3de37311ba679663d39d62a7a782b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b21089ec64c3de37311ba679663d39d62a7a782b","reference":"b21089ec64c3de37311ba679663d39d62a7a782b","shasum":""},"time":"2016-10-05T09:36:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0"}},{"version":"8.2.0-rc2","version_normalized":"8.2.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"74a5d5a36c304f77644b08a4ed754f26ca772110"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/74a5d5a36c304f77644b08a4ed754f26ca772110","reference":"74a5d5a36c304f77644b08a4ed754f26ca772110","shasum":""},"time":"2016-09-21T18:56:05+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"^1.0|^2.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-rc2"}},{"version":"8.2.0-rc1","version_normalized":"8.2.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"49b794692bb31e241712ad5ef5446befcd206fe3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/49b794692bb31e241712ad5ef5446befcd206fe3","reference":"49b794692bb31e241712ad5ef5446befcd206fe3","shasum":""},"time":"2016-09-07T21:40:46+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"~1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-rc1"}},{"version":"8.2.0-beta3","version_normalized":"8.2.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0d8af425bbcfa7c6c97fee64f830b2b57888d435"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0d8af425bbcfa7c6c97fee64f830b2b57888d435","reference":"0d8af425bbcfa7c6c97fee64f830b2b57888d435","shasum":""},"time":"2016-08-26T14:28:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta3"}},{"version":"8.2.0-beta2","version_normalized":"8.2.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dc1d25edb1cedf25287cb1b525f1537f62e95171"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dc1d25edb1cedf25287cb1b525f1537f62e95171","reference":"dc1d25edb1cedf25287cb1b525f1537f62e95171","shasum":""},"time":"2016-08-20T16:29:45+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta2"}},{"version":"8.2.0-beta1","version_normalized":"8.2.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aabe310b294af029d56311cb2995970e953ead1f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aabe310b294af029d56311cb2995970e953ead1f","reference":"aabe310b294af029d56311cb2995970e953ead1f","shasum":""},"time":"2016-08-03T13:18:11+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta1"}},{"version":"8.1.10","version_normalized":"8.1.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"feeefdebf0579524ee67fa86860050e25eb92d1c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/feeefdebf0579524ee67fa86860050e25eb92d1c","reference":"feeefdebf0579524ee67fa86860050e25eb92d1c","shasum":""},"time":"2016-09-21T17:09:42+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0"},"require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.10"}},{"version":"8.1.9","version_normalized":"8.1.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4cdebb9039fa4c9abf22258db41a7343908ec1e6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4cdebb9039fa4c9abf22258db41a7343908ec1e6","reference":"4cdebb9039fa4c9abf22258db41a7343908ec1e6","shasum":""},"time":"2016-09-07T19:16:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.9"}},{"version":"8.1.8","version_normalized":"8.1.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"df2199a585b8c0096adc365de7a3ec582f253a8f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/df2199a585b8c0096adc365de7a3ec582f253a8f","reference":"df2199a585b8c0096adc365de7a3ec582f253a8f","shasum":""},"time":"2016-08-03T14:09:08+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.8"}},{"version":"8.1.7","version_normalized":"8.1.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b38637330f9759abcdc4af343e59a29a59cc98db"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b38637330f9759abcdc4af343e59a29a59cc98db","reference":"b38637330f9759abcdc4af343e59a29a59cc98db","shasum":""},"time":"2016-07-18T15:01:43+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.2"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.7"}},{"version":"8.1.6","version_normalized":"8.1.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4f40eff880595ca7d94941cd5b22a861596f5d18"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4f40eff880595ca7d94941cd5b22a861596f5d18","reference":"4f40eff880595ca7d94941cd5b22a861596f5d18","shasum":""},"time":"2016-07-11T13:07:34+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.1"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.6"}},{"version":"8.1.5","version_normalized":"8.1.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"51d414e479fffddb7d235078ff25ea97bb4399e7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/51d414e479fffddb7d235078ff25ea97bb4399e7","reference":"51d414e479fffddb7d235078ff25ea97bb4399e7","shasum":""},"time":"2016-07-07T09:38:59+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.5"}},{"version":"8.1.4","version_normalized":"8.1.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1323599cd94da383516771f2da39960e826f83b1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1323599cd94da383516771f2da39960e826f83b1","reference":"1323599cd94da383516771f2da39960e826f83b1","shasum":""},"time":"2016-07-05T08:59:22+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.4"}},{"version":"8.1.3","version_normalized":"8.1.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"621df9820f53a560226d86ded801d37641a11bf6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/621df9820f53a560226d86ded801d37641a11bf6","reference":"621df9820f53a560226d86ded801d37641a11bf6","shasum":""},"time":"2016-06-15T20:08:27+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.3"}},{"version":"8.1.2","version_normalized":"8.1.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b","reference":"59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b","shasum":""},"time":"2016-06-01T23:31:24+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.2"}},{"version":"8.1.1","version_normalized":"8.1.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9d357f0f0916627048fe9fac016dde1685fbffd9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9d357f0f0916627048fe9fac016dde1685fbffd9","reference":"9d357f0f0916627048fe9fac016dde1685fbffd9","shasum":""},"time":"2016-05-04T11:20:24+00:00","require-dev":{"behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8","behat/mink":"~1.6"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.1"}},{"version":"8.1.0","version_normalized":"8.1.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bacb5b6a9b9695819f15edf12099bd3bb378d75b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bacb5b6a9b9695819f15edf12099bd3bb378d75b","reference":"bacb5b6a9b9695819f15edf12099bd3bb378d75b","shasum":""},"time":"2016-04-20T01:34:34+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"],"classmap":["lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php"]},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0"}},{"version":"8.1.0-rc1","version_normalized":"8.1.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a8cde28699b6e131e5454fe0689cb62d228d5d19"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a8cde28699b6e131e5454fe0689cb62d228d5d19","reference":"a8cde28699b6e131e5454fe0689cb62d228d5d19","shasum":""},"time":"2016-04-06T20:58:23+00:00","require-dev":{"behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","behat/mink":"~1.6","symfony/css-selector":"2.7.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-rc1"}},{"version":"8.1.0-beta2","version_normalized":"8.1.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"396109d5d6f4cff0c1a064591e738fae45201772"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/396109d5d6f4cff0c1a064591e738fae45201772","reference":"396109d5d6f4cff0c1a064591e738fae45201772","shasum":""},"time":"2016-03-23T02:19:35+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-beta2"}},{"version":"8.1.0-beta1","version_normalized":"8.1.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dd636ef74fe482f1f253ab5410463c02cd7f5e36"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dd636ef74fe482f1f253ab5410463c02cd7f5e36","reference":"dd636ef74fe482f1f253ab5410463c02cd7f5e36","shasum":""},"time":"2016-03-03T03:26:59+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.1"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-beta1"}},{"version":"8.0.6","version_normalized":"8.0.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cc6ff1fc4067c674db839eb7bec0517d756c39c8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cc6ff1fc4067c674db839eb7bec0517d756c39c8","reference":"cc6ff1fc4067c674db839eb7bec0517d756c39c8","shasum":""},"time":"2016-04-05T23:34:17+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0"},"require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.6"}},{"version":"8.0.5","version_normalized":"8.0.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a3aa1ee0153eefebd1d0163bb49a18e907ae8dac"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a3aa1ee0153eefebd1d0163bb49a18e907ae8dac","reference":"a3aa1ee0153eefebd1d0163bb49a18e907ae8dac","shasum":""},"time":"2016-03-02T10:31:56+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.5"}},{"version":"8.0.4","version_normalized":"8.0.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c68a2e5ace8dded85af775fb1ee83706ba5f38de"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c68a2e5ace8dded85af775fb1ee83706ba5f38de","reference":"c68a2e5ace8dded85af775fb1ee83706ba5f38de","shasum":""},"time":"2016-02-24T18:59:52+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*","jcalderonzumba/gastonjs":"^1.1@dev"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.4"}},{"version":"8.0.3","version_normalized":"8.0.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab","reference":"b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab","shasum":""},"time":"2016-02-03T08:47:36+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.3"}},{"version":"8.0.2","version_normalized":"8.0.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"fb5230be7507dda09eb3b246a6d51bda85258d6a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/fb5230be7507dda09eb3b246a6d51bda85258d6a","reference":"fb5230be7507dda09eb3b246a6d51bda85258d6a","shasum":""},"time":"2016-01-06T22:36:23+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.2"}},{"version":"8.0.1","version_normalized":"8.0.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6741bb0c474fb03cf2562524f19e5678df70dc52"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6741bb0c474fb03cf2562524f19e5678df70dc52","reference":"6741bb0c474fb03cf2562524f19e5678df70dc52","shasum":""},"time":"2015-12-02T14:08:29+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*","jcalderonzumba/gastonjs":"^1.1@dev","jcalderonzumba/mink-phantomjs-driver":"dev-master#10d7c48c9a4129463052321b52450d98983c4332"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.1"}},{"version":"8.0.0","version_normalized":"8.0.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"344b81f442bfe136a515c864c6d1d5eb7bb711de"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/344b81f442bfe136a515c864c6d1d5eb7bb711de","reference":"344b81f442bfe136a515c864c6d1d5eb7bb711de","shasum":""},"time":"2015-11-19T14:02:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0"}},{"version":"8.0.0-rc4","version_normalized":"8.0.0.0-RC4","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba","reference":"8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba","shasum":""},"time":"2015-11-13T11:21:34+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc4"}},{"version":"8.0.0-rc3","version_normalized":"8.0.0.0-RC3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e82f1217d4695799b45cd38110530c70a24a4a3f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e82f1217d4695799b45cd38110530c70a24a4a3f","reference":"e82f1217d4695799b45cd38110530c70a24a4a3f","shasum":""},"time":"2015-11-04T10:15:22+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","twig/twig":"^1.22.2"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc3"}},{"version":"8.0.0-rc2","version_normalized":"8.0.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"80b12982cf84a9dec175ec86c9ef6a1eb0a40984"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/80b12982cf84a9dec175ec86c9ef6a1eb0a40984","reference":"80b12982cf84a9dec175ec86c9ef6a1eb0a40984","shasum":""},"time":"2015-10-21T22:51:01+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc2"}},{"version":"8.0.0-rc1","version_normalized":"8.0.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b42c200a1452a9ff309e3e30e171373ad71cbb97"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b42c200a1452a9ff309e3e30e171373ad71cbb97","reference":"b42c200a1452a9ff309e3e30e171373ad71cbb97","shasum":""},"time":"2015-10-07T21:20:43+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc1"}},{"version":"8.0.0-beta16","version_normalized":"8.0.0.0-beta16","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"563da4c404d12f24ee8ee9098ca05875af613c58"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/563da4c404d12f24ee8ee9098ca05875af613c58","reference":"563da4c404d12f24ee8ee9098ca05875af613c58","shasum":""},"time":"2015-10-02T00:39:06+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","twig/twig":"^1.22.2"},"require-dev":{"behat/mink":"~1.6","mikey179/vfsstream":"~1.2","symfony/css-selector":"2.7.*","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","phpunit/phpunit":"4.8.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta16"}},{"version":"8.0.0-beta15","version_normalized":"8.0.0.0-beta15","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b6013eba2dfacc04ffc855b9547b3f258f0e8066"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b6013eba2dfacc04ffc855b9547b3f258f0e8066","reference":"b6013eba2dfacc04ffc855b9547b3f258f0e8066","shasum":""},"time":"2015-09-04T08:56:05+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.20.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"dev-master#1879fbe853b0c64d109e369c7aeff09849e62d1e","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"~1.2","behat/mink":"~1.6","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","fabpot/goutte":"~3.1","zendframework/zend-diactoros":"1.1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta15"},"require-dev":"__unset"},{"version":"8.0.0-beta14","version_normalized":"8.0.0.0-beta14","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a346886d5f85f93a90f306bc3b814ddca1ed7cd6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a346886d5f85f93a90f306bc3b814ddca1ed7cd6","reference":"a346886d5f85f93a90f306bc3b814ddca1ed7cd6","shasum":""},"time":"2015-08-03T09:10:38+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"dev-master#1879fbe853b0c64d109e369c7aeff09849e62d1e","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"~1.2","behat/mink":"~1.6","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","fabpot/goutte":"~3.1","zendframework/zend-diactoros":"1.1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta14"}},{"version":"8.0.0-beta13","version_normalized":"8.0.0.0-beta13","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"39062bf24f3cfa996dbc0a009fc64dec14624c60"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/39062bf24f3cfa996dbc0a009fc64dec14624c60","reference":"39062bf24f3cfa996dbc0a009fc64dec14624c60","shasum":""},"time":"2015-07-29T18:06:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta13"}},{"version":"8.0.0-beta12","version_normalized":"8.0.0.0-beta12","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e0f5550ea38bd53d05512f078e0cf5c413c7bda0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e0f5550ea38bd53d05512f078e0cf5c413c7bda0","reference":"e0f5550ea38bd53d05512f078e0cf5c413c7bda0","shasum":""},"time":"2015-06-29T18:12:48+00:00","require":{"symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta12"}},{"version":"8.0.0-beta11","version_normalized":"8.0.0.0-beta11","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b2d77934d1a82c8c285cbe44ab2f62418a86b93a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b2d77934d1a82c8c285cbe44ab2f62418a86b93a","reference":"b2d77934d1a82c8c285cbe44ab2f62418a86b93a","shasum":""},"time":"2015-05-27T20:26:08+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*@dev","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta11"},"replace":"__unset"},{"version":"8.0.0-beta10","version_normalized":"8.0.0.0-beta10","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"fc83f4c32a4fda2a755b07ee47935d8d6f596578"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/fc83f4c32a4fda2a755b07ee47935d8d6f596578","reference":"fc83f4c32a4fda2a755b07ee47935d8d6f596578","shasum":""},"time":"2015-04-29T13:28:43+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta10"}},{"version":"8.0.0-beta9","version_normalized":"8.0.0.0-beta9","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"600d79f984f2ab37a72cfe1c7c766d4b320ba926"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/600d79f984f2ab37a72cfe1c7c766d4b320ba926","reference":"600d79f984f2ab37a72cfe1c7c766d4b320ba926","shasum":""},"time":"2015-03-25T16:13:13+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"],"classmap":["lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernelInterface.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/TerminableInterface.php"]},"require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta9"}},{"version":"8.0.0-beta8","version_normalized":"8.0.0.0-beta8","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"529c681e48f03884cb6c30ac5a0aac37346e8266"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/529c681e48f03884cb6c30ac5a0aac37346e8266","reference":"529c681e48f03884cb6c30ac5a0aac37346e8266","shasum":""},"time":"2015-03-24T23:50:56+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta8"}},{"version":"8.0.0-beta7","version_normalized":"8.0.0.0-beta7","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"292329995117fe5ce3cd4e3b8f68bb577e522617"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/292329995117fe5ce3cd4e3b8f68bb577e522617","reference":"292329995117fe5ce3cd4e3b8f68bb577e522617","shasum":""},"time":"2015-02-24T23:52:34+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta7"}},{"version":"8.0.0-beta6","version_normalized":"8.0.0.0-beta6","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e9174812eb5816f9d9c03b4552a9af5a8f7782cf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e9174812eb5816f9d9c03b4552a9af5a8f7782cf","reference":"e9174812eb5816f9d9c03b4552a9af5a8f7782cf","shasum":""},"time":"2015-01-28T10:55:26+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"]},"require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","phpunit/phpunit-mock-objects":"dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta6"}}]},"minified":"composer/2.0"} \ No newline at end of file diff --git a/fixtures/targets/packages.json b/fixtures/targets/packages.json index 13498b8..cc4e9dd 100644 --- a/fixtures/targets/packages.json +++ b/fixtures/targets/packages.json @@ -1,7 +1,7 @@ { "packages": [], - "metadata-url": "/composer-repo/p2/%package%.json", + "metadata-url": "/p2/%package%.json", "available-package-regexes": ["drupal/*"], "search": "https://packagist.org/search.json?q=%query%&type=%type%", "providers-api": "https://packagist.org/providers/%package%.json" -} \ No newline at end of file +} diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php new file mode 100644 index 0000000..ba3d8fa --- /dev/null +++ b/src/HttpDownloaderAdapter.php @@ -0,0 +1,228 @@ +decorated = $decorated; + $this->tufRepo = $tufRepo; + $this->queue = new \ArrayIterator(); + $this->aggregator = new EachPromise($this->queue, ['concurrency' => 12]); + } + + /** + * Creates a promise for a request. + * + * @param array $request + * The request array. Must contain at least a 'url' element with the URL. + * + * @return \GuzzleHttp\Promise\PromiseInterface + * A promise representing the eventual result of the request. + */ + private function createPromise(array $request): PromiseInterface + { + $request += [ + 'options' => [], + 'copyTo' => false, + ]; + $request['options'] = array_replace_recursive($this->getOptions(), $request['options']); + + $fetcherOptions = []; + if ($request['copyTo']) { + $fetcherOptions[RequestOptions::SINK] = $request['copyTo']; + } + + // When the promise is fulfilled, convert it to an instance of + // \Composer\Util\Http\Response that resembles what the regular + // HttpDownloader would produce. + $accept = function (ResponseStream $stream) use ($request) { + $this->markJobDone(); + + $response = $stream->getResponse(); + $headers = []; + foreach ($response->getHeaders() as $name => $values) { + $headers[] = "$name: " . reset($values); + } + + $uri = $stream->getMetadata('uri'); + if ($uri && file_exists($uri)) { + $contents = "$uri~"; + } else { + $contents = $stream->getContents(); + } + return new Response($request, $response->getStatusCode(), $headers, $contents); + }; + + // If the promise gets rejected because it's a 404, convert that to a + // \Composer\Downloader\TransportException like the regular + // HttpDownloader would produce. + $reject = function (\Throwable $e) use ($request) { + $this->markJobDone(); + + if ($e instanceof \InvalidArgumentException || $e instanceof RepoFileNotFound) { + $e = new TransportException($e->getMessage(), $e->getCode(), $e); + $e->setStatusCode(404); + } + throw $e; + }; + + $target = parse_url($request['url'], PHP_URL_PATH); + $target = ltrim($target, '/'); + + $this->activeJobs++; + return $this->tufRepo->download($target, $fetcherOptions)->then($accept, $reject); + } + + /** + * {@inheritDoc} + */ + public function get($url, $options = array()) + { + return $this->add($url, $options)->wait(); + } + + /** + * {@inheritDoc} + */ + public function add($url, $options = array()) + { + return $this->createQueuedPromise([ + 'url' => $url, + 'options' => $options, + ]); + } + + /** + * {@inheritDoc} + */ + public function copy($url, $to, $options = array()) + { + return $this->addCopy($url, $to, $options)->wait(); + } + + /** + * {@inheritDoc} + */ + public function addCopy($url, $to, $options = array()) + { + return $this->createQueuedPromise([ + 'url' => $url, + 'options' => $options, + 'copyTo' => $to, + ]); + } + + private function createQueuedPromise(array $request): PromiseInterface + { + $promise = $this->createPromise($request); + $this->queue->append($promise); + return $promise; + } + + /** + * {@inheritDoc} + */ + public function getOptions() + { + return $this->decorated->getOptions(); + } + + /** + * {@inheritDoc} + */ + public function setOptions(array $options) + { + return $this->decorated->setOptions($options); + } + + /** + * {@inheritDoc} + */ + public function markJobDone() + { + $this->activeJobs--; + return $this->decorated->markJobDone(); + } + + /** + * {@inheritDoc} + */ + public function wait($index = null) + { + parent::wait($index); + return $this->decorated->wait($index); + } + + /** + * {@inheritDoc} + */ + public function enableAsync() + { + return $this->decorated->enableAsync(); + } + + /** + * {@inheritDoc} + */ + public function countActiveJobs($index = null) + { + $this->clearSettledPromises(); + $this->aggregator->promise()->wait(); + return $this->activeJobs + $this->decorated->countActiveJobs($index); + } + + private function clearSettledPromises(): void + { + foreach ($this->queue as $key => $promise) { + if (Is::settled($promise)) { + unset($this->queue[$key]); + } + } + } +} diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index be56e61..03e5f7e 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -9,11 +9,10 @@ use Composer\Repository\RepositorySecurityException; use Composer\Util\Filesystem; use Composer\Util\HttpDownloader; -use GuzzleHttp\Client; use Tuf\Client\DurableStorage\FileStorage; use Tuf\Client\GuzzleFileFetcher; use Tuf\Client\Updater; -use Tuf\Exception\TufException; +use Tuf\ComposerIntegration\HttpDownloaderAdapter; class TufValidatedComposerRepository extends ComposerRepository { @@ -27,8 +26,6 @@ class TufValidatedComposerRepository extends ComposerRepository */ public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $eventDispatcher = null) { - parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); - if (!empty($repoConfig['tuf'])) { $tufConfig = $repoConfig['tuf']; @@ -42,58 +39,23 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, // Ensure directory exists. $fs = new Filesystem(); $fs->ensureDirectoryExists($repoPath); - $tufDurableStorage = new FileStorage($repoPath); + + $rootFile = $repoPath . '/root.json'; + if (!file_exists($rootFile)) { + $fs->copy(realpath($tufConfig['root']), $rootFile); + } + // Instantiate TUF library. - $client = new Client([ - 'base_uri' => $tufConfig['url'], - ]); - $this->tufRepo = new Updater(new GuzzleFileFetcher($client), [ - ['url_prefix' => $tufConfig['url']] - ], $tufDurableStorage); + $fetcher = GuzzleFileFetcher::createFromUri($repoConfig['url']); + $this->tufRepo = new Updater($fetcher, [], new FileStorage($repoPath)); + + $httpDownloader = new HttpDownloaderAdapter($httpDownloader, $this->tufRepo); } else { // Outputting composer repositories not secured by TUF may create confusion about other // not-secured repository types (eg, "vcs"). // @todo Usability assessment. Should we output this for other repo types, or not at all? $io->warning("Authenticity of packages from ${repoConfig['url']} are not verified by TUF."); } - } - - /** - * {@inheritDoc} - */ - protected function loadRootServerFile() - { - // If we are using TUF, fetch the latest secure metadata for the - // Composer package metadata. - if ($this->tufRepo) { - try { - $this->tufRepo->refresh(); - } catch (TufException $e) { - throw new RepositorySecurityException("TUF security error: {$e->getMessage()}", $e->getCode(), $e); - } - } - return parent::loadRootServerFile(); - } - - /** - * {@inheritDoc} - */ - protected function fetchFile($filename, $cacheKey = null, $sha256 = null, $storeLastModifiedTime = false) - { - if ($this->tufRepo) { - $tufTarget = ltrim(parse_url($filename, PHP_URL_PATH), '/'); - try { - $tufTargetInfo = $this->tufRepo->getOneValidTargetInfo($tufTarget); - } catch (TufException $e) { - throw new RepositorySecurityException('TUF secure error: ' . $e->getMessage(), $e->getCode(), $e); - } - - // @todo: Investigate whether all $sha256 hashes, when provided, are trusted. Skip TUF if so. - if ($sha256 !== null && $sha256 !== $tufTargetInfo['hashes']['sha256']) { - throw new RepositorySecurityException('TUF secure error: disagreement between TUF and Composer repositories on expected hash of ' . $tufTarget); - } - $sha256 = $tufTargetInfo['hashes']['sha256']; - } - return parent::fetchFile($filename, $cacheKey, $sha256, $storeLastModifiedTime); + parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); } } From a7a7997cc6977576b5bce00547d48994d7c7c99c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Wed, 17 Mar 2021 10:08:16 -0400 Subject: [PATCH 02/50] Pass TUF repo to HttpDownloader. --- src/HttpDownloaderAdapter.php | 47 ++++++++++++------- .../TufValidatedComposerRepository.php | 4 +- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index ba3d8fa..cab4ecd 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -12,7 +12,6 @@ use GuzzleHttp\RequestOptions; use Psr\Http\Message\StreamInterface; use Tuf\Client\ResponseStream; -use Tuf\Client\Updater; use Tuf\Exception\RepoFileNotFound; /** @@ -26,8 +25,6 @@ class HttpDownloaderAdapter extends HttpDownloader { private $decorated; - private $tufRepo; - /** * A queue of promises to settle asynchronously. * @@ -48,10 +45,9 @@ class HttpDownloaderAdapter extends HttpDownloader private $activeJobs = 0; - public function __construct(HttpDownloader $decorated, Updater $tufRepo) + public function __construct(HttpDownloader $decorated) { $this->decorated = $decorated; - $this->tufRepo = $tufRepo; $this->queue = new \ArrayIterator(); $this->aggregator = new EachPromise($this->queue, ['concurrency' => 12]); } @@ -68,7 +64,6 @@ public function __construct(HttpDownloader $decorated, Updater $tufRepo) private function createPromise(array $request): PromiseInterface { $request += [ - 'options' => [], 'copyTo' => false, ]; $request['options'] = array_replace_recursive($this->getOptions(), $request['options']); @@ -116,7 +111,7 @@ private function createPromise(array $request): PromiseInterface $target = ltrim($target, '/'); $this->activeJobs++; - return $this->tufRepo->download($target, $fetcherOptions)->then($accept, $reject); + return $request['options']['tuf']->download($target, $fetcherOptions)->then($accept, $reject); } /** @@ -124,7 +119,11 @@ private function createPromise(array $request): PromiseInterface */ public function get($url, $options = array()) { - return $this->add($url, $options)->wait(); + if (isset($options['tuf'])) { + return $this->add($url, $options)->wait(); + } else { + return $this->decorated->get($url, $options); + } } /** @@ -132,10 +131,14 @@ public function get($url, $options = array()) */ public function add($url, $options = array()) { - return $this->createQueuedPromise([ - 'url' => $url, - 'options' => $options, - ]); + if (isset($options['tuf'])) { + return $this->createQueuedPromise([ + 'url' => $url, + 'options' => $options, + ]); + } else { + return $this->decorated->add($url, $options); + } } /** @@ -143,7 +146,11 @@ public function add($url, $options = array()) */ public function copy($url, $to, $options = array()) { - return $this->addCopy($url, $to, $options)->wait(); + if (isset($options['tuf'])) { + return $this->addCopy($url, $to, $options)->wait(); + } else { + return $this->decorated->copy($url, $to, $options); + } } /** @@ -151,11 +158,15 @@ public function copy($url, $to, $options = array()) */ public function addCopy($url, $to, $options = array()) { - return $this->createQueuedPromise([ - 'url' => $url, - 'options' => $options, - 'copyTo' => $to, - ]); + if (isset($options['tuf'])) { + return $this->createQueuedPromise([ + 'url' => $url, + 'options' => $options, + 'copyTo' => $to, + ]); + } else { + return $this->decorated->addCopy($url, $to, $options); + } } private function createQueuedPromise(array $request): PromiseInterface diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 03e5f7e..b0cdbce 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -47,9 +47,9 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, // Instantiate TUF library. $fetcher = GuzzleFileFetcher::createFromUri($repoConfig['url']); - $this->tufRepo = new Updater($fetcher, [], new FileStorage($repoPath)); + $repoConfig['options']['tuf'] = new Updater($fetcher, [], new FileStorage($repoPath)); - $httpDownloader = new HttpDownloaderAdapter($httpDownloader, $this->tufRepo); + $httpDownloader = new HttpDownloaderAdapter($httpDownloader); } else { // Outputting composer repositories not secured by TUF may create confusion about other // not-secured repository types (eg, "vcs"). From e77985685fd3530fc9e3c071a8aa40afca9334ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 18 Mar 2021 15:00:48 -0400 Subject: [PATCH 03/50] Use HttpDownloaderAdapter as a central registry of TUF instances --- src/HttpDownloaderAdapter.php | 41 ++++++++++++++++++- src/PackageLoader.php | 36 ++++++++++++++++ src/Plugin.php | 7 +++- .../TufValidatedComposerRepository.php | 34 +++------------ 4 files changed, 86 insertions(+), 32 deletions(-) create mode 100644 src/PackageLoader.php diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index cab4ecd..441ae3a 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -3,7 +3,9 @@ namespace Tuf\ComposerIntegration; use Composer\Downloader\TransportException; +use Composer\Repository\ComposerRepository; use Composer\Repository\RepositorySecurityException; +use Composer\Util\Filesystem; use Composer\Util\Http\Response; use Composer\Util\HttpDownloader; use GuzzleHttp\Promise\EachPromise; @@ -11,7 +13,10 @@ use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\RequestOptions; use Psr\Http\Message\StreamInterface; +use Tuf\Client\DurableStorage\FileStorage; +use Tuf\Client\GuzzleFileFetcher; use Tuf\Client\ResponseStream; +use Tuf\Client\Updater; use Tuf\Exception\RepoFileNotFound; /** @@ -25,6 +30,10 @@ class HttpDownloaderAdapter extends HttpDownloader { private $decorated; + private $instances = []; + + private $vendorDir; + /** * A queue of promises to settle asynchronously. * @@ -45,13 +54,40 @@ class HttpDownloaderAdapter extends HttpDownloader private $activeJobs = 0; - public function __construct(HttpDownloader $decorated) + public function __construct(HttpDownloader $decorated, string $vendorDir) { $this->decorated = $decorated; + $this->vendorDir = $vendorDir; $this->queue = new \ArrayIterator(); $this->aggregator = new EachPromise($this->queue, ['concurrency' => 12]); } + public function register(ComposerRepository $repository) + { + $repoConfig = $repository->getRepoConfig(); + $url = $repoConfig['url']; + + // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? + // Convert the repo URL into a string that can be used as a + // directory name. + $repoPath = preg_replace('/[^[:alnum:]\.]/', '-', $url); + // Harvest the vendor dir from Composer. We'll store TUF state under vendor/composer/tuf. + $vendorDir = rtrim($this->vendorDir, '/'); + $repoPath = "$vendorDir/composer/tuf/repo/$repoPath"; + // Ensure directory exists. + $fs = new Filesystem(); + $fs->ensureDirectoryExists($repoPath); + + $rootFile = $repoPath . '/root.json'; + if (!file_exists($rootFile)) { + $fs->copy(realpath($repoConfig['tuf']['root']), $rootFile); + } + + // Instantiate TUF library. + $fetcher = GuzzleFileFetcher::createFromUri($url); + $this->instances[$url] = new Updater($fetcher, [], new FileStorage($repoPath)); + } + /** * Creates a promise for a request. * @@ -111,7 +147,8 @@ private function createPromise(array $request): PromiseInterface $target = ltrim($target, '/'); $this->activeJobs++; - return $request['options']['tuf']->download($target, $fetcherOptions)->then($accept, $reject); + $tuf = $this->instances[$request['options']['tuf']['repository']]; + return $tuf->download($target, $fetcherOptions)->then($accept, $reject); } /** diff --git a/src/PackageLoader.php b/src/PackageLoader.php new file mode 100644 index 0000000..4b60258 --- /dev/null +++ b/src/PackageLoader.php @@ -0,0 +1,36 @@ +repository = $repository; + } + + public function loadPackages(array $versions, $class) + { + $packages = parent::loadPackages($versions, $class); + + /** @var \Composer\Package\CompletePackage $package */ + foreach ($packages as $package) { + $options = $package->getTransportOptions(); + $options['tuf'] = [ + 'target' => hash('sha256', $package->getDistUrl()), + 'repository' => $this->repository->getRepoConfig()['url'], + ]; + $package->setTransportOptions($options); + } + return $packages; + } +} diff --git a/src/Plugin.php b/src/Plugin.php index e3c39d1..b7f0405 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -17,6 +17,11 @@ class Plugin implements PluginInterface */ public function activate(Composer $composer, IOInterface $io) { + $this->httpDownloader = new HttpDownloaderAdapter( + $composer->getLoop()->getHttpDownloader(), + $composer->getConfig()->get('vendor-dir') + ); + // By the time this plugin is activated, several repositories may have // already been instantiated, and we need to convert them to // TUF-validated repositories. Unfortunately, the repository manager @@ -44,7 +49,7 @@ private function addTufValidationToRepositories(Composer $composer, RepositoryMa { foreach ($composer->getRepositoryManager()->getRepositories() as $repository) { if ($repository instanceof ComposerRepository) { - $repository = new TufValidatedComposerRepository($repository->getRepoConfig(), $io, $composer->getConfig(), $composer->getLoop()->getHttpDownloader(), $composer->getEventDispatcher()); + $repository = new TufValidatedComposerRepository($repository->getRepoConfig(), $io, $composer->getConfig(), $this->httpDownloader, $composer->getEventDispatcher()); } $manager->addRepository($repository); } diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index b0cdbce..7a93b1c 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -13,49 +13,25 @@ use Tuf\Client\GuzzleFileFetcher; use Tuf\Client\Updater; use Tuf\ComposerIntegration\HttpDownloaderAdapter; +use Tuf\ComposerIntegration\PackageLoader; class TufValidatedComposerRepository extends ComposerRepository { - /** - * @var Updater - */ - protected $tufRepo; - /** * {@inheritDoc} */ public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $eventDispatcher = null) { + parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); if (!empty($repoConfig['tuf'])) { - $tufConfig = $repoConfig['tuf']; - - // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? - // Convert the repo URL into a string that can be used as a - // directory name. - $repoPath = preg_replace('/[^[:alnum:]\.]/', '-', $repoConfig['url']); - // Harvest the vendor dir from Composer. We'll store TUF state under vendor/composer/tuf. - $vendorDir = rtrim($config->get('vendor-dir'), '/'); - $repoPath = "$vendorDir/composer/tuf/repo/$repoPath"; - // Ensure directory exists. - $fs = new Filesystem(); - $fs->ensureDirectoryExists($repoPath); - - $rootFile = $repoPath . '/root.json'; - if (!file_exists($rootFile)) { - $fs->copy(realpath($tufConfig['root']), $rootFile); - } - - // Instantiate TUF library. - $fetcher = GuzzleFileFetcher::createFromUri($repoConfig['url']); - $repoConfig['options']['tuf'] = new Updater($fetcher, [], new FileStorage($repoPath)); - - $httpDownloader = new HttpDownloaderAdapter($httpDownloader); + $httpDownloader->register($this); + $this->loader = new PackageLoader($this, $this->versionParser); } else { // Outputting composer repositories not secured by TUF may create confusion about other // not-secured repository types (eg, "vcs"). // @todo Usability assessment. Should we output this for other repo types, or not at all? $io->warning("Authenticity of packages from ${repoConfig['url']} are not verified by TUF."); } - parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); + } } From 35a09b59a40b43b9d23a9e7c6b5eeb7e8571f0ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 18 Mar 2021 15:29:00 -0400 Subject: [PATCH 04/50] Might have fixed it --- src/HttpDownloaderAdapter.php | 1 + src/Plugin.php | 20 +++++++++++++++++++ .../TufValidatedComposerRepository.php | 11 ++++------ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 441ae3a..1d2a3ac 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -261,6 +261,7 @@ public function enableAsync() public function countActiveJobs($index = null) { $this->clearSettledPromises(); + $this->aggregator = new EachPromise($this->queue, ['concurrency' => 12]); $this->aggregator->promise()->wait(); return $this->activeJobs + $this->decorated->countActiveJobs($index); } diff --git a/src/Plugin.php b/src/Plugin.php index b7f0405..832b58c 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -3,11 +3,14 @@ namespace Tuf\ComposerIntegration; use Composer\Composer; +use Composer\Factory; +use Composer\Installer\LibraryInstaller; use Composer\IO\IOInterface; use Composer\Plugin\PluginInterface; use Composer\Repository\ComposerRepository; use Composer\Repository\RepositoryFactory; use Composer\Repository\RepositoryManager; +use Composer\Util\Loop; use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; class Plugin implements PluginInterface @@ -17,6 +20,7 @@ class Plugin implements PluginInterface */ public function activate(Composer $composer, IOInterface $io) { + $composer->getLoop()->getHttpDownloader()->wait(); $this->httpDownloader = new HttpDownloaderAdapter( $composer->getLoop()->getHttpDownloader(), $composer->getConfig()->get('vendor-dir') @@ -31,6 +35,22 @@ public function activate(Composer $composer, IOInterface $io) $newManager = $this->createNewRepositoryManager($composer, $io); $this->addTufValidationToRepositories($composer, $newManager, $io); $composer->setRepositoryManager($newManager); + + $downloadManager = Factory::createDownloadManager( + $io, + $composer->getConfig(), + $this->httpDownloader, + $composer->getLoop()->getProcessExecutor(), + $composer->getEventDispatcher() + ); + $composer->setDownloadManager($downloadManager); + + $loop = new Loop($this->httpDownloader, $composer->getLoop()->getProcessExecutor()); + $installationManager = Factory::createInstallationManager($loop, $io, $composer->getEventDispatcher()); + $composer->setInstallationManager($installationManager); + + $installer = new LibraryInstaller($io, $composer); + $installationManager->addInstaller($installer); } private function createNewRepositoryManager(Composer $composer, IOInterface $io): RepositoryManager diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 7a93b1c..503ae6c 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -6,12 +6,6 @@ use Composer\EventDispatcher\EventDispatcher; use Composer\IO\IOInterface; use Composer\Repository\ComposerRepository; -use Composer\Repository\RepositorySecurityException; -use Composer\Util\Filesystem; -use Composer\Util\HttpDownloader; -use Tuf\Client\DurableStorage\FileStorage; -use Tuf\Client\GuzzleFileFetcher; -use Tuf\Client\Updater; use Tuf\ComposerIntegration\HttpDownloaderAdapter; use Tuf\ComposerIntegration\PackageLoader; @@ -20,8 +14,11 @@ class TufValidatedComposerRepository extends ComposerRepository /** * {@inheritDoc} */ - public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $eventDispatcher = null) + public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloaderAdapter $httpDownloader, EventDispatcher $eventDispatcher = null) { + if (!empty($repoConfig['tuf'])) { + $repoConfig['options']['tuf']['repository'] = $repoConfig['url']; + } parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); if (!empty($repoConfig['tuf'])) { $httpDownloader->register($this); From 4043b666f7028d7afc9d682aa65c977c9b758379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 18 Mar 2021 15:38:14 -0400 Subject: [PATCH 05/50] Pass target key through to to downloader --- src/HttpDownloaderAdapter.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 1d2a3ac..f02d982 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -143,8 +143,12 @@ private function createPromise(array $request): PromiseInterface throw $e; }; - $target = parse_url($request['url'], PHP_URL_PATH); - $target = ltrim($target, '/'); + if (isset($request['options']['tuf']['target'])) { + $target = $request['options']['tuf']['target']; + } else { + $target = parse_url($request['url'], PHP_URL_PATH); + $target = ltrim($target, '/'); + } $this->activeJobs++; $tuf = $this->instances[$request['options']['tuf']['repository']]; From 57c3c03d475601d38826071413b6818794e1a692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 18 Mar 2021 15:41:31 -0400 Subject: [PATCH 06/50] Pry into factory to init default installers --- src/Plugin.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Plugin.php b/src/Plugin.php index 832b58c..6f75eef 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -49,8 +49,11 @@ public function activate(Composer $composer, IOInterface $io) $installationManager = Factory::createInstallationManager($loop, $io, $composer->getEventDispatcher()); $composer->setInstallationManager($installationManager); - $installer = new LibraryInstaller($io, $composer); - $installationManager->addInstaller($installer); + $factory = new Factory(); + $reflector = new \ReflectionObject($factory); + $method = $reflector->getMethod('createDefaultInstallers'); + $method->setAccessible(true); + $method->invoke($factory, $installationManager, $composer, $io, $composer->getLoop()->getProcessExecutor()); } private function createNewRepositoryManager(Composer $composer, IOInterface $io): RepositoryManager From d858d8e186e3153144aa880297f709fb40fd25f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 18 Mar 2021 15:51:12 -0400 Subject: [PATCH 07/50] Set global loop --- src/Plugin.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Plugin.php b/src/Plugin.php index 6f75eef..bd96c22 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -25,6 +25,8 @@ public function activate(Composer $composer, IOInterface $io) $composer->getLoop()->getHttpDownloader(), $composer->getConfig()->get('vendor-dir') ); + $loop = new Loop($this->httpDownloader, $composer->getLoop()->getProcessExecutor()); + $composer->setLoop($loop); // By the time this plugin is activated, several repositories may have // already been instantiated, and we need to convert them to @@ -45,7 +47,6 @@ public function activate(Composer $composer, IOInterface $io) ); $composer->setDownloadManager($downloadManager); - $loop = new Loop($this->httpDownloader, $composer->getLoop()->getProcessExecutor()); $installationManager = Factory::createInstallationManager($loop, $io, $composer->getEventDispatcher()); $composer->setInstallationManager($installationManager); From 0b1188a6b60cfe3bce6ea34930d68a76c65415a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 14:26:17 -0400 Subject: [PATCH 08/50] Giant god damn mess --- src/FileFetcher.php | 19 +++++++++++++++++++ src/HttpDownloaderAdapter.php | 9 ++++++--- src/PackageLoader.php | 5 +++++ .../TufValidatedComposerRepository.php | 2 +- 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 src/FileFetcher.php diff --git a/src/FileFetcher.php b/src/FileFetcher.php new file mode 100644 index 0000000..3f3ad5e --- /dev/null +++ b/src/FileFetcher.php @@ -0,0 +1,19 @@ +urlMap)) { + return $this->fetchFile($this->urlMap[$fileName], $maxBytes, $options); + } + return parent::fetchTarget($fileName, $maxBytes, $options); + } +} diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index f02d982..41487c5 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -32,6 +32,8 @@ class HttpDownloaderAdapter extends HttpDownloader private $instances = []; + public $fetchers = []; + private $vendorDir; /** @@ -84,8 +86,8 @@ public function register(ComposerRepository $repository) } // Instantiate TUF library. - $fetcher = GuzzleFileFetcher::createFromUri($url); - $this->instances[$url] = new Updater($fetcher, [], new FileStorage($repoPath)); + $this->fetchers[$url] = FileFetcher::createFromUri($url); + $this->instances[$url] = new Updater($this->fetchers[$url], [], new FileStorage($repoPath)); } /** @@ -143,6 +145,7 @@ private function createPromise(array $request): PromiseInterface throw $e; }; + $repository = $request['options']['tuf']['repository']; if (isset($request['options']['tuf']['target'])) { $target = $request['options']['tuf']['target']; } else { @@ -151,7 +154,7 @@ private function createPromise(array $request): PromiseInterface } $this->activeJobs++; - $tuf = $this->instances[$request['options']['tuf']['repository']]; + $tuf = $this->instances[$repository]; return $tuf->download($target, $fetcherOptions)->then($accept, $reject); } diff --git a/src/PackageLoader.php b/src/PackageLoader.php index 4b60258..f09b5c7 100644 --- a/src/PackageLoader.php +++ b/src/PackageLoader.php @@ -9,13 +9,16 @@ class PackageLoader extends ArrayLoader { private $repository; + private $downloader; public function __construct( TufValidatedComposerRepository $repository, + HttpDownloaderAdapter $downloader, VersionParser $parser = null, $loadOptions = false ) { parent::__construct($parser, $loadOptions); $this->repository = $repository; + $this->downloader = $downloader; } public function loadPackages(array $versions, $class) @@ -30,6 +33,8 @@ public function loadPackages(array $versions, $class) 'repository' => $this->repository->getRepoConfig()['url'], ]; $package->setTransportOptions($options); + + $this->downloader->fetchers[$options['tuf']['repository']]->urlMap[$options['tuf']['target']] = $package->getDistUrl(); } return $packages; } diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 503ae6c..142e01e 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -22,7 +22,7 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); if (!empty($repoConfig['tuf'])) { $httpDownloader->register($this); - $this->loader = new PackageLoader($this, $this->versionParser); + $this->loader = new PackageLoader($this, $httpDownloader, $this->versionParser); } else { // Outputting composer repositories not secured by TUF may create confusion about other // not-secured repository types (eg, "vcs"). From 8e492cff6b08c5590c50e24a2fe65e7f4418051c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 15:13:09 -0400 Subject: [PATCH 09/50] Create uninstall routine --- src/HttpDownloaderAdapter.php | 21 ++++++++++++++------- src/Plugin.php | 26 +++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 41487c5..d85cfce 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -34,7 +34,14 @@ class HttpDownloaderAdapter extends HttpDownloader public $fetchers = []; - private $vendorDir; + /** + * The base path where persistent TUF data should be stored. + * + * @var string + * + * @see \Tuf\ComposerIntegration\Plugin::getStoragePath() + */ + private $storagePath; /** * A queue of promises to settle asynchronously. @@ -56,10 +63,10 @@ class HttpDownloaderAdapter extends HttpDownloader private $activeJobs = 0; - public function __construct(HttpDownloader $decorated, string $vendorDir) + public function __construct(HttpDownloader $decorated, string $storagePath) { $this->decorated = $decorated; - $this->vendorDir = $vendorDir; + $this->storagePath = $storagePath; $this->queue = new \ArrayIterator(); $this->aggregator = new EachPromise($this->queue, ['concurrency' => 12]); } @@ -72,10 +79,10 @@ public function register(ComposerRepository $repository) // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? // Convert the repo URL into a string that can be used as a // directory name. - $repoPath = preg_replace('/[^[:alnum:]\.]/', '-', $url); - // Harvest the vendor dir from Composer. We'll store TUF state under vendor/composer/tuf. - $vendorDir = rtrim($this->vendorDir, '/'); - $repoPath = "$vendorDir/composer/tuf/repo/$repoPath"; + $repoPath = implode(DIRECTORY_SEPARATOR, [ + $this->storagePath, + preg_replace('/[^[:alnum:]\.]/', '-', $url), + ]); // Ensure directory exists. $fs = new Filesystem(); $fs->ensureDirectoryExists($repoPath); diff --git a/src/Plugin.php b/src/Plugin.php index bd96c22..43ece7c 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -10,6 +10,7 @@ use Composer\Repository\ComposerRepository; use Composer\Repository\RepositoryFactory; use Composer\Repository\RepositoryManager; +use Composer\Util\Filesystem; use Composer\Util\Loop; use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; @@ -23,7 +24,7 @@ public function activate(Composer $composer, IOInterface $io) $composer->getLoop()->getHttpDownloader()->wait(); $this->httpDownloader = new HttpDownloaderAdapter( $composer->getLoop()->getHttpDownloader(), - $composer->getConfig()->get('vendor-dir') + static::getStoragePath($composer) ); $loop = new Loop($this->httpDownloader, $composer->getLoop()->getProcessExecutor()); $composer->setLoop($loop); @@ -84,7 +85,11 @@ private function addTufValidationToRepositories(Composer $composer, RepositoryMa */ public function uninstall(Composer $composer, IOInterface $io) { - // TODO: Implement uninstall() method. + $path = static::getStoragePath($composer); + $io->info("Deleting TUF data in $path"); + + $fs = new Filesystem(); + $fs->removeDirectoryPhp($path); } /** @@ -92,6 +97,21 @@ public function uninstall(Composer $composer, IOInterface $io) */ public function deactivate(Composer $composer, IOInterface $io) { - // TODO: Implement deactivate() method. + } + + /** + * Gets the path where persistent TUF data should be stored. + * + * @param \Composer\Composer $composer + * The Composer instance. + * + * @return string + * The path where persistent TUF data should be stored. + */ + private static function getStoragePath(Composer $composer): string + { + $vendorDir = $composer->getConfig()->get('vendor-dir'); + $vendorDir = rtrim($vendorDir, DIRECTORY_SEPARATOR); + return implode(DIRECTORY_SEPARATOR, [$vendorDir, 'composer', 'tuf']); } } From e12f8a9895b8ee1bfc78db9560e91e097e8bbd13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 15:22:58 -0400 Subject: [PATCH 10/50] Make it easier to swap the downloader --- src/HttpDownloaderAdapter.php | 2 +- src/Plugin.php | 65 ++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index d85cfce..dad608c 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -28,7 +28,7 @@ */ class HttpDownloaderAdapter extends HttpDownloader { - private $decorated; + public $decorated; private $instances = []; diff --git a/src/Plugin.php b/src/Plugin.php index 43ece7c..903e71c 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -11,6 +11,7 @@ use Composer\Repository\RepositoryFactory; use Composer\Repository\RepositoryManager; use Composer\Util\Filesystem; +use Composer\Util\HttpDownloader; use Composer\Util\Loop; use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; @@ -26,8 +27,8 @@ public function activate(Composer $composer, IOInterface $io) $composer->getLoop()->getHttpDownloader(), static::getStoragePath($composer) ); - $loop = new Loop($this->httpDownloader, $composer->getLoop()->getProcessExecutor()); - $composer->setLoop($loop); + + $this->setHttpDownloader($composer, $io, $this->httpDownloader); // By the time this plugin is activated, several repositories may have // already been instantiated, and we need to convert them to @@ -38,24 +39,6 @@ public function activate(Composer $composer, IOInterface $io) $newManager = $this->createNewRepositoryManager($composer, $io); $this->addTufValidationToRepositories($composer, $newManager, $io); $composer->setRepositoryManager($newManager); - - $downloadManager = Factory::createDownloadManager( - $io, - $composer->getConfig(), - $this->httpDownloader, - $composer->getLoop()->getProcessExecutor(), - $composer->getEventDispatcher() - ); - $composer->setDownloadManager($downloadManager); - - $installationManager = Factory::createInstallationManager($loop, $io, $composer->getEventDispatcher()); - $composer->setInstallationManager($installationManager); - - $factory = new Factory(); - $reflector = new \ReflectionObject($factory); - $method = $reflector->getMethod('createDefaultInstallers'); - $method->setAccessible(true); - $method->invoke($factory, $installationManager, $composer, $io, $composer->getLoop()->getProcessExecutor()); } private function createNewRepositoryManager(Composer $composer, IOInterface $io): RepositoryManager @@ -97,6 +80,48 @@ public function uninstall(Composer $composer, IOInterface $io) */ public function deactivate(Composer $composer, IOInterface $io) { + $downloader = $composer->getLoop()->getHttpDownloader(); + + if ($downloader instanceof HttpDownloaderAdapter) { + $this->setHttpDownloader($composer, $io, $downloader->decorated); + } + } + + /** + * Swaps out the HTTP downloader. + * + * The HTTP downloader is a low-level service used by a lot of things. + * Therefore, we need to reinitialize the main event loop, the download + * manager, and the installation manager for the change to take full effect. + * + * @param \Composer\Composer $composer + * The Composer instance. + * @param \Composer\IO\IOInterface $io + * The I/O object. + * @param \Composer\Util\HttpDownloader $newDownloader + * The new HTTP downloader to swap in. + */ + private function setHttpDownloader(Composer $composer, IOInterface $io, HttpDownloader $newDownloader): void + { + $loop = new Loop($newDownloader, $composer->getLoop()->getProcessExecutor()); + $composer->setLoop($loop); + + $downloadManager = Factory::createDownloadManager($io, $composer->getConfig(), $newDownloader, $loop->getProcessExecutor(), $composer->getEventDispatcher()); + $composer->setDownloadManager($downloadManager); + + $installationManager = Factory::createInstallationManager($loop, $io, $composer->getEventDispatcher()); + $composer->setInstallationManager($installationManager); + + // It sucks to call a protected method, but if we don't do this, package + // installations and updates will fail hard. Hopefully we can fix this + // later if Composer makes Factory::createDefaultInstallers() public. + // @todo Support composer/installers and + // oomphinc/composer-installers-extender as well. + $factory = new Factory(); + $reflector = new \ReflectionObject($factory); + $method = $reflector->getMethod('createDefaultInstallers'); + $method->setAccessible(true); + $method->invoke($factory, $installationManager, $composer, $io, $loop->getProcessExecutor()); } /** From f01e30d224a8ce5b41f72be424da537d77fe155b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 15:29:31 -0400 Subject: [PATCH 11/50] Add UrlMap decorator --- src/FileFetcher.php | 19 ------------ src/HttpDownloaderAdapter.php | 3 +- src/UrlMapDecorator.php | 56 +++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 20 deletions(-) delete mode 100644 src/FileFetcher.php create mode 100644 src/UrlMapDecorator.php diff --git a/src/FileFetcher.php b/src/FileFetcher.php deleted file mode 100644 index 3f3ad5e..0000000 --- a/src/FileFetcher.php +++ /dev/null @@ -1,19 +0,0 @@ -urlMap)) { - return $this->fetchFile($this->urlMap[$fileName], $maxBytes, $options); - } - return parent::fetchTarget($fileName, $maxBytes, $options); - } -} diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index dad608c..3226209 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -93,7 +93,8 @@ public function register(ComposerRepository $repository) } // Instantiate TUF library. - $this->fetchers[$url] = FileFetcher::createFromUri($url); + $fetcher = GuzzleFileFetcher::createFromUri($url); + $this->fetchers[$url] = new UrlMapDecorator($fetcher); $this->instances[$url] = new Updater($this->fetchers[$url], [], new FileStorage($repoPath)); } diff --git a/src/UrlMapDecorator.php b/src/UrlMapDecorator.php new file mode 100644 index 0000000..c24d894 --- /dev/null +++ b/src/UrlMapDecorator.php @@ -0,0 +1,56 @@ +decorated = $decorated; + } + + /** + * {@inheritDoc} + */ + public function fetchMetaData(string $fileName, int $maxBytes, ...$extra): PromiseInterface + { + return $this->decorated->fetchMetaData($fileName, $maxBytes, ...$extra); + } + + /** + * {@inheritDoc} + */ + public function fetchMetaDataIfExists(string $fileName, int $maxBytes, ...$extra): ?string + { + return $this->decorated->fetchMetaDataIfExists($fileName, $maxBytes, ...$extra); + } + + /** + * {@inheritDoc} + */ + public function fetchTarget(string $fileName, int $maxBytes, ...$extra): PromiseInterface + { + return $this->decorated->fetchTarget($this->urlMap[$fileName] ?? $fileName, $maxBytes, ...$extra); + } +} From 42d3241954d5794b7760ec46b0c01e36bbedf290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 15:49:30 -0400 Subject: [PATCH 12/50] Clean up PackageLoader --- src/HttpDownloaderAdapter.php | 51 +++++++++++++++++-- src/PackageLoader.php | 49 ++++++++++++------ .../TufValidatedComposerRepository.php | 2 +- 3 files changed, 81 insertions(+), 21 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 3226209..9889dc6 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -3,6 +3,7 @@ namespace Tuf\ComposerIntegration; use Composer\Downloader\TransportException; +use Composer\Package\BasePackage; use Composer\Repository\ComposerRepository; use Composer\Repository\RepositorySecurityException; use Composer\Util\Filesystem; @@ -73,8 +74,7 @@ public function __construct(HttpDownloader $decorated, string $storagePath) public function register(ComposerRepository $repository) { - $repoConfig = $repository->getRepoConfig(); - $url = $repoConfig['url']; + $url = static::getUrl($repository); // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? // Convert the repo URL into a string that can be used as a @@ -89,6 +89,7 @@ public function register(ComposerRepository $repository) $rootFile = $repoPath . '/root.json'; if (!file_exists($rootFile)) { + $repoConfig = $repository->getRepoConfig(); $fs->copy(realpath($repoConfig['tuf']['root']), $rootFile); } @@ -98,6 +99,46 @@ public function register(ComposerRepository $repository) $this->instances[$url] = new Updater($this->fetchers[$url], [], new FileStorage($repoPath)); } + /** + * Registers a package as a target of an instantiated TUF repository. + * + * This modifies the package's transport options, adding the URL of the TUF + * repository it came from, and the SHA-256 hash of the package's dist URL, + * which is assumed to be the name of the TUF target for the package. + * + * @param \Composer\Package\BasePackage $package + * The package object. + * @param \Composer\Repository\ComposerRepository $repository + * The repository which contains the package. + */ + public function registerPackage(BasePackage $package, ComposerRepository $repository): void + { + $url = $package->getDistUrl(); + $target = hash('sha256', $url); + $repository = static::getUrl($repository); + + $options = $package->getTransportOptions(); + $options['tuf'] = [$repository, $target]; + $package->setTransportOptions($options); + + $this->fetchers[$repository]->urlMap[$target] = $url; + } + + /** + * Returns the URL of a Composer repository. + * + * @param \Composer\Repository\ComposerRepository $repository + * The Composer repository. + * + * @return string + * The repository's URL. + */ + private static function getUrl(ComposerRepository $repository): string + { + $config = $repository->getRepoConfig(); + return $config['url']; + } + /** * Creates a promise for a request. * @@ -153,9 +194,9 @@ private function createPromise(array $request): PromiseInterface throw $e; }; - $repository = $request['options']['tuf']['repository']; - if (isset($request['options']['tuf']['target'])) { - $target = $request['options']['tuf']['target']; + list ($repository) = $request['options']['tuf']; + if (isset($request['options']['tuf'][1])) { + $target = $request['options']['tuf'][1]; } else { $target = parse_url($request['url'], PHP_URL_PATH); $target = ltrim($target, '/'); diff --git a/src/PackageLoader.php b/src/PackageLoader.php index f09b5c7..dccf363 100644 --- a/src/PackageLoader.php +++ b/src/PackageLoader.php @@ -4,37 +4,56 @@ use Composer\Package\Loader\ArrayLoader; use Composer\Package\Version\VersionParser; -use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; +use Composer\Repository\ComposerRepository; +/** + * Defines a package loader that registers packages as TUF targets. + */ class PackageLoader extends ArrayLoader { + /** + * The repository which contains the packages. + * + * @var \Composer\Repository\ComposerRepository + */ private $repository; + + /** + * The TUF-aware HTTP downloader. + * + * @var \Tuf\ComposerIntegration\HttpDownloaderAdapter + */ private $downloader; - public function __construct( - TufValidatedComposerRepository $repository, - HttpDownloaderAdapter $downloader, - VersionParser $parser = null, - $loadOptions = false - ) { + + /** + * PackageLoader constructor. + * + * @param \Composer\Repository\ComposerRepository $repository + * The repository which contains the packages being loaded. + * @param \Tuf\ComposerIntegration\HttpDownloaderAdapter $downloader + * The TUF-aware HTTP downloader. + * @param \Composer\Package\Version\VersionParser|null $parser + * (optional) The version parser. + * @param false $loadOptions + * (optional) I have no idea what this does. Passed to the parent. + */ + public function __construct(ComposerRepository $repository, HttpDownloaderAdapter $downloader, VersionParser $parser = null, $loadOptions = false) + { parent::__construct($parser, $loadOptions); $this->repository = $repository; $this->downloader = $downloader; } + /** + * {@inheritDoc} + */ public function loadPackages(array $versions, $class) { $packages = parent::loadPackages($versions, $class); /** @var \Composer\Package\CompletePackage $package */ foreach ($packages as $package) { - $options = $package->getTransportOptions(); - $options['tuf'] = [ - 'target' => hash('sha256', $package->getDistUrl()), - 'repository' => $this->repository->getRepoConfig()['url'], - ]; - $package->setTransportOptions($options); - - $this->downloader->fetchers[$options['tuf']['repository']]->urlMap[$options['tuf']['target']] = $package->getDistUrl(); + $this->downloader->registerPackage($package, $this->repository); } return $packages; } diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 142e01e..d3beecc 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -17,7 +17,7 @@ class TufValidatedComposerRepository extends ComposerRepository public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloaderAdapter $httpDownloader, EventDispatcher $eventDispatcher = null) { if (!empty($repoConfig['tuf'])) { - $repoConfig['options']['tuf']['repository'] = $repoConfig['url']; + $repoConfig['options']['tuf'] = [$repoConfig['url']]; } parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); if (!empty($repoConfig['tuf'])) { From 5da25384ba01356aacfa0397181946a564af0277 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 15:53:58 -0400 Subject: [PATCH 13/50] Make UrlMapDecorator an ArrayObject --- src/HttpDownloaderAdapter.php | 2 +- src/UrlMapDecorator.php | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 9889dc6..ccbf075 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -121,7 +121,7 @@ public function registerPackage(BasePackage $package, ComposerRepository $reposi $options['tuf'] = [$repository, $target]; $package->setTransportOptions($options); - $this->fetchers[$repository]->urlMap[$target] = $url; + $this->fetchers[$repository][$target] = $url; } /** diff --git a/src/UrlMapDecorator.php b/src/UrlMapDecorator.php index c24d894..66fbcb3 100644 --- a/src/UrlMapDecorator.php +++ b/src/UrlMapDecorator.php @@ -8,7 +8,7 @@ /** * Decorates a file fetcher to map targets to remote URLs. */ -class UrlMapDecorator implements RepoFileFetcherInterface +class UrlMapDecorator extends \ArrayObject implements RepoFileFetcherInterface { /** * The decorated file fetcher. @@ -17,8 +17,6 @@ class UrlMapDecorator implements RepoFileFetcherInterface */ private $decorated; - public $urlMap = []; - /** * UrlMapDecorator constructor. * @@ -51,6 +49,6 @@ public function fetchMetaDataIfExists(string $fileName, int $maxBytes, ...$extra */ public function fetchTarget(string $fileName, int $maxBytes, ...$extra): PromiseInterface { - return $this->decorated->fetchTarget($this->urlMap[$fileName] ?? $fileName, $maxBytes, ...$extra); + return $this->decorated->fetchTarget($this[$fileName] ?? $fileName, $maxBytes, ...$extra); } } From dc0e2c6fa5d34a5db1e9bb38d646315dde71c15d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 16:02:05 -0400 Subject: [PATCH 14/50] Clean up repo parts --- src/Plugin.php | 20 +++++++++------- .../TufValidatedComposerRepository.php | 23 ++++++++----------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/Plugin.php b/src/Plugin.php index 903e71c..5399fbd 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -22,13 +22,10 @@ class Plugin implements PluginInterface */ public function activate(Composer $composer, IOInterface $io) { - $composer->getLoop()->getHttpDownloader()->wait(); - $this->httpDownloader = new HttpDownloaderAdapter( - $composer->getLoop()->getHttpDownloader(), - static::getStoragePath($composer) - ); - - $this->setHttpDownloader($composer, $io, $this->httpDownloader); + $downloader = $composer->getLoop()->getHttpDownloader(); + $downloader->wait(); + $downloader = new HttpDownloaderAdapter($downloader, static::getStoragePath($composer)); + $this->setHttpDownloader($composer, $io, $downloader); // By the time this plugin is activated, several repositories may have // already been instantiated, and we need to convert them to @@ -57,7 +54,14 @@ private function addTufValidationToRepositories(Composer $composer, RepositoryMa { foreach ($composer->getRepositoryManager()->getRepositories() as $repository) { if ($repository instanceof ComposerRepository) { - $repository = new TufValidatedComposerRepository($repository->getRepoConfig(), $io, $composer->getConfig(), $this->httpDownloader, $composer->getEventDispatcher()); + $config = $repository->getRepoConfig(); + + if (isset($config['tuf'])) { + $repository = new TufValidatedComposerRepository($config, $io, $composer->getConfig(), $composer->getLoop()->getHttpDownloader(), $composer->getEventDispatcher()); + } else { + // @todo Usability assessment. Should we output this for other repo types, or not at all? + $io->warning("Authenticity of packages from ${config['url']} are not verified by TUF."); + } } $manager->addRepository($repository); } diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index d3beecc..4ac8b75 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -9,6 +9,9 @@ use Tuf\ComposerIntegration\HttpDownloaderAdapter; use Tuf\ComposerIntegration\PackageLoader; +/** + * Defines a Composer repository that is protected by TUF. + */ class TufValidatedComposerRepository extends ComposerRepository { /** @@ -16,19 +19,13 @@ class TufValidatedComposerRepository extends ComposerRepository */ public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloaderAdapter $httpDownloader, EventDispatcher $eventDispatcher = null) { - if (!empty($repoConfig['tuf'])) { - $repoConfig['options']['tuf'] = [$repoConfig['url']]; - } + $repoConfig['options']['tuf'] = [ + $repoConfig['url'], + ]; parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); - if (!empty($repoConfig['tuf'])) { - $httpDownloader->register($this); - $this->loader = new PackageLoader($this, $httpDownloader, $this->versionParser); - } else { - // Outputting composer repositories not secured by TUF may create confusion about other - // not-secured repository types (eg, "vcs"). - // @todo Usability assessment. Should we output this for other repo types, or not at all? - $io->warning("Authenticity of packages from ${repoConfig['url']} are not verified by TUF."); - } - + // The HTTP downloader manages connections to multiple TUF repositories, + // so it needs to be made aware of this specific one. + $httpDownloader->register($this); + $this->loader = new PackageLoader($this, $httpDownloader, $this->versionParser); } } From b807213713f6457151a89fe3072f023f7002be5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 16:04:57 -0400 Subject: [PATCH 15/50] Fix bad factory invocations --- src/Plugin.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Plugin.php b/src/Plugin.php index 5399fbd..6c511bb 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -110,10 +110,12 @@ private function setHttpDownloader(Composer $composer, IOInterface $io, HttpDown $loop = new Loop($newDownloader, $composer->getLoop()->getProcessExecutor()); $composer->setLoop($loop); - $downloadManager = Factory::createDownloadManager($io, $composer->getConfig(), $newDownloader, $loop->getProcessExecutor(), $composer->getEventDispatcher()); + $factory = new Factory(); + + $downloadManager = $factory->createDownloadManager($io, $composer->getConfig(), $newDownloader, $loop->getProcessExecutor(), $composer->getEventDispatcher()); $composer->setDownloadManager($downloadManager); - $installationManager = Factory::createInstallationManager($loop, $io, $composer->getEventDispatcher()); + $installationManager = $factory->createInstallationManager($loop, $io, $composer->getEventDispatcher()); $composer->setInstallationManager($installationManager); // It sucks to call a protected method, but if we don't do this, package @@ -121,7 +123,6 @@ private function setHttpDownloader(Composer $composer, IOInterface $io, HttpDown // later if Composer makes Factory::createDefaultInstallers() public. // @todo Support composer/installers and // oomphinc/composer-installers-extender as well. - $factory = new Factory(); $reflector = new \ReflectionObject($factory); $method = $reflector->getMethod('createDefaultInstallers'); $method->setAccessible(true); From afa3491ecf37ee0f679c75509a8eabe324a33f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 16:14:38 -0400 Subject: [PATCH 16/50] Document repo constructor logic --- src/Repository/TufValidatedComposerRepository.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 4ac8b75..c2faee6 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -19,13 +19,22 @@ class TufValidatedComposerRepository extends ComposerRepository */ public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloaderAdapter $httpDownloader, EventDispatcher $eventDispatcher = null) { + // Ensure that all HTTP requests made by the parent class will identify + // which TUF repository they're associated with. The TUF-aware HTTP + // downloader keeps track of all instantiated TUF repositories and + // identifies them by their URL. We need to do this before calling the + // parent constructor because the options are stored in a private + // property. + // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::register() + // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::createPromise() $repoConfig['options']['tuf'] = [ $repoConfig['url'], ]; parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); - // The HTTP downloader manages connections to multiple TUF repositories, - // so it needs to be made aware of this specific one. + // Make the HTTP downloader aware of this repository. $httpDownloader->register($this); + // The parent constructor sets up a package loader, so we need to + // override that with our TUF-aware one. $this->loader = new PackageLoader($this, $httpDownloader, $this->versionParser); } } From 229cbd47f49e8d538a03be4904c9f390fba9b136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 19:44:09 -0400 Subject: [PATCH 17/50] Minor cleanup in HttpDownloader --- src/HttpDownloaderAdapter.php | 50 +++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index ccbf075..877b168 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -24,15 +24,30 @@ * Provides a TUF-aware adapter for Composer's HTTP downloader. * * This class extends \Composer\Util\HttpDownloader in order to satisfy type - * hints, but decorates an existing instance in order to preserve the state of - * the HTTP downloader used by Composer's loop. + * hints, but decorates an existing instance in order to preserve as much state + * as possible. */ class HttpDownloaderAdapter extends HttpDownloader { + /** + * The decorated HTTP downloader. + * + * @var \Composer\Util\HttpDownloader + */ public $decorated; + /** + * The instantiated TUF repositories, keyed by URL. + * + * @var Updater[] + */ private $instances = []; + /** + * The instantiated TUF file fetchers, keyed by repository URL. + * + * @var \Tuf\Client\RepoFileFetcherInterface[] + */ public $fetchers = []; /** @@ -54,22 +69,25 @@ class HttpDownloaderAdapter extends HttpDownloader private $queue; /** - * An aggregated promise to settle the queued promises asynchronously. - * - * @var \GuzzleHttp\Promise\EachPromise + * The number of pending promises. * - * @see ::countActiveJobs() + * @var int */ - private $aggregator; - private $activeJobs = 0; + /** + * HttpDownloaderAdapter constructor. + * + * @param \Composer\Util\HttpDownloader $decorated + * The decorated HTTP downloader. + * @param string $storagePath + * The path where TUF data should be persisted. + */ public function __construct(HttpDownloader $decorated, string $storagePath) { $this->decorated = $decorated; $this->storagePath = $storagePath; $this->queue = new \ArrayIterator(); - $this->aggregator = new EachPromise($this->queue, ['concurrency' => 12]); } public function register(ComposerRepository $repository) @@ -77,13 +95,13 @@ public function register(ComposerRepository $repository) $url = static::getUrl($repository); // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? - // Convert the repo URL into a string that can be used as a - // directory name. + // Use the repository URL to derive a path where we can persist the TUF + // data. $repoPath = implode(DIRECTORY_SEPARATOR, [ $this->storagePath, preg_replace('/[^[:alnum:]\.]/', '-', $url), ]); - // Ensure directory exists. + $fs = new Filesystem(); $fs->ensureDirectoryExists($repoPath); @@ -93,9 +111,7 @@ public function register(ComposerRepository $repository) $fs->copy(realpath($repoConfig['tuf']['root']), $rootFile); } - // Instantiate TUF library. - $fetcher = GuzzleFileFetcher::createFromUri($url); - $this->fetchers[$url] = new UrlMapDecorator($fetcher); + $this->fetchers[$url] = new UrlMapDecorator(GuzzleFileFetcher::createFromUri($url)); $this->instances[$url] = new Updater($this->fetchers[$url], [], new FileStorage($repoPath)); } @@ -317,8 +333,8 @@ public function enableAsync() public function countActiveJobs($index = null) { $this->clearSettledPromises(); - $this->aggregator = new EachPromise($this->queue, ['concurrency' => 12]); - $this->aggregator->promise()->wait(); + $aggregate = new EachPromise($this->queue, ['concurrency' => 12]); + $aggregate->promise()->wait(); return $this->activeJobs + $this->decorated->countActiveJobs($index); } From acbb3ff91a4304c259b384063c131a5f625dc8b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 21:00:44 -0400 Subject: [PATCH 18/50] Use array for promise queue --- src/HttpDownloaderAdapter.php | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 877b168..ac266aa 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -10,7 +10,6 @@ use Composer\Util\Http\Response; use Composer\Util\HttpDownloader; use GuzzleHttp\Promise\EachPromise; -use GuzzleHttp\Promise\Is; use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\RequestOptions; use Psr\Http\Message\StreamInterface; @@ -62,11 +61,11 @@ class HttpDownloaderAdapter extends HttpDownloader /** * A queue of promises to settle asynchronously. * - * @var \ArrayIterator + * @var \GuzzleHttp\Promise\PromiseInterface[] * * @see ::countActiveJobs() */ - private $queue; + private $queue = []; /** * The number of pending promises. @@ -87,7 +86,6 @@ public function __construct(HttpDownloader $decorated, string $storagePath) { $this->decorated = $decorated; $this->storagePath = $storagePath; - $this->queue = new \ArrayIterator(); } public function register(ComposerRepository $repository) @@ -280,9 +278,8 @@ public function addCopy($url, $to, $options = array()) private function createQueuedPromise(array $request): PromiseInterface { - $promise = $this->createPromise($request); - $this->queue->append($promise); - return $promise; + array_push($this->queue, $this->createPromise($request)); + return end($this->queue); } /** @@ -332,18 +329,9 @@ public function enableAsync() */ public function countActiveJobs($index = null) { - $this->clearSettledPromises(); + $this->queue = array_filter($this->queue, '\GuzzleHttp\Promise\Is::pending'); $aggregate = new EachPromise($this->queue, ['concurrency' => 12]); $aggregate->promise()->wait(); return $this->activeJobs + $this->decorated->countActiveJobs($index); } - - private function clearSettledPromises(): void - { - foreach ($this->queue as $key => $promise) { - if (Is::settled($promise)) { - unset($this->queue[$key]); - } - } - } } From 544703d2fa88b70f7daca009078adbbe90125035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 19 Mar 2021 21:03:54 -0400 Subject: [PATCH 19/50] Add accessor for decorated downloader --- src/HttpDownloaderAdapter.php | 27 ++++++++++++++++----------- src/Plugin.php | 2 +- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index ac266aa..e26b665 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -33,7 +33,7 @@ class HttpDownloaderAdapter extends HttpDownloader * * @var \Composer\Util\HttpDownloader */ - public $decorated; + private $decorated; /** * The instantiated TUF repositories, keyed by URL. @@ -88,6 +88,11 @@ public function __construct(HttpDownloader $decorated, string $storagePath) $this->storagePath = $storagePath; } + public function getDecorated(): HttpDownloader + { + return $this->decorated; + } + public function register(ComposerRepository $repository) { $url = static::getUrl($repository); @@ -229,7 +234,7 @@ public function get($url, $options = array()) if (isset($options['tuf'])) { return $this->add($url, $options)->wait(); } else { - return $this->decorated->get($url, $options); + return $this->getDecorated()->get($url, $options); } } @@ -244,7 +249,7 @@ public function add($url, $options = array()) 'options' => $options, ]); } else { - return $this->decorated->add($url, $options); + return $this->getDecorated()->add($url, $options); } } @@ -256,7 +261,7 @@ public function copy($url, $to, $options = array()) if (isset($options['tuf'])) { return $this->addCopy($url, $to, $options)->wait(); } else { - return $this->decorated->copy($url, $to, $options); + return $this->getDecorated()->copy($url, $to, $options); } } @@ -272,7 +277,7 @@ public function addCopy($url, $to, $options = array()) 'copyTo' => $to, ]); } else { - return $this->decorated->addCopy($url, $to, $options); + return $this->getDecorated()->addCopy($url, $to, $options); } } @@ -287,7 +292,7 @@ private function createQueuedPromise(array $request): PromiseInterface */ public function getOptions() { - return $this->decorated->getOptions(); + return $this->getDecorated()->getOptions(); } /** @@ -295,7 +300,7 @@ public function getOptions() */ public function setOptions(array $options) { - return $this->decorated->setOptions($options); + return $this->getDecorated()->setOptions($options); } /** @@ -304,7 +309,7 @@ public function setOptions(array $options) public function markJobDone() { $this->activeJobs--; - return $this->decorated->markJobDone(); + return $this->getDecorated()->markJobDone(); } /** @@ -313,7 +318,7 @@ public function markJobDone() public function wait($index = null) { parent::wait($index); - return $this->decorated->wait($index); + return $this->getDecorated()->wait($index); } /** @@ -321,7 +326,7 @@ public function wait($index = null) */ public function enableAsync() { - return $this->decorated->enableAsync(); + return $this->getDecorated()->enableAsync(); } /** @@ -332,6 +337,6 @@ public function countActiveJobs($index = null) $this->queue = array_filter($this->queue, '\GuzzleHttp\Promise\Is::pending'); $aggregate = new EachPromise($this->queue, ['concurrency' => 12]); $aggregate->promise()->wait(); - return $this->activeJobs + $this->decorated->countActiveJobs($index); + return $this->activeJobs + $this->getDecorated()->countActiveJobs($index); } } diff --git a/src/Plugin.php b/src/Plugin.php index 6c511bb..6d101f7 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -87,7 +87,7 @@ public function deactivate(Composer $composer, IOInterface $io) $downloader = $composer->getLoop()->getHttpDownloader(); if ($downloader instanceof HttpDownloaderAdapter) { - $this->setHttpDownloader($composer, $io, $downloader->decorated); + $this->setHttpDownloader($composer, $io, $downloader->getDecorated()); } } From 3a9ad576d23e263b331bf3a76f423e2f2d73d724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 22 Mar 2021 11:56:22 -0400 Subject: [PATCH 20/50] Use event to handle processed URL --- src/HttpDownloaderAdapter.php | 44 +++++-------------- src/PackageLoader.php | 31 ++++++------- src/Plugin.php | 35 ++++++++++++++- .../TufValidatedComposerRepository.php | 2 +- 4 files changed, 59 insertions(+), 53 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index e26b665..abc13a6 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -3,7 +3,7 @@ namespace Tuf\ComposerIntegration; use Composer\Downloader\TransportException; -use Composer\Package\BasePackage; +use Composer\Package\PackageInterface; use Composer\Repository\ComposerRepository; use Composer\Repository\RepositorySecurityException; use Composer\Util\Filesystem; @@ -95,7 +95,8 @@ public function getDecorated(): HttpDownloader public function register(ComposerRepository $repository) { - $url = static::getUrl($repository); + $config = $repository->getRepoConfig(); + $url = $config['url']; // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? // Use the repository URL to derive a path where we can persist the TUF @@ -119,45 +120,22 @@ public function register(ComposerRepository $repository) } /** - * Registers a package as a target of an instantiated TUF repository. - * - * This modifies the package's transport options, adding the URL of the TUF - * repository it came from, and the SHA-256 hash of the package's dist URL, - * which is assumed to be the name of the TUF target for the package. + * Associates a TUF-validated package with a specific URL. * - * @param \Composer\Package\BasePackage $package + * @param \Composer\Package\PackageInterface $package * The package object. - * @param \Composer\Repository\ComposerRepository $repository - * The repository which contains the package. + * @param string $url + * The URL from which the package should be downloaded. + * + * @see \Tuf\ComposerIntegration\PackageLoader::loadPackages() */ - public function registerPackage(BasePackage $package, ComposerRepository $repository): void + public function setPackageUrl(PackageInterface $package, string $url): void { - $url = $package->getDistUrl(); - $target = hash('sha256', $url); - $repository = static::getUrl($repository); - $options = $package->getTransportOptions(); - $options['tuf'] = [$repository, $target]; - $package->setTransportOptions($options); - + list ($repository, $target) = $options['tuf']; $this->fetchers[$repository][$target] = $url; } - /** - * Returns the URL of a Composer repository. - * - * @param \Composer\Repository\ComposerRepository $repository - * The Composer repository. - * - * @return string - * The repository's URL. - */ - private static function getUrl(ComposerRepository $repository): string - { - $config = $repository->getRepoConfig(); - return $config['url']; - } - /** * Creates a promise for a request. * diff --git a/src/PackageLoader.php b/src/PackageLoader.php index dccf363..bcf09cb 100644 --- a/src/PackageLoader.php +++ b/src/PackageLoader.php @@ -12,36 +12,26 @@ class PackageLoader extends ArrayLoader { /** - * The repository which contains the packages. + * The URL of the repository which contains the packages. * - * @var \Composer\Repository\ComposerRepository + * @var string */ - private $repository; - - /** - * The TUF-aware HTTP downloader. - * - * @var \Tuf\ComposerIntegration\HttpDownloaderAdapter - */ - private $downloader; + private $url; /** * PackageLoader constructor. * - * @param \Composer\Repository\ComposerRepository $repository - * The repository which contains the packages being loaded. - * @param \Tuf\ComposerIntegration\HttpDownloaderAdapter $downloader - * The TUF-aware HTTP downloader. + * @param string $repository + * The URL of the repository which contains the packages being loaded. * @param \Composer\Package\Version\VersionParser|null $parser * (optional) The version parser. * @param false $loadOptions * (optional) I have no idea what this does. Passed to the parent. */ - public function __construct(ComposerRepository $repository, HttpDownloaderAdapter $downloader, VersionParser $parser = null, $loadOptions = false) + public function __construct(string $url, VersionParser $parser = null, $loadOptions = false) { parent::__construct($parser, $loadOptions); - $this->repository = $repository; - $this->downloader = $downloader; + $this->url = $url; } /** @@ -53,7 +43,12 @@ public function loadPackages(array $versions, $class) /** @var \Composer\Package\CompletePackage $package */ foreach ($packages as $package) { - $this->downloader->registerPackage($package, $this->repository); + $options = $package->getTransportOptions(); + $options['tuf'] = [ + $this->url, + hash('sha256', $package->getDistUrl()), + ]; + $package->setTransportOptions($options); } return $packages; } diff --git a/src/Plugin.php b/src/Plugin.php index 6d101f7..7df41c5 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -3,10 +3,13 @@ namespace Tuf\ComposerIntegration; use Composer\Composer; +use Composer\EventDispatcher\EventSubscriberInterface; use Composer\Factory; use Composer\Installer\LibraryInstaller; use Composer\IO\IOInterface; +use Composer\Plugin\PluginEvents; use Composer\Plugin\PluginInterface; +use Composer\Plugin\PreFileDownloadEvent; use Composer\Repository\ComposerRepository; use Composer\Repository\RepositoryFactory; use Composer\Repository\RepositoryManager; @@ -15,8 +18,38 @@ use Composer\Util\Loop; use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; -class Plugin implements PluginInterface +class Plugin implements PluginInterface, EventSubscriberInterface { + /** + * {@inheritDoc} + */ + public static function getSubscribedEvents() + { + return [ + PluginEvents::PRE_FILE_DOWNLOAD => ['preFileDownload', -1000], + ]; + } + + /** + * Reacts when a package is about to be downloaded. + * + * @param \Composer\Plugin\PreFileDownloadEvent $event + * The event object. + */ + public function preFileDownload(PreFileDownloadEvent $event): void + { + if ($event->getType() === 'package') { + /** @var \Composer\Package\PackageInterface $package */ + $package = $event->getContext(); + // If the package is protected by TUF, its repository URL and target + // key should have been set by + // \Tuf\ComposerIntegration\PackageLoader::loadPackages(). + if (array_key_exists('tuf', $package->getTransportOptions())) { + $event->getHttpDownloader()->setPackageUrl($package, $event->getProcessedUrl()); + } + } + } + /** * {@inheritDoc} */ diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index c2faee6..509ff19 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -35,6 +35,6 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, $httpDownloader->register($this); // The parent constructor sets up a package loader, so we need to // override that with our TUF-aware one. - $this->loader = new PackageLoader($this, $httpDownloader, $this->versionParser); + $this->loader = new PackageLoader($repoConfig['url'], $this->versionParser); } } From ce80bf820e20e8b9071a81a555865418310a0b77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 22 Mar 2021 12:49:11 -0400 Subject: [PATCH 21/50] A bit of documentation --- src/HttpDownloaderAdapter.php | 10 +++++++++- src/PackageLoader.php | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index abc13a6..28659bd 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -25,6 +25,14 @@ * This class extends \Composer\Util\HttpDownloader in order to satisfy type * hints, but decorates an existing instance in order to preserve as much state * as possible. + * + * By "TUF-aware", I mean this class knows about all instantiated TUF + * repositories, and knows to delegate certain HTTP requests to TUF, which will + * transparently do whatever downloading and verification is needed. The + * expected flow is that a TUF-aware Composer repository will call this class' + * ::register() method, which will create a TUF repository object corresponding + * to that Composer repository. Then later on, individual packages can associate + * a TUF target key with an arbitrary URL by calling ::setPackageUrl(). */ class HttpDownloaderAdapter extends HttpDownloader { @@ -47,7 +55,7 @@ class HttpDownloaderAdapter extends HttpDownloader * * @var \Tuf\Client\RepoFileFetcherInterface[] */ - public $fetchers = []; + private $fetchers = []; /** * The base path where persistent TUF data should be stored. diff --git a/src/PackageLoader.php b/src/PackageLoader.php index bcf09cb..0c1ba49 100644 --- a/src/PackageLoader.php +++ b/src/PackageLoader.php @@ -44,6 +44,11 @@ public function loadPackages(array $versions, $class) /** @var \Composer\Package\CompletePackage $package */ foreach ($packages as $package) { $options = $package->getTransportOptions(); + // In order for the TUF-aware HTTP downloader to grab this package, + // we need to store the URL of the repository and the package's + // target key (as known to TUF). We need to store these in a way + // that can be serialized to and from JSON, since this will be + // stored in the lock file. $options['tuf'] = [ $this->url, hash('sha256', $package->getDistUrl()), From dfa02547d2ec8121c198d3353e9a22ec6068a1c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 22 Mar 2021 15:11:13 -0400 Subject: [PATCH 22/50] Rename register() to addRepository() --- src/HttpDownloaderAdapter.php | 5 ++++- src/Plugin.php | 2 ++ src/Repository/TufValidatedComposerRepository.php | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 28659bd..00198d9 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -101,7 +101,7 @@ public function getDecorated(): HttpDownloader return $this->decorated; } - public function register(ComposerRepository $repository) + public function addRepository(ComposerRepository $repository) { $config = $repository->getRepoConfig(); $url = $config['url']; @@ -117,6 +117,9 @@ public function register(ComposerRepository $repository) $fs = new Filesystem(); $fs->ensureDirectoryExists($repoPath); + // We expect the repository to have a root metadata file in a known + // good state. Copy that file to our persistent storage location if + // it doesn't already exist. $rootFile = $repoPath . '/root.json'; if (!file_exists($rootFile)) { $repoConfig = $repository->getRepoConfig(); diff --git a/src/Plugin.php b/src/Plugin.php index 7df41c5..3b93e78 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -55,6 +55,8 @@ public function preFileDownload(PreFileDownloadEvent $event): void */ public function activate(Composer $composer, IOInterface $io) { + // Finish any pending transfers, then swap out the HTTP downloader with + // a TUF-aware one. $downloader = $composer->getLoop()->getHttpDownloader(); $downloader->wait(); $downloader = new HttpDownloaderAdapter($downloader, static::getStoragePath($composer)); diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 509ff19..6353b1f 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -32,7 +32,7 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, ]; parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); // Make the HTTP downloader aware of this repository. - $httpDownloader->register($this); + $httpDownloader->addRepository($this); // The parent constructor sets up a package loader, so we need to // override that with our TUF-aware one. $this->loader = new PackageLoader($repoConfig['url'], $this->versionParser); From 40f81197fb400aae42d6f48bcbf5f6ffbf2aaf84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 22 Mar 2021 16:09:25 -0400 Subject: [PATCH 23/50] Docs --- src/HttpDownloaderAdapter.php | 5 +++++ src/Plugin.php | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 00198d9..8867b5a 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -133,6 +133,11 @@ public function addRepository(ComposerRepository $repository) /** * Associates a TUF-validated package with a specific URL. * + * It is assumed that the package's transport options include an indexed + * array of information needed by TUF. In order: + * - The URL of the repository. + * - The target key, as known to TUF. + * * @param \Composer\Package\PackageInterface $package * The package object. * @param string $url diff --git a/src/Plugin.php b/src/Plugin.php index 3b93e78..525fbed 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -33,6 +33,14 @@ public static function getSubscribedEvents() /** * Reacts when a package is about to be downloaded. * + * Note that this event handler is undebuggable due to some inexplicable + * bananapantsing in Composer's plugin manager. It copies the code of this + * class, renames it, and evals it into existence...which means it's not + * debuggable, since the code doesn't concretely exist in a place where + * Xdebug can find it. Dafuq! (See + * \Composer\Plugin\PluginManager::registerPackage() if you don't believe + * me.) + * * @param \Composer\Plugin\PreFileDownloadEvent $event * The event object. */ From 3e05b00144ff78c54f886e7a078db569358523ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 07:46:20 -0400 Subject: [PATCH 24/50] Tiny fixes --- src/HttpDownloaderAdapter.php | 2 +- src/Repository/TufValidatedComposerRepository.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 8867b5a..3fb2ce3 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -197,7 +197,7 @@ private function createPromise(array $request): PromiseInterface // If the promise gets rejected because it's a 404, convert that to a // \Composer\Downloader\TransportException like the regular // HttpDownloader would produce. - $reject = function (\Throwable $e) use ($request) { + $reject = function (\Throwable $e) { $this->markJobDone(); if ($e instanceof \InvalidArgumentException || $e instanceof RepoFileNotFound) { diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 6353b1f..0a3e211 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -25,7 +25,7 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, // identifies them by their URL. We need to do this before calling the // parent constructor because the options are stored in a private // property. - // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::register() + // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::addRepository() // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::createPromise() $repoConfig['options']['tuf'] = [ $repoConfig['url'], From 392618e6eed684ce020738ac6b628fe2d6b45db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 08:02:57 -0400 Subject: [PATCH 25/50] Use package name and version to identify targets --- src/HttpDownloaderAdapter.php | 23 ++++++++++++++++------- src/PackageLoader.php | 2 +- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 3fb2ce3..4e2e108 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -22,17 +22,18 @@ /** * Provides a TUF-aware adapter for Composer's HTTP downloader. * - * This class extends \Composer\Util\HttpDownloader in order to satisfy type - * hints, but decorates an existing instance in order to preserve as much state - * as possible. - * * By "TUF-aware", I mean this class knows about all instantiated TUF * repositories, and knows to delegate certain HTTP requests to TUF, which will * transparently do whatever downloading and verification is needed. The * expected flow is that a TUF-aware Composer repository will call this class' - * ::register() method, which will create a TUF repository object corresponding - * to that Composer repository. Then later on, individual packages can associate - * a TUF target key with an arbitrary URL by calling ::setPackageUrl(). + * ::addRepository() method, which will create a TUF repository object + * corresponding to that Composer repository. Then later on, individual packages + * from that repository can associate a TUF target key with an arbitrary URL by + * calling ::setPackageUrl(), which is done by the plugin's preFileDownload() + * event handler. + * + * This class extends \Composer\Util\HttpDownloader to satisfy type hints, but + * decorates an existing instance to preserve as much state as possible. */ class HttpDownloaderAdapter extends HttpDownloader { @@ -79,6 +80,8 @@ class HttpDownloaderAdapter extends HttpDownloader * The number of pending promises. * * @var int + * + * @see ::countActiveJobs() */ private $activeJobs = 0; @@ -96,6 +99,12 @@ public function __construct(HttpDownloader $decorated, string $storagePath) $this->storagePath = $storagePath; } + /** + * Returns the decorated HTTP downloader. + * + * @return \Composer\Util\HttpDownloader + * The HTTP downloader that this class is decorating. + */ public function getDecorated(): HttpDownloader { return $this->decorated; diff --git a/src/PackageLoader.php b/src/PackageLoader.php index 0c1ba49..bc1b9f7 100644 --- a/src/PackageLoader.php +++ b/src/PackageLoader.php @@ -51,7 +51,7 @@ public function loadPackages(array $versions, $class) // stored in the lock file. $options['tuf'] = [ $this->url, - hash('sha256', $package->getDistUrl()), + $package->getName() . '/' . $package->getVersion(), ]; $package->setTransportOptions($options); } From a1f547e5910f86bdc5d4277810546d08b2f67117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 12:50:23 -0400 Subject: [PATCH 26/50] Document addRepository() --- src/HttpDownloaderAdapter.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 4e2e108..08d9b26 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -110,7 +110,19 @@ public function getDecorated(): HttpDownloader return $this->decorated; } - public function addRepository(ComposerRepository $repository) + /** + * Registers a Composer repository with TUF. + * + * If needed, this will create a local directory to store TUF metadata for + * the repository. A trusted root metadata file in a known good state is + * expected to exist locally, and will be copied into the created directory. + * + * @param \Composer\Repository\ComposerRepository $repository + * The Composer repository. + * + * @return void + */ + public function addRepository(ComposerRepository $repository): void { $config = $repository->getRepoConfig(); $url = $config['url']; @@ -131,8 +143,7 @@ public function addRepository(ComposerRepository $repository) // it doesn't already exist. $rootFile = $repoPath . '/root.json'; if (!file_exists($rootFile)) { - $repoConfig = $repository->getRepoConfig(); - $fs->copy(realpath($repoConfig['tuf']['root']), $rootFile); + $fs->copy(realpath($config['tuf']['root']), $rootFile); } $this->fetchers[$url] = new UrlMapDecorator(GuzzleFileFetcher::createFromUri($url)); From 82a457a018ad21e611a4f94123205f165c97704d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 14:49:38 -0400 Subject: [PATCH 27/50] Remove UrlMapDecorator --- src/HttpDownloaderAdapter.php | 16 ++++++++--- src/UrlMapDecorator.php | 54 ----------------------------------- 2 files changed, 12 insertions(+), 58 deletions(-) delete mode 100644 src/UrlMapDecorator.php diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 08d9b26..395f8da 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -85,6 +85,13 @@ class HttpDownloaderAdapter extends HttpDownloader */ private $activeJobs = 0; + /** + * Target URLs, grouped by repository URL and keyed by target. + * + * @var array[] + */ + private $targets = []; + /** * HttpDownloaderAdapter constructor. * @@ -146,7 +153,7 @@ public function addRepository(ComposerRepository $repository): void $fs->copy(realpath($config['tuf']['root']), $rootFile); } - $this->fetchers[$url] = new UrlMapDecorator(GuzzleFileFetcher::createFromUri($url)); + $this->fetchers[$url] = new GuzzleFileFetcher::createFromUri($url); $this->instances[$url] = new Updater($this->fetchers[$url], [], new FileStorage($repoPath)); } @@ -169,7 +176,7 @@ public function setPackageUrl(PackageInterface $package, string $url): void { $options = $package->getTransportOptions(); list ($repository, $target) = $options['tuf']; - $this->fetchers[$repository][$target] = $url; + $this->targets[$repository][$target] = $url; } /** @@ -236,8 +243,9 @@ private function createPromise(array $request): PromiseInterface } $this->activeJobs++; - $tuf = $this->instances[$repository]; - return $tuf->download($target, $fetcherOptions)->then($accept, $reject); + return $this->instances[$repository] + ->download($target, $fetcherOptions, $this->targets[$repository][$target] ?? null) + ->then($accept, $reject); } /** diff --git a/src/UrlMapDecorator.php b/src/UrlMapDecorator.php deleted file mode 100644 index 66fbcb3..0000000 --- a/src/UrlMapDecorator.php +++ /dev/null @@ -1,54 +0,0 @@ -decorated = $decorated; - } - - /** - * {@inheritDoc} - */ - public function fetchMetaData(string $fileName, int $maxBytes, ...$extra): PromiseInterface - { - return $this->decorated->fetchMetaData($fileName, $maxBytes, ...$extra); - } - - /** - * {@inheritDoc} - */ - public function fetchMetaDataIfExists(string $fileName, int $maxBytes, ...$extra): ?string - { - return $this->decorated->fetchMetaDataIfExists($fileName, $maxBytes, ...$extra); - } - - /** - * {@inheritDoc} - */ - public function fetchTarget(string $fileName, int $maxBytes, ...$extra): PromiseInterface - { - return $this->decorated->fetchTarget($this[$fileName] ?? $fileName, $maxBytes, ...$extra); - } -} From ab61dd0bd2052b366059f4958eafb0987ef47853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 14:56:51 -0400 Subject: [PATCH 28/50] Fix bad invocation --- src/HttpDownloaderAdapter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 395f8da..59ee77f 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -153,7 +153,7 @@ public function addRepository(ComposerRepository $repository): void $fs->copy(realpath($config['tuf']['root']), $rootFile); } - $this->fetchers[$url] = new GuzzleFileFetcher::createFromUri($url); + $this->fetchers[$url] = GuzzleFileFetcher::createFromUri($url); $this->instances[$url] = new Updater($this->fetchers[$url], [], new FileStorage($repoPath)); } From f0c57d667ecd5be19dfce848071698c851b2e50b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 15:03:34 -0400 Subject: [PATCH 29/50] Always queue our promises --- src/HttpDownloaderAdapter.php | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 59ee77f..b2b0cb0 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -243,9 +243,10 @@ private function createPromise(array $request): PromiseInterface } $this->activeJobs++; - return $this->instances[$repository] + $this->queue[] = $this->instances[$repository] ->download($target, $fetcherOptions, $this->targets[$repository][$target] ?? null) ->then($accept, $reject); + return end($this->queue); } /** @@ -266,7 +267,7 @@ public function get($url, $options = array()) public function add($url, $options = array()) { if (isset($options['tuf'])) { - return $this->createQueuedPromise([ + return $this->createPromise([ 'url' => $url, 'options' => $options, ]); @@ -293,7 +294,7 @@ public function copy($url, $to, $options = array()) public function addCopy($url, $to, $options = array()) { if (isset($options['tuf'])) { - return $this->createQueuedPromise([ + return $this->createPromise([ 'url' => $url, 'options' => $options, 'copyTo' => $to, @@ -303,12 +304,6 @@ public function addCopy($url, $to, $options = array()) } } - private function createQueuedPromise(array $request): PromiseInterface - { - array_push($this->queue, $this->createPromise($request)); - return end($this->queue); - } - /** * {@inheritDoc} */ @@ -322,7 +317,7 @@ public function getOptions() */ public function setOptions(array $options) { - return $this->getDecorated()->setOptions($options); + $this->getDecorated()->setOptions($options); } /** @@ -331,7 +326,7 @@ public function setOptions(array $options) public function markJobDone() { $this->activeJobs--; - return $this->getDecorated()->markJobDone(); + $this->getDecorated()->markJobDone(); } /** @@ -340,7 +335,7 @@ public function markJobDone() public function wait($index = null) { parent::wait($index); - return $this->getDecorated()->wait($index); + $this->getDecorated()->wait($index); } /** @@ -348,7 +343,7 @@ public function wait($index = null) */ public function enableAsync() { - return $this->getDecorated()->enableAsync(); + $this->getDecorated()->enableAsync(); } /** From c03fab6b02458ead97b8df0c4f3009f016b7729c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 15:11:06 -0400 Subject: [PATCH 30/50] Remove unnecessary use --- src/Plugin.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Plugin.php b/src/Plugin.php index 525fbed..a463319 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -5,7 +5,6 @@ use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\Factory; -use Composer\Installer\LibraryInstaller; use Composer\IO\IOInterface; use Composer\Plugin\PluginEvents; use Composer\Plugin\PluginInterface; From 1aaf0230edf541db1bf3d3ab41d08ec1b7030551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Tue, 23 Mar 2021 17:48:41 -0400 Subject: [PATCH 31/50] Address Ted feedback --- src/HttpDownloaderAdapter.php | 42 +++++++++++++++++++---------------- src/PackageLoader.php | 4 ++-- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index b2b0cb0..f9ac9c0 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -2,6 +2,7 @@ namespace Tuf\ComposerIntegration; +use Composer\Downloader\FilesystemException; use Composer\Downloader\TransportException; use Composer\Package\PackageInterface; use Composer\Repository\ComposerRepository; @@ -49,14 +50,7 @@ class HttpDownloaderAdapter extends HttpDownloader * * @var Updater[] */ - private $instances = []; - - /** - * The instantiated TUF file fetchers, keyed by repository URL. - * - * @var \Tuf\Client\RepoFileFetcherInterface[] - */ - private $fetchers = []; + private $tufUpdaters = []; /** * The base path where persistent TUF data should be stored. @@ -120,13 +114,18 @@ public function getDecorated(): HttpDownloader /** * Registers a Composer repository with TUF. * - * If needed, this will create a local directory to store TUF metadata for - * the repository. A trusted root metadata file in a known good state is - * expected to exist locally, and will be copied into the created directory. + * This will create a local directory to store TUF metadata for the + * the repository, if it doesn't already exit. A trusted root metadata file + * in a known good state is expected to exist locally, and will be copied + * into the created directory. * * @param \Composer\Repository\ComposerRepository $repository * The Composer repository. * + * @throws \Composer\Downloader\FilesystemException + * Thrown if the root metadata file can't be copied into the metadata + * directory. + * * @return void */ public function addRepository(ComposerRepository $repository): void @@ -150,11 +149,14 @@ public function addRepository(ComposerRepository $repository): void // it doesn't already exist. $rootFile = $repoPath . '/root.json'; if (!file_exists($rootFile)) { - $fs->copy(realpath($config['tuf']['root']), $rootFile); + $sourcePath = realpath($config['tuf']['root']); + if (!$fs->copy($sourcePath, $rootFile)) { + throw new FilesystemException("Could not copy '$sourcePath' to '$rootFile"); + } } - $this->fetchers[$url] = GuzzleFileFetcher::createFromUri($url); - $this->instances[$url] = new Updater($this->fetchers[$url], [], new FileStorage($repoPath)); + $fetcher = GuzzleFileFetcher::createFromUri($url); + $this->tufUpdaters[$url] = new Updater($fetcher, [], new FileStorage($repoPath)); } /** @@ -175,7 +177,9 @@ public function addRepository(ComposerRepository $repository): void public function setPackageUrl(PackageInterface $package, string $url): void { $options = $package->getTransportOptions(); - list ($repository, $target) = $options['tuf']; + $tuf = $options['tuf']; + $repository = $tuf['repository']; + $target = $tuf['target']; $this->targets[$repository][$target] = $url; } @@ -234,16 +238,16 @@ private function createPromise(array $request): PromiseInterface throw $e; }; - list ($repository) = $request['options']['tuf']; - if (isset($request['options']['tuf'][1])) { - $target = $request['options']['tuf'][1]; + $repository = $request['options']['tuf']['repository']; + if (isset($request['options']['tuf']['target'])) { + $target = $request['options']['tuf']['target']; } else { $target = parse_url($request['url'], PHP_URL_PATH); $target = ltrim($target, '/'); } $this->activeJobs++; - $this->queue[] = $this->instances[$repository] + $this->queue[] = $this->tufUpdaters[$repository] ->download($target, $fetcherOptions, $this->targets[$repository][$target] ?? null) ->then($accept, $reject); return end($this->queue); diff --git a/src/PackageLoader.php b/src/PackageLoader.php index bc1b9f7..5f54011 100644 --- a/src/PackageLoader.php +++ b/src/PackageLoader.php @@ -50,8 +50,8 @@ public function loadPackages(array $versions, $class) // that can be serialized to and from JSON, since this will be // stored in the lock file. $options['tuf'] = [ - $this->url, - $package->getName() . '/' . $package->getVersion(), + 'repository' => $this->url, + 'target' => $package->getName() . '/' . $package->getVersion(), ]; $package->setTransportOptions($options); } From 8908000fe6dc56501157f6f6455b063284d46eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 1 Apr 2021 09:52:01 -0400 Subject: [PATCH 32/50] Handle HTTP headers and fix a bug --- src/HttpDownloaderAdapter.php | 12 ++++++++++++ src/Repository/TufValidatedComposerRepository.php | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index f9ac9c0..a95ae40 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -203,6 +203,13 @@ private function createPromise(array $request): PromiseInterface if ($request['copyTo']) { $fetcherOptions[RequestOptions::SINK] = $request['copyTo']; } + // Ensure that any additional HTTP headers are passed through to Guzzle. + if (isset($request['options']['http']['header'])) { + foreach ((array) $request['options']['http']['header'] as $header) { + list ($header, $value) = explode(':', $header, 2); + $fetcherOptions[RequestOptions::HEADERS][$header] = trim($value); + } + } // When the promise is fulfilled, convert it to an instance of // \Composer\Util\Http\Response that resembles what the regular @@ -238,6 +245,11 @@ private function createPromise(array $request): PromiseInterface throw $e; }; + // If this function is executing, we expect the TUF repository URL, plus + // an optional target ID, to be in the request options. If no target ID + // is given, derive it from the request URL. + // @see \Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository::__construct() + // @see \Tuf\ComposerIntegration\PackageLoader::loadPackages() $repository = $request['options']['tuf']['repository']; if (isset($request['options']['tuf']['target'])) { $target = $request['options']['tuf']['target']; diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 0a3e211..73f3bda 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -28,7 +28,7 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::addRepository() // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::createPromise() $repoConfig['options']['tuf'] = [ - $repoConfig['url'], + 'repository' => $repoConfig['url'], ]; parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); // Make the HTTP downloader aware of this repository. From f5882bc3b0dfcd395a0cb76b4a6767d13f8d7cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 1 Apr 2021 15:15:02 -0400 Subject: [PATCH 33/50] Handle 304 responses --- src/HttpDownloaderAdapter.php | 51 ++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index a95ae40..19fe912 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -18,6 +18,7 @@ use Tuf\Client\GuzzleFileFetcher; use Tuf\Client\ResponseStream; use Tuf\Client\Updater; +use Tuf\Exception\PotentialAttackException\InvalidHashException; use Tuf\Exception\RepoFileNotFound; /** @@ -216,29 +217,26 @@ private function createPromise(array $request): PromiseInterface // HttpDownloader would produce. $accept = function (ResponseStream $stream) use ($request) { $this->markJobDone(); - - $response = $stream->getResponse(); - $headers = []; - foreach ($response->getHeaders() as $name => $values) { - $headers[] = "$name: " . reset($values); - } - - $uri = $stream->getMetadata('uri'); - if ($uri && file_exists($uri)) { - $contents = "$uri~"; - } else { - $contents = $stream->getContents(); - } - return new Response($request, $response->getStatusCode(), $headers, $contents); + return static::createResponse($request, $stream); }; // If the promise gets rejected because it's a 404, convert that to a // \Composer\Downloader\TransportException like the regular // HttpDownloader would produce. - $reject = function (\Throwable $e) { + $reject = function (\Throwable $e) use ($request) { $this->markJobDone(); - if ($e instanceof \InvalidArgumentException || $e instanceof RepoFileNotFound) { + // If the response was a 304 (i.e., doesn't include a body), TUF + // validation will fail. In that case, convert the error into a + // legitimate empty response. + if ($e instanceof InvalidHashException) { + /** @var \Tuf\Client\ResponseStream $stream */ + $stream = $e->getStream(); + + if ($stream->getResponse()->getStatusCode() === 304 && $stream->getSize() === 0) { + return static::createResponse($request, $stream, false); + } + } elseif ($e instanceof \InvalidArgumentException || $e instanceof RepoFileNotFound) { $e = new TransportException($e->getMessage(), $e->getCode(), $e); $e->setStatusCode(404); } @@ -265,6 +263,27 @@ private function createPromise(array $request): PromiseInterface return end($this->queue); } + private static function createResponse(array $request, ResponseStream $stream, bool $includeBody = true): Response + { + $response = $stream->getResponse(); + $headers = []; + foreach ($response->getHeaders() as $name => $values) { + $headers[] = "$name: " . reset($values); + } + + if ($includeBody) { + $uri = $stream->getMetadata('uri'); + if ($uri && file_exists($uri)) { + $contents = "$uri~"; + } else { + $contents = $stream->getContents(); + } + } else { + $contents = ''; + } + return new Response($request, $response->getStatusCode(), $headers, $contents); + } + /** * {@inheritDoc} */ From 012345f5c64ce2b6ed589ce5e4383c63b668e9b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 1 Apr 2021 15:18:41 -0400 Subject: [PATCH 34/50] Improve comments. --- src/HttpDownloaderAdapter.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 19fe912..60eec9c 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -220,9 +220,6 @@ private function createPromise(array $request): PromiseInterface return static::createResponse($request, $stream); }; - // If the promise gets rejected because it's a 404, convert that to a - // \Composer\Downloader\TransportException like the regular - // HttpDownloader would produce. $reject = function (\Throwable $e) use ($request) { $this->markJobDone(); @@ -236,10 +233,14 @@ private function createPromise(array $request): PromiseInterface if ($stream->getResponse()->getStatusCode() === 304 && $stream->getSize() === 0) { return static::createResponse($request, $stream, false); } + // If the target doesn't exist or could not be found by the file + // fetcher, convert it to a regular TransportException, which is + // what the regular HttpDownloader would throw. } elseif ($e instanceof \InvalidArgumentException || $e instanceof RepoFileNotFound) { $e = new TransportException($e->getMessage(), $e->getCode(), $e); $e->setStatusCode(404); } + // In all other cases, just re-throw the exception. throw $e; }; From f9f8b7ac267d5c06c1186ae559ea25b9f65d2cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 1 Apr 2021 19:48:07 -0400 Subject: [PATCH 35/50] Start adding a unit test. --- composer.json | 3 +- composer.lock | 2174 ++++++++++++++++++++++++++++++++-- tests/HttpDownloaderTest.php | 40 + 3 files changed, 2106 insertions(+), 111 deletions(-) create mode 100644 tests/HttpDownloaderTest.php diff --git a/composer.json b/composer.json index 362f6f7..2a7219b 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,8 @@ "class": "Tuf\\ComposerIntegration\\Plugin" }, "require-dev": { - "composer/composer": "^2" + "composer/composer": "^2", + "phpunit/phpunit": "^9.5" }, "scripts": { "post-install-cmd": [ diff --git a/composer.lock b/composer.lock index 9f871e8..52ed051 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "73b9c48b116b25cc616d53a94f7542f9", + "content-hash": "948e3efaa77f89f0457334da6f1d288b", "packages": [ { "name": "guzzlehttp/guzzle", @@ -1615,228 +1615,2074 @@ ], "time": "2020-11-13T08:04:11+00:00" }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" + }, { "name": "justinrainbow/json-schema", "version": "5.2.10", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "support": { + "issues": "https://github.com/justinrainbow/json-schema/issues", + "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" + }, + "time": "2020-05-27T16:41:55+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.4", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, + "time": "2020-12-20T10:01:03+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" + }, + { + "name": "phar-io/version", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" + }, + "time": "2021-02-23T14:00:09+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + }, + "time": "2021-03-17T13:42:18+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "f6293e1b30a2354e8428e004689671b83871edde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-03-28T07:26:59+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c73c6737305e779771147af66c96ca6a7ed8a741" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741", + "reference": "c73c6737305e779771147af66c96ca6a7ed8a741", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-03-23T07:16:29+00:00" + }, + { + "name": "psr/container", + "version": "1.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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "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" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "react/promise", + "version": "v2.8.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.8.0" + }, + "time": "2020-05-12T15:16:56+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:55:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" + "phpunit/phpunit": "^9.3" }, - "bin": [ - "bin/validate-json" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" }, - "time": "2020-05-27T16:41:55+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "sebastian/resource-operations", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" }, - "time": "2017-02-14T16:28:37+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" }, { - "name": "psr/log", - "version": "1.1.3", + "name": "sebastian/type", + "version": "2.3.1", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.3-dev" } }, "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/php-fig/log/tree/1.1.3" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" }, - "time": "2020-03-23T09:12:05+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+00:00" }, { - "name": "react/promise", - "version": "v2.8.0", + "name": "sebastian/version", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" + "php": ">=7.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, "autoload": { - "psr-4": { - "React\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.8.0" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, - "time": "2020-05-12T15:16:56+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" }, { "name": "seld/jsonlint", @@ -2557,6 +4403,114 @@ } ], "time": "2021-01-25T15:14:59+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], diff --git a/tests/HttpDownloaderTest.php b/tests/HttpDownloaderTest.php new file mode 100644 index 0000000..f5eedeb --- /dev/null +++ b/tests/HttpDownloaderTest.php @@ -0,0 +1,40 @@ +prophesize(HttpDownloader::class); + $downloader = new HttpDownloaderAdapter($decorated->reveal(), sys_get_temp_dir()); + + $decorated->enableAsync()->shouldBeCalled(); + $decorated->wait(null)->shouldBeCalled(); + $decorated->countActiveJobs(null)->shouldBeCalled(); + $decorated->markJobDone()->shouldBeCalled(); + $decorated->setOptions([])->shouldBeCalled(); + $decorated->getOptions()->shouldBeCalled(); + $decorated->addCopy('url', 'destination', [])->shouldBeCalled(); + $decorated->copy('url', 'destination', [])->shouldBeCalled(); + $decorated->add('url', [])->shouldBeCalled(); + $decorated->get('url', [])->shouldBeCalled(); + + $downloader->enableAsync(); + $downloader->wait(); + $downloader->markJobDone(); + $downloader->setOptions([]); + $downloader->getOptions(); + $downloader->addCopy('url', 'destination'); + $downloader->copy('url', 'destination'); + $downloader->add('url'); + $downloader->get('url'); + } +} \ No newline at end of file From aefde20cd7b513631fd90ae757172fa7c29cbcfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 2 Apr 2021 10:20:01 -0400 Subject: [PATCH 36/50] Start adjusting files for CI testing --- composer.lock | 211 +++++++++--------- fixtures/generate.py | 7 +- fixtures/packages.json | 1 + fixtures/targets/drupal/token/1.9.0.0 | Bin 0 -> 114055 bytes .../files/packages/8/p2/drupal/token.json | 1 + fixtures/targets/p2/drupal/core.json | 1 - fixtures/targets/packages.json | 2 - fixtures/test-project/composer.json | 11 +- 8 files changed, 117 insertions(+), 117 deletions(-) create mode 120000 fixtures/packages.json create mode 100644 fixtures/targets/drupal/token/1.9.0.0 create mode 100644 fixtures/targets/files/packages/8/p2/drupal/token.json delete mode 100644 fixtures/targets/p2/drupal/core.json diff --git a/composer.lock b/composer.lock index 52ed051..6c51847 100644 --- a/composer.lock +++ b/composer.lock @@ -8,22 +8,22 @@ "packages": [ { "name": "guzzlehttp/guzzle", - "version": "7.2.0", + "version": "7.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79" + "reference": "7008573787b430c1c1f650e3722d9bba59967628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", + "reference": "7008573787b430c1c1f650e3722d9bba59967628", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7", + "guzzlehttp/psr7": "^1.7 || ^2.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0" }, @@ -31,6 +31,7 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", "phpunit/phpunit": "^8.5.5 || ^9.3.5", @@ -44,7 +45,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.1-dev" + "dev-master": "7.3-dev" } }, "autoload": { @@ -86,7 +87,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.2.0" + "source": "https://github.com/guzzle/guzzle/tree/7.3.0" }, "funding": [ { @@ -106,20 +107,20 @@ "type": "github" } ], - "time": "2020-10-10T11:47:56+00:00" + "time": "2021-03-23T11:33:13+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", "shasum": "" }, "require": { @@ -159,22 +160,22 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.0" + "source": "https://github.com/guzzle/promises/tree/1.4.1" }, - "time": "2020-09-30T07:37:28+00:00" + "time": "2021-03-07T09:25:29+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.7.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/35ea11d335fd638b5882ff1725228b3d35496ab1", + "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1", "shasum": "" }, "require": { @@ -234,9 +235,9 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.7.0" + "source": "https://github.com/guzzle/psr7/tree/1.8.1" }, - "time": "2020-09-30T07:37:11+00:00" + "time": "2021-03-21T16:25:00+00:00" }, { "name": "myclabs/deep-copy", @@ -298,20 +299,20 @@ }, { "name": "paragonie/random_compat", - "version": "v9.99.99", + "version": "v9.99.100", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", "shasum": "" }, "require": { - "php": "^7" + "php": ">= 7" }, "require-dev": { "phpunit/phpunit": "4.*|5.*", @@ -339,20 +340,25 @@ "pseudorandom", "random" ], - "time": "2018-07-02T15:55:56+00:00" + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" }, { "name": "paragonie/sodium_compat", - "version": "v1.13.0", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "bbade402cbe84c69b718120911506a3aa2bae653" + "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/bbade402cbe84c69b718120911506a3aa2bae653", - "reference": "bbade402cbe84c69b718120911506a3aa2bae653", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3", + "reference": "a1cfe0b21faf9c0b61ac0c6188c4af7fd6fd0db3", "shasum": "" }, "require": { @@ -360,7 +366,7 @@ "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" }, "require-dev": { - "phpunit/phpunit": "^3|^4|^5|^6|^7" + "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" }, "suggest": { "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", @@ -421,7 +427,11 @@ "secret-key cryptography", "side-channel resistant" ], - "time": "2020-03-20T21:48:09+00:00" + "support": { + "issues": "https://github.com/paragonie/sodium_compat/issues", + "source": "https://github.com/paragonie/sodium_compat/tree/v1.14.0" + }, + "time": "2020-12-03T16:26:19+00:00" }, { "name": "php-tuf/php-tuf", @@ -429,25 +439,27 @@ "source": { "type": "git", "url": "https://github.com/php-tuf/php-tuf.git", - "reference": "7889dabee34247e1269c321aefdc2a63154a727f" + "reference": "9838730b9d1504d935c7100efaad6d5eb7974528" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-tuf/php-tuf/zipball/7889dabee34247e1269c321aefdc2a63154a727f", - "reference": "7889dabee34247e1269c321aefdc2a63154a727f", + "url": "https://api.github.com/repos/php-tuf/php-tuf/zipball/9838730b9d1504d935c7100efaad6d5eb7974528", + "reference": "9838730b9d1504d935c7100efaad6d5eb7974528", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/guzzle": "^7.2", + "guzzlehttp/guzzle": "^6.5 || ^7.2", + "guzzlehttp/psr7": "^1.7", "myclabs/deep-copy": "^1.10.2", "paragonie/sodium_compat": "^1.13", "php": ">=7.2.5", - "symfony/validator": "^5.1" + "symfony/validator": "^4.4 || ^5" }, "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "php-tuf/phpcodesniffer-standard": "dev-main", "phpunit/phpunit": "^8.5.8|^9", - "squizlabs/php_codesniffer": "^3.5.8", "symfony/phpunit-bridge": "^5" }, "suggest": { @@ -470,13 +482,10 @@ }, "scripts": { "phpcs": [ - "phpcs -s --standard=phpcs-ruleset.xml ./src ./tests" - ], - "phpcs-ci": [ - "phpcs --standard=phpcs-ci-ruleset.xml ./src ./tests" + "phpcs -s --standard=PhpTuf ./src ./tests" ], "phpcbf": [ - "phpcbf --standard=phpcs-ruleset.xml ./src ./tests" + "phpcbf --standard=PhpTuf ./src ./tests" ], "test": [ "phpunit ./tests" @@ -489,7 +498,7 @@ "MIT" ], "description": "PHP implementation of The Update Framework (TUF)", - "time": "2020-12-29T23:39:51+00:00" + "time": "2021-04-01T19:02:50+00:00" }, { "name": "psr/http-client", @@ -1108,16 +1117,16 @@ }, { "name": "symfony/validator", - "version": "v5.2.3", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "d83d2a9f060ce42636feef6af6facc39793354cf" + "reference": "67354644f9baba3cc122134c255b7461b7e0fe31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/d83d2a9f060ce42636feef6af6facc39793354cf", - "reference": "d83d2a9f060ce42636feef6af6facc39793354cf", + "url": "https://api.github.com/repos/symfony/validator/zipball/67354644f9baba3cc122134c255b7461b7e0fe31", + "reference": "67354644f9baba3cc122134c255b7461b7e0fe31", "shasum": "" }, "require": { @@ -1142,7 +1151,7 @@ "require-dev": { "doctrine/annotations": "^1.10.4", "doctrine/cache": "~1.0", - "egulias/email-validator": "^2.1.10", + "egulias/email-validator": "^2.1.10|^3", "symfony/cache": "^4.4|^5.0", "symfony/config": "^4.4|^5.0", "symfony/console": "^4.4|^5.0", @@ -1199,7 +1208,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v5.2.3" + "source": "https://github.com/symfony/validator/tree/v5.2.6" }, "funding": [ { @@ -1215,7 +1224,7 @@ "type": "tidelift" } ], - "time": "2021-01-28T22:06:19+00:00" + "time": "2021-03-23T12:45:44+00:00" } ], "packages-dev": [ @@ -1297,16 +1306,16 @@ }, { "name": "composer/composer", - "version": "2.0.9", + "version": "2.0.12", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "591c2c155cac0d2d7f34af41d3b1e29bcbfc685e" + "reference": "6c12ce263da71641903e399c3ce8ecb08fd375fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/591c2c155cac0d2d7f34af41d3b1e29bcbfc685e", - "reference": "591c2c155cac0d2d7f34af41d3b1e29bcbfc685e", + "url": "https://api.github.com/repos/composer/composer/zipball/6c12ce263da71641903e399c3ce8ecb08fd375fb", + "reference": "6c12ce263da71641903e399c3ce8ecb08fd375fb", "shasum": "" }, "require": { @@ -1374,7 +1383,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.0.9" + "source": "https://github.com/composer/composer/tree/2.0.12" }, "funding": [ { @@ -1390,7 +1399,7 @@ "type": "tidelift" } ], - "time": "2021-01-27T15:09:27+00:00" + "time": "2021-04-01T08:14:59+00:00" }, { "name": "composer/semver", @@ -1554,16 +1563,16 @@ }, { "name": "composer/xdebug-handler", - "version": "1.4.5", + "version": "1.4.6", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f28d44c286812c714741478d968104c5e604a1d4" + "reference": "f27e06cd9675801df441b3656569b328e04aa37c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f28d44c286812c714741478d968104c5e604a1d4", - "reference": "f28d44c286812c714741478d968104c5e604a1d4", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c", + "reference": "f27e06cd9675801df441b3656569b328e04aa37c", "shasum": "" }, "require": { @@ -1571,7 +1580,8 @@ "psr/log": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "autoload": { @@ -1597,7 +1607,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.5" + "source": "https://github.com/composer/xdebug-handler/tree/1.4.6" }, "funding": [ { @@ -1613,7 +1623,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T08:04:11+00:00" + "time": "2021-03-25T17:01:18+00:00" }, { "name": "doctrine/instantiator", @@ -2569,27 +2579,22 @@ }, { "name": "psr/container", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "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/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -2602,7 +2607,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)", @@ -2616,9 +2621,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { "name": "psr/log", @@ -3797,16 +3802,16 @@ }, { "name": "symfony/console", - "version": "v5.2.3", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a" + "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/89d4b176d12a2946a1ae4e34906a025b7b6b135a", - "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a", + "url": "https://api.github.com/repos/symfony/console/zipball/35f039df40a3b335ebf310f244cb242b3a83ac8d", + "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d", "shasum": "" }, "require": { @@ -3874,7 +3879,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.2.3" + "source": "https://github.com/symfony/console/tree/v5.2.6" }, "funding": [ { @@ -3890,20 +3895,20 @@ "type": "tidelift" } ], - "time": "2021-01-28T22:06:19+00:00" + "time": "2021-03-28T09:42:18+00:00" }, { "name": "symfony/filesystem", - "version": "v5.2.3", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038" + "reference": "8c86a82f51658188119e62cff0a050a12d09836f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038", - "reference": "262d033b57c73e8b59cd6e68a45c528318b15038", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c86a82f51658188119e62cff0a050a12d09836f", + "reference": "8c86a82f51658188119e62cff0a050a12d09836f", "shasum": "" }, "require": { @@ -3936,7 +3941,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.3" + "source": "https://github.com/symfony/filesystem/tree/v5.2.6" }, "funding": [ { @@ -3952,20 +3957,20 @@ "type": "tidelift" } ], - "time": "2021-01-27T10:01:46+00:00" + "time": "2021-03-28T14:30:26+00:00" }, { "name": "symfony/finder", - "version": "v5.2.3", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4adc8d172d602008c204c2e16956f99257248e03" + "reference": "0d639a0943822626290d169965804f79400e6a04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4adc8d172d602008c204c2e16956f99257248e03", - "reference": "4adc8d172d602008c204c2e16956f99257248e03", + "url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04", + "reference": "0d639a0943822626290d169965804f79400e6a04", "shasum": "" }, "require": { @@ -3997,7 +4002,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.3" + "source": "https://github.com/symfony/finder/tree/v5.2.4" }, "funding": [ { @@ -4013,7 +4018,7 @@ "type": "tidelift" } ], - "time": "2021-01-28T22:06:19+00:00" + "time": "2021-02-15T18:55:04+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -4182,7 +4187,7 @@ }, { "name": "symfony/process", - "version": "v5.2.3", + "version": "v5.2.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -4224,7 +4229,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.2.3" + "source": "https://github.com/symfony/process/tree/v5.2.4" }, "funding": [ { @@ -4323,16 +4328,16 @@ }, { "name": "symfony/string", - "version": "v5.2.3", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "c95468897f408dd0aca2ff582074423dd0455122" + "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122", - "reference": "c95468897f408dd0aca2ff582074423dd0455122", + "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", + "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", "shasum": "" }, "require": { @@ -4386,7 +4391,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.3" + "source": "https://github.com/symfony/string/tree/v5.2.6" }, "funding": [ { @@ -4402,7 +4407,7 @@ "type": "tidelift" } ], - "time": "2021-01-25T15:14:59+00:00" + "time": "2021-03-17T17:12:15+00:00" }, { "name": "theseer/tokenizer", diff --git a/fixtures/generate.py b/fixtures/generate.py index d6301d0..71ad324 100644 --- a/fixtures/generate.py +++ b/fixtures/generate.py @@ -48,8 +48,11 @@ def generate_fixture(): repository.mark_dirty(['root', 'snapshot', 'targets', 'timestamp']) # Add more targets here as needed. - repository.targets.add_targets(['packages.json']) - repository.targets.add_targets(['p2/drupal/core.json']) + repository.targets.add_targets([ + 'packages.json', + 'files/packages/8/p2/drupal/token.json', + 'drupal/token/1.9.0.0' + ]) # Write and publish the repository. repository.mark_dirty(['snapshot', 'targets', 'timestamp']) diff --git a/fixtures/packages.json b/fixtures/packages.json new file mode 120000 index 0000000..f7303b8 --- /dev/null +++ b/fixtures/packages.json @@ -0,0 +1 @@ +targets/packages.json \ No newline at end of file diff --git a/fixtures/targets/drupal/token/1.9.0.0 b/fixtures/targets/drupal/token/1.9.0.0 new file mode 100644 index 0000000000000000000000000000000000000000..adbad068c8daa6c9dc94ac70ae767e3170cae6f5 GIT binary patch literal 114055 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 (?fr5#=~1$CrokKEN?L#eZu28J>X^;HG~lV*FJ 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

    J3-T> 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 literal 0 HcmV?d00001 diff --git a/fixtures/targets/files/packages/8/p2/drupal/token.json b/fixtures/targets/files/packages/8/p2/drupal/token.json new file mode 100644 index 0000000..7f79284 --- /dev/null +++ b/fixtures/targets/files/packages/8/p2/drupal/token.json @@ -0,0 +1 @@ +{"packages":{"drupal\/token":[{"keywords":"Actively maintained,Rules","homepage":"https:\/\/www.drupal.org\/project\/token","version":"1.9.0","version_normalized":"1.9.0.0","license":"GPL-2.0-or-later","authors":[{"name":"Berdir","homepage":"https:\/\/www.drupal.org\/user\/214652"},{"name":"Dave Reid","homepage":"https:\/\/www.drupal.org\/user\/53892"},{"name":"eaton","homepage":"https:\/\/www.drupal.org\/user\/16496"},{"name":"fago","homepage":"https:\/\/www.drupal.org\/user\/16747"},{"name":"greggles","homepage":"https:\/\/www.drupal.org\/user\/36762"},{"name":"mikeryan","homepage":"https:\/\/www.drupal.org\/user\/4420"}],"support":{"source":"https:\/\/git.drupalcode.org\/project\/token"},"source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.9"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.9.zip","reference":"8.x-1.9","shasum":"a5d234382a1a0e4ba61d4c7a2fa10671ca656be4"},"type":"drupal-module","uid":"token-3189015","name":"drupal\/token","extra":{"drupal":{"version":"8.x-1.9","datestamp":"1608284866","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}},"drush":{"services":{"drush.services.yml":"^9 || ^10"}}},"description":"Provides a user interface for the Token API, some missing core tokens.","require":{"drupal\/core":"^8.8 || ^9"}},{"version":"1.8.0","version_normalized":"1.8.0.0","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.8"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.8.zip","reference":"8.x-1.8","shasum":"f8e3b8f897817969324d88019438066b533bfe42"},"uid":"token-3187579","extra":{"drupal":{"version":"8.x-1.8","datestamp":"1607552423","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}},"drush":{"services":{"drush.services.yml":"^9 || ^10"}}}},{"version":"1.7.0","version_normalized":"1.7.0.0","license":"GPL-2.0+","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.7"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.7.zip","reference":"8.x-1.7","shasum":"c7e3a3757282e4c94e3c1fff08d01e22155cb853"},"uid":"token-3130990","extra":{"drupal":{"version":"8.x-1.7","datestamp":"1589314266","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}},"drush":{"services":{"drush.services.yml":"^9 || ^10"}}},"require":{"drupal\/core":"^8.7.7 || ^9"}},{"version":"1.6.0","version_normalized":"1.6.0.0","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.6"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.6.zip","reference":"8.x-1.6","shasum":"22039a3d927220609e708932ac5c501b90ca4925"},"uid":"token-3103692","extra":{"drupal":{"version":"8.x-1.6","datestamp":"1577708583","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}},"drush":{"services":{"drush.services.yml":"^9 || ^10"}}}},{"version":"1.5.0","version_normalized":"1.5.0.0","license":"GPL-2.0-or-later","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.5"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.5.zip","reference":"8.x-1.5","shasum":"6382a7e1aabbd8246f1117a26bf4916d285b401d"},"uid":"token-3001599","extra":{"drupal":{"version":"8.x-1.5","datestamp":"1577708583","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}}},"description":"Provides a user interface for the Token API and some missing core tokens.","require":{"drupal\/core":"^8.5"}},{"version":"1.4.0","version_normalized":"1.4.0.0","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.4"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.4.zip","reference":"8.x-1.4","shasum":"fd8d854eaa3fd7698694f4d9a9d66dc437e19cd0"},"uid":"token-2998273","extra":{"drupal":{"version":"8.x-1.4","datestamp":"1537557481","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}}}},{"version":"1.3.0","version_normalized":"1.3.0.0","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.3"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.3.zip","reference":"8.x-1.3","shasum":"360f4f16985a2005b1ab5d8a8628b73a5012c902"},"uid":"token-2975232","extra":{"drupal":{"version":"8.x-1.3","datestamp":"1536408480","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}}},"require":{"drupal\/core":"~8.0"}},{"version":"1.2.0","version_normalized":"1.2.0.0","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.2"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.2.zip","reference":"8.x-1.2","shasum":"223a826d2f0a8a5e1e75c178aa42e8346a6760be"},"uid":"token-2974903","extra":{"drupal":{"version":"8.x-1.2","datestamp":"1527232684","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}}}},{"version":"1.1.0","version_normalized":"1.1.0.0","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.1"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.1.zip","reference":"8.x-1.1","shasum":"f11042a76bec028b0a86dc33cf6daa19eb55d545"},"uid":"token-2932206","extra":{"drupal":{"version":"8.x-1.1","datestamp":"1527112080","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}}}},{"version":"1.0.0","version_normalized":"1.0.0.0","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.0"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.0.zip","reference":"8.x-1.0","shasum":"d24c7f1ffddbd0fc56bc92bacae1c4ff769a4442"},"uid":"token-2873983","extra":{"drupal":{"version":"8.x-1.0","datestamp":"1513810384","security-coverage":{"status":"covered","message":"Covered by Drupal\u0027s security advisory policy"}}}},{"version":"1.0.0-rc1","version_normalized":"1.0.0.0-RC1","license":"GPL-2.0+","support":{"source":"https:\/\/git.drupalcode.org\/project\/token","issues":"https:\/\/www.drupal.org\/project\/issues\/token"},"source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.0-rc1"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.0-rc1.zip","reference":"8.x-1.0-rc1","shasum":"204b2f18a3d770589d66656aa83121d2156d0a31"},"uid":"token-2840280","extra":{"drupal":{"version":"8.x-1.0-rc1","datestamp":"1493466843","security-coverage":{"status":"not-covered","message":"RC releases are not covered by Drupal security advisories."}}}},{"version":"1.0.0-beta2","version_normalized":"1.0.0.0-beta2","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.0-beta2"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.0-beta2.zip","reference":"8.x-1.0-beta2","shasum":"b838318eddf46e4f382489de5516ab916257c393"},"uid":"token-2802881","extra":{"drupal":{"version":"8.x-1.0-beta2","datestamp":"1483290542","security-coverage":{"status":"not-covered","message":"Beta releases are not covered by Drupal security advisories."}}}},{"version":"1.0.0-beta1","version_normalized":"1.0.0.0-beta1","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.0-beta1"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.0-beta1.zip","reference":"8.x-1.0-beta1","shasum":"342ecedce41275a3f605a36b5729b054415e8dda"},"uid":"token-2782315","extra":{"drupal":{"version":"8.x-1.0-beta1","datestamp":"1474367039","security-coverage":{"status":"not-covered","message":"Beta releases are not covered by Drupal security advisories."}}}},{"version":"1.0.0-alpha2","version_normalized":"1.0.0.0-alpha2","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.0-alpha2"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.0-alpha2.zip","reference":"8.x-1.0-alpha2","shasum":"b844fc463edcb15f7d750482c150b4b27a6e8200"},"uid":"token-2654018","extra":{"drupal":{"version":"8.x-1.0-alpha2","datestamp":"1470864453","security-coverage":{"status":"not-covered","message":"Alpha releases are not covered by Drupal security advisories."}}}},{"version":"1.0.0-alpha1","version_normalized":"1.0.0.0-alpha1","source":{"type":"git","url":"https:\/\/git.drupalcode.org\/project\/token.git","reference":"8.x-1.0-alpha1"},"dist":{"type":"zip","url":"https:\/\/ftp.drupal.org\/files\/projects\/token-8.x-1.0-alpha1.zip","reference":"8.x-1.0-alpha1","shasum":"d3f7190ebfee7928af295dbe65b6788a6f90e22b"},"uid":"token-2640302","extra":{"drupal":{"version":"8.x-1.0-alpha1","datestamp":"1453363739","security-coverage":{"status":"not-covered","message":"Alpha releases are not covered by Drupal security advisories."}}}}]},"minified":"composer\/2.0"} \ No newline at end of file diff --git a/fixtures/targets/p2/drupal/core.json b/fixtures/targets/p2/drupal/core.json deleted file mode 100644 index 5240bfb..0000000 --- a/fixtures/targets/p2/drupal/core.json +++ /dev/null @@ -1 +0,0 @@ -{"packages":{"drupal/core":[{"name":"drupal/core","description":"Drupal is an open source content management platform powering millions of websites and applications.","keywords":[],"homepage":"","version":"9.1.5","version_normalized":"9.1.5.0","license":["GPL-2.0-or-later"],"authors":[],"source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"075ea2e792edbe573a29f02e80d6edf445f18e14"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/075ea2e792edbe573a29f02e80d6edf445f18e14","reference":"075ea2e792edbe573a29f02e80d6edf445f18e14","shasum":""},"type":"drupal-core","time":"2021-03-04T14:36:14+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/DependencyInjection/Container.php","lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php","lib/Drupal/Component/FileCache/FileCacheFactory.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Cache/Cache.php","lib/Drupal/Core/Cache/CacheBackendInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumTrait.php","lib/Drupal/Core/Cache/CacheTagsInvalidatorInterface.php","lib/Drupal/Core/Cache/DatabaseBackend.php","lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php","lib/Drupal/Core/Database/Connection.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/Database/Driver/mysql/Connection.php","lib/Drupal/Core/Database/Driver/pgsql/Connection.php","lib/Drupal/Core/Database/Driver/sqlite/Connection.php","lib/Drupal/Core/Database/Statement.php","lib/Drupal/Core/Database/StatementInterface.php","lib/Drupal/Core/DependencyInjection/Container.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Installer/InstallerRedirectTrait.php","lib/Drupal/Core/Site/Settings.php"],"files":["includes/bootstrap.inc"]},"extra":{"drupal-scaffold":{"file-mapping":{"[project-root]/.editorconfig":"assets/scaffold/files/editorconfig","[project-root]/.gitattributes":"assets/scaffold/files/gitattributes","[web-root]/.csslintrc":"assets/scaffold/files/csslintrc","[web-root]/.eslintignore":"assets/scaffold/files/eslintignore","[web-root]/.eslintrc.json":"assets/scaffold/files/eslintrc.json","[web-root]/.ht.router.php":"assets/scaffold/files/ht.router.php","[web-root]/.htaccess":"assets/scaffold/files/htaccess","[web-root]/example.gitignore":"assets/scaffold/files/example.gitignore","[web-root]/index.php":"assets/scaffold/files/index.php","[web-root]/INSTALL.txt":"assets/scaffold/files/drupal.INSTALL.txt","[web-root]/README.txt":"assets/scaffold/files/drupal.README.txt","[web-root]/robots.txt":"assets/scaffold/files/robots.txt","[web-root]/update.php":"assets/scaffold/files/update.php","[web-root]/web.config":"assets/scaffold/files/web.config","[web-root]/sites/README.txt":"assets/scaffold/files/sites.README.txt","[web-root]/sites/development.services.yml":"assets/scaffold/files/development.services.yml","[web-root]/sites/example.settings.local.php":"assets/scaffold/files/example.settings.local.php","[web-root]/sites/example.sites.php":"assets/scaffold/files/example.sites.php","[web-root]/sites/default/default.services.yml":"assets/scaffold/files/default.services.yml","[web-root]/sites/default/default.settings.php":"assets/scaffold/files/default.settings.php","[web-root]/modules/README.txt":"assets/scaffold/files/modules.README.txt","[web-root]/profiles/README.txt":"assets/scaffold/files/profiles.README.txt","[web-root]/themes/README.txt":"assets/scaffold/files/themes.README.txt"}}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.12","psr/log":"^1.0"},"conflict":{"drush/drush":"<8.1.10"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-front-matter":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/olivero":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.1.5"}},{"version":"9.1.4","version_normalized":"9.1.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d16a7cb33b7a01e3b2e66d36e2011f27ba9786f4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d16a7cb33b7a01e3b2e66d36e2011f27ba9786f4","reference":"d16a7cb33b7a01e3b2e66d36e2011f27ba9786f4","shasum":""},"time":"2021-02-03T19:21:05+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.4"}},{"version":"9.1.3","version_normalized":"9.1.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"62f5d7d0f9f7c279b996b0f33d0ccd501adcd980"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/62f5d7d0f9f7c279b996b0f33d0ccd501adcd980","reference":"62f5d7d0f9f7c279b996b0f33d0ccd501adcd980","shasum":""},"time":"2021-01-19T23:10:47+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.3"}},{"version":"9.1.2","version_normalized":"9.1.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"62b7a8e2f1c78b076d9e54d2b24234cac3aea548"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/62b7a8e2f1c78b076d9e54d2b24234cac3aea548","reference":"62b7a8e2f1c78b076d9e54d2b24234cac3aea548","shasum":""},"time":"2021-01-07T01:42:38+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.2"}},{"version":"9.1.1","version_normalized":"9.1.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"35a713562382b5c0ebe534faf3deb3f8e72b6a53"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/35a713562382b5c0ebe534faf3deb3f8e72b6a53","reference":"35a713562382b5c0ebe534faf3deb3f8e72b6a53","shasum":""},"time":"2021-01-06T23:04:09+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.1"}},{"version":"9.1.0","version_normalized":"9.1.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"de8c1769ea3d8b640e1a35c9228880d0b74ca4cc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/de8c1769ea3d8b640e1a35c9228880d0b74ca4cc","reference":"de8c1769ea3d8b640e1a35c9228880d0b74ca4cc","shasum":""},"time":"2020-12-02T18:11:58+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.0"}},{"version":"9.1.0-rc3","version_normalized":"9.1.0.0-RC3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"abd45076a0eee9f35e3a2d3df1a52d2d9feb1995"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/abd45076a0eee9f35e3a2d3df1a52d2d9feb1995","reference":"abd45076a0eee9f35e3a2d3df1a52d2d9feb1995","shasum":""},"time":"2020-11-26T01:34:06+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.0-rc3"}},{"version":"9.1.0-rc2","version_normalized":"9.1.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0c0ebb0e93e216cd8f3d65e0877c4d2eeed3a745"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0c0ebb0e93e216cd8f3d65e0877c4d2eeed3a745","reference":"0c0ebb0e93e216cd8f3d65e0877c4d2eeed3a745","shasum":""},"time":"2020-11-25T19:19:10+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.0-rc2"}},{"version":"9.1.0-rc1","version_normalized":"9.1.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1130d1562f5e6ab8b0f62515498bd85eed6d71eb"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1130d1562f5e6ab8b0f62515498bd85eed6d71eb","reference":"1130d1562f5e6ab8b0f62515498bd85eed6d71eb","shasum":""},"time":"2020-11-17T22:20:36+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^3.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.0-rc1"}},{"version":"9.1.0-beta1","version_normalized":"9.1.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"38c8517a8d6adafb06d8ec33cdb24eeb7cd97a38"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/38c8517a8d6adafb06d8ec33cdb24eeb7cd97a38","reference":"38c8517a8d6adafb06d8ec33cdb24eeb7cd97a38","shasum":""},"time":"2020-11-06T14:10:18+00:00","support":{"source":"https://github.com/drupal/core/tree/9.1.0-beta1"}},{"version":"9.1.0-alpha1","version_normalized":"9.1.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3e5e7ac4dea52f6fd90a3ec4455c64926b7a30e1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3e5e7ac4dea52f6fd90a3ec4455c64926b7a30e1","reference":"3e5e7ac4dea52f6fd90a3ec4455c64926b7a30e1","shasum":""},"time":"2020-10-23T15:03:28+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/DependencyInjection/Container.php","lib/Drupal/Component/DependencyInjection/PhpArrayContainer.php","lib/Drupal/Component/FileCache/FileCacheFactory.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Cache/Cache.php","lib/Drupal/Core/Cache/CacheBackendInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumInterface.php","lib/Drupal/Core/Cache/CacheTagsChecksumTrait.php","lib/Drupal/Core/Cache/CacheTagsInvalidatorInterface.php","lib/Drupal/Core/Cache/DatabaseBackend.php","lib/Drupal/Core/Cache/DatabaseCacheTagsChecksum.php","lib/Drupal/Core/Database/Connection.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/Database/Driver/mysql/Connection.php","lib/Drupal/Core/Database/Driver/pgsql/Connection.php","lib/Drupal/Core/Database/Driver/sqlite/Connection.php","lib/Drupal/Core/Database/Statement.php","lib/Drupal/Core/Database/StatementInterface.php","lib/Drupal/Core/DependencyInjection/Container.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Installer/InstallerRedirectTrait.php","lib/Drupal/Core/Site/Settings.php"]},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.1.0-alpha1"}},{"version":"9.0.11","version_normalized":"9.0.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"41697df079ae8aa64fa45b61976f50e7a2998d7f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/41697df079ae8aa64fa45b61976f50e7a2998d7f","reference":"41697df079ae8aa64fa45b61976f50e7a2998d7f","shasum":""},"time":"2021-01-19T23:10:53+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.12","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.11"}},{"version":"9.0.10","version_normalized":"9.0.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8a0cdab9f6a0e2f48b4886b31d050dca034e6049"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8a0cdab9f6a0e2f48b4886b31d050dca034e6049","reference":"8a0cdab9f6a0e2f48b4886b31d050dca034e6049","shasum":""},"time":"2020-12-03T20:54:37+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.10"}},{"version":"9.0.9","version_normalized":"9.0.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"03d815cf785654d03cf39dd911c8ae53b2fdd6cd"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/03d815cf785654d03cf39dd911c8ae53b2fdd6cd","reference":"03d815cf785654d03cf39dd911c8ae53b2fdd6cd","shasum":""},"time":"2020-11-26T00:53:25+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.9"}},{"version":"9.0.8","version_normalized":"9.0.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"67ec8d625bb29c4323bc34c680887bf4af0187e1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/67ec8d625bb29c4323bc34c680887bf4af0187e1","reference":"67ec8d625bb29c4323bc34c680887bf4af0187e1","shasum":""},"time":"2020-11-17T22:05:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4.7","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.8"}},{"version":"9.0.7","version_normalized":"9.0.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5159f7e335ba2484075b2460b10780fed583d74c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5159f7e335ba2484075b2460b10780fed583d74c","reference":"5159f7e335ba2484075b2460b10780fed583d74c","shasum":""},"time":"2020-10-07T19:33:16+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.7"}},{"version":"9.0.6","version_normalized":"9.0.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"783122d82abb104cebc73ea1f0659f7ccd46f9a8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/783122d82abb104cebc73ea1f0659f7ccd46f9a8","reference":"783122d82abb104cebc73ea1f0659f7ccd46f9a8","shasum":""},"time":"2020-09-16T11:21:49+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.6"}},{"version":"9.0.5","version_normalized":"9.0.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"145671b8ac88322c43c8415cf287b76dfe45ad38"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/145671b8ac88322c43c8415cf287b76dfe45ad38","reference":"145671b8ac88322c43c8415cf287b76dfe45ad38","shasum":""},"time":"2020-09-03T21:05:44+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.5"}},{"version":"9.0.4","version_normalized":"9.0.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f6366e4a42e23ebfdc4ad16750f50b5217b2765e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f6366e4a42e23ebfdc4ad16750f50b5217b2765e","reference":"f6366e4a42e23ebfdc4ad16750f50b5217b2765e","shasum":""},"time":"2020-09-02T11:23:11+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.4"}},{"version":"9.0.3","version_normalized":"9.0.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"883018fe0aa16cee450bb043fcb4893c05438283"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/883018fe0aa16cee450bb043fcb4893c05438283","reference":"883018fe0aa16cee450bb043fcb4893c05438283","shasum":""},"time":"2020-08-05T21:47:03+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.3"}},{"version":"9.0.2","version_normalized":"9.0.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ea6e0cef3240dc8e48f797698226467de121e9c9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ea6e0cef3240dc8e48f797698226467de121e9c9","reference":"ea6e0cef3240dc8e48f797698226467de121e9c9","shasum":""},"time":"2020-07-08T18:31:41+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.2"}},{"version":"9.0.1","version_normalized":"9.0.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1cd5f38665c789df215b0f145798b44bd88fdab2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1cd5f38665c789df215b0f145798b44bd88fdab2","reference":"1cd5f38665c789df215b0f145798b44bd88fdab2","shasum":""},"time":"2020-06-17T17:56:46+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.1"}},{"version":"9.0.0","version_normalized":"9.0.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b86a9ddcc7f33608845a3219ed63507661ea69ee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b86a9ddcc7f33608845a3219ed63507661ea69ee","reference":"b86a9ddcc7f33608845a3219ed63507661ea69ee","shasum":""},"time":"2020-06-03T21:43:50+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0"}},{"version":"9.0.0-rc1","version_normalized":"9.0.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b97eebe9799d323f3dc0a5c372b341de57bbc7d4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b97eebe9799d323f3dc0a5c372b341de57bbc7d4","reference":"b97eebe9799d323f3dc0a5c372b341de57bbc7d4","shasum":""},"time":"2020-05-22T22:32:46+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0-rc1"}},{"version":"9.0.0-beta3","version_normalized":"9.0.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"084a8705f4169a95366eea1451012c81ca2cd500"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/084a8705f4169a95366eea1451012c81ca2cd500","reference":"084a8705f4169a95366eea1451012c81ca2cd500","shasum":""},"time":"2020-05-15T23:57:43+00:00","support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta3"}},{"version":"9.0.0-beta2","version_normalized":"9.0.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ae085c68b25b78cc77091fb3d8d29fcd941f8d35"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ae085c68b25b78cc77091fb3d8d29fcd941f8d35","reference":"ae085c68b25b78cc77091fb3d8d29fcd941f8d35","shasum":""},"time":"2020-03-30T19:13:47+00:00","conflict":{"drupal/pathauto":"<1.6","drush/drush":"<8.1.10"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta2"}},{"version":"9.0.0-beta1","version_normalized":"9.0.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a3547cf77d19b680834e3fae5cb159219814641a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a3547cf77d19b680834e3fae5cb159219814641a","reference":"a3547cf77d19b680834e3fae5cb159219814641a","shasum":""},"time":"2020-03-20T19:21:18+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_environment":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-beta1"}},{"version":"9.0.0-alpha2","version_normalized":"9.0.0.0-alpha2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e7430881bfe5eea47cb384a82bda9d73ae9072f4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e7430881bfe5eea47cb384a82bda9d73ae9072f4","reference":"e7430881bfe5eea47cb384a82bda9d73ae9072f4","shasum":""},"time":"2020-03-04T18:12:13+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-alpha2"}},{"version":"9.0.0-alpha1","version_normalized":"9.0.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b3be17114997f4e3ae95b5607744bc0c1031356f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b3be17114997f4e3ae95b5607744bc0c1031356f","reference":"b3be17114997f4e3ae95b5607744bc0c1031356f","shasum":""},"time":"2020-02-11T18:17:58+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"classmap":["lib/Drupal.php","lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php"]},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.3","symfony/class-loader":"~3.4.0","symfony/console":"^4.4","symfony/dependency-injection":"^4.4","symfony/event-dispatcher":"^4.4","symfony/http-foundation":"^4.4","symfony/http-kernel":"^4.4","symfony/routing":"^4.4","symfony/serializer":"^4.4","symfony/translation":"^4.4","symfony/validator":"^4.4","symfony/process":"^4.4","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^4.4","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^2.12.0","doctrine/reflection":"^1.1","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.5.2","symfony-cmf/routing":"^2.1","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.2.0","laminas/laminas-diactoros":"^2.1","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_environment":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/9.0.0-alpha1"}},{"version":"8.9.13","version_normalized":"8.9.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a53db77b55a035453d7229e0c3069f8591cb4cb6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a53db77b55a035453d7229e0c3069f8591cb4cb6","reference":"a53db77b55a035453d7229e0c3069f8591cb4cb6","shasum":""},"time":"2021-01-19T23:11:00+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.12","psr/log":"^1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/help_topics":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/path_alias":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.9.13"}},{"version":"8.9.12","version_normalized":"8.9.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ec7ac2bd2b7fa7f06df654c637b7f29f019d356f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ec7ac2bd2b7fa7f06df654c637b7f29f019d356f","reference":"ec7ac2bd2b7fa7f06df654c637b7f29f019d356f","shasum":""},"time":"2021-01-06T23:44:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.12"}},{"version":"8.9.11","version_normalized":"8.9.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8fc1d510b8fcff90e2f3a7c96a893ba16bbdc62d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8fc1d510b8fcff90e2f3a7c96a893ba16bbdc62d","reference":"8fc1d510b8fcff90e2f3a7c96a893ba16bbdc62d","shasum":""},"time":"2020-12-03T20:57:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.11"}},{"version":"8.9.10","version_normalized":"8.9.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e725c01cdf6fb6d8b330a27fa75caab91034805a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e725c01cdf6fb6d8b330a27fa75caab91034805a","reference":"e725c01cdf6fb6d8b330a27fa75caab91034805a","shasum":""},"time":"2020-11-26T01:49:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.10"}},{"version":"8.9.9","version_normalized":"8.9.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"724ada1a6c497a663797c40e4ee3d0c7c618371d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/724ada1a6c497a663797c40e4ee3d0c7c618371d","reference":"724ada1a6c497a663797c40e4ee3d0c7c618371d","shasum":""},"time":"2020-11-17T22:05:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.9"}},{"version":"8.9.8","version_normalized":"8.9.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e16f650e7bd7f0cfb4ff4dd8ed753625313cdfdb"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e16f650e7bd7f0cfb4ff4dd8ed753625313cdfdb","reference":"e16f650e7bd7f0cfb4ff4dd8ed753625313cdfdb","shasum":""},"time":"2020-11-05T16:34:55+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.8"}},{"version":"8.9.7","version_normalized":"8.9.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ded1be08c23f19211f9a2514a72e7defb1204efc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ded1be08c23f19211f9a2514a72e7defb1204efc","reference":"ded1be08c23f19211f9a2514a72e7defb1204efc","shasum":""},"time":"2020-10-07T19:37:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.7"}},{"version":"8.9.6","version_normalized":"8.9.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"caf4e756d31dfb0c2e52cd0748e900efe4b57766"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/caf4e756d31dfb0c2e52cd0748e900efe4b57766","reference":"caf4e756d31dfb0c2e52cd0748e900efe4b57766","shasum":""},"time":"2020-09-16T11:22:21+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.6"}},{"version":"8.9.5","version_normalized":"8.9.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c9b9643663b80f02c038f9dea15b8717a22c3339"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c9b9643663b80f02c038f9dea15b8717a22c3339","reference":"c9b9643663b80f02c038f9dea15b8717a22c3339","shasum":""},"time":"2020-09-03T21:07:45+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.5"}},{"version":"8.9.4","version_normalized":"8.9.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1de88703485c755d0db7420156432306a0acad8f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1de88703485c755d0db7420156432306a0acad8f","reference":"1de88703485c755d0db7420156432306a0acad8f","shasum":""},"time":"2020-09-02T11:37:12+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.4"}},{"version":"8.9.3","version_normalized":"8.9.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"ee02fd4cbe4ac148b4d7e297ec63b3459983862e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/ee02fd4cbe4ac148b4d7e297ec63b3459983862e","reference":"ee02fd4cbe4ac148b4d7e297ec63b3459983862e","shasum":""},"time":"2020-08-05T21:49:40+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.3"}},{"version":"8.9.2","version_normalized":"8.9.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8f0e24555c093669ce41edbb30637fe19df16802"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8f0e24555c093669ce41edbb30637fe19df16802","reference":"8f0e24555c093669ce41edbb30637fe19df16802","shasum":""},"time":"2020-07-08T18:53:45+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.2"}},{"version":"8.9.1","version_normalized":"8.9.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e8ee964c562870381876e85d3f5eaaf8c8ecc9ee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e8ee964c562870381876e85d3f5eaaf8c8ecc9ee","reference":"e8ee964c562870381876e85d3f5eaaf8c8ecc9ee","shasum":""},"time":"2020-06-17T17:57:48+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.1"}},{"version":"8.9.0","version_normalized":"8.9.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f90882ab0723becda2333e4d33e1a6ab27cb8f0c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f90882ab0723becda2333e4d33e1a6ab27cb8f0c","reference":"f90882ab0723becda2333e4d33e1a6ab27cb8f0c","shasum":""},"time":"2020-06-03T16:44:36+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0"}},{"version":"8.9.0-rc1","version_normalized":"8.9.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bd856870252c1c102e5a99272e02cb91127f4afd"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bd856870252c1c102e5a99272e02cb91127f4afd","reference":"bd856870252c1c102e5a99272e02cb91127f4afd","shasum":""},"time":"2020-05-22T22:57:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","laminas/laminas-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","laminas/laminas-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9","psr/log":"^1.0"},"support":{"source":"https://github.com/drupal/core/tree/8.9.0-rc1"}},{"version":"8.9.0-beta3","version_normalized":"8.9.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f33d30a9e1f4a7b20a1eccd963767ec70c716c8e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f33d30a9e1f4a7b20a1eccd963767ec70c716c8e","reference":"f33d30a9e1f4a7b20a1eccd963767ec70c716c8e","shasum":""},"time":"2020-05-17T19:53:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta3"}},{"version":"8.9.0-beta2","version_normalized":"8.9.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d67c87a64c552525b3c2433047d96c445310d4c4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d67c87a64c552525b3c2433047d96c445310d4c4","reference":"d67c87a64c552525b3c2433047d96c445310d4c4","shasum":""},"time":"2020-04-02T18:59:14+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta2"}},{"version":"8.9.0-beta1","version_normalized":"8.9.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bd38e6c7df640867de0fe41f055864645e1bf0a8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bd38e6c7df640867de0fe41f055864645e1bf0a8","reference":"bd38e6c7df640867de0fe41f055864645e1bf0a8","shasum":""},"time":"2020-03-26T22:24:05+00:00","support":{"source":"https://github.com/drupal/core/tree/8.9.0-beta1"}},{"version":"8.8.12","version_normalized":"8.8.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9cbfd3b0e955bc34649bdc471b9a702650887f73"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9cbfd3b0e955bc34649bdc471b9a702650887f73","reference":"9cbfd3b0e955bc34649bdc471b9a702650887f73","shasum":""},"time":"2020-11-26T02:06:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.11"},"support":{"source":"https://github.com/drupal/core/tree/8.8.12"}},{"version":"8.8.11","version_normalized":"8.8.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"049a282977f56cf58aa2fb70bb9be9ca6c87d250"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/049a282977f56cf58aa2fb70bb9be9ca6c87d250","reference":"049a282977f56cf58aa2fb70bb9be9ca6c87d250","shasum":""},"time":"2020-11-17T22:06:51+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.35","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"support":{"source":"https://github.com/drupal/core/tree/8.8.11"}},{"version":"8.8.10","version_normalized":"8.8.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3df0c753d18bc8982d819f43b47759ae50be94bc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3df0c753d18bc8982d819f43b47759ae50be94bc","reference":"3df0c753d18bc8982d819f43b47759ae50be94bc","shasum":""},"time":"2020-09-16T11:22:50+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.10"}},{"version":"8.8.9","version_normalized":"8.8.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c8270789d71767c6482ccb6cc6e51f5ca4302cbc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c8270789d71767c6482ccb6cc6e51f5ca4302cbc","reference":"c8270789d71767c6482ccb6cc6e51f5ca4302cbc","shasum":""},"time":"2020-09-03T21:09:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.9"}},{"version":"8.8.8","version_normalized":"8.8.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c067109fcdf86184a7c75081fd8f1d81e4e23f56"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c067109fcdf86184a7c75081fd8f1d81e4e23f56","reference":"c067109fcdf86184a7c75081fd8f1d81e4e23f56","shasum":""},"time":"2020-06-17T17:58:48+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.8"}},{"version":"8.8.7","version_normalized":"8.8.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"92735f06d41145d96c2ec48cfe9776bcbe68baa2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/92735f06d41145d96c2ec48cfe9776bcbe68baa2","reference":"92735f06d41145d96c2ec48cfe9776bcbe68baa2","shasum":""},"time":"2020-06-03T16:39:46+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.7"}},{"version":"8.8.6","version_normalized":"8.8.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a5daf2aa45bbc72da72e1e64d5261f746ffb508c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a5daf2aa45bbc72da72e1e64d5261f746ffb508c","reference":"a5daf2aa45bbc72da72e1e64d5261f746ffb508c","shasum":""},"time":"2020-05-20T08:22:02+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"support":{"source":"https://github.com/drupal/core/tree/8.8.6"}},{"version":"8.8.5","version_normalized":"8.8.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e22cfc3adf1dac7a92452287a7d8602f3c27b68f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e22cfc3adf1dac7a92452287a7d8602f3c27b68f","reference":"e22cfc3adf1dac7a92452287a7d8602f3c27b68f","shasum":""},"time":"2020-04-02T19:01:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.5"}},{"version":"8.8.4","version_normalized":"8.8.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"34e59fcf702c1b3c497bbd6e92e68e546c5d15b8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/34e59fcf702c1b3c497bbd6e92e68e546c5d15b8","reference":"34e59fcf702c1b3c497bbd6e92e68e546c5d15b8","shasum":""},"time":"2020-03-18T16:26:33+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.4"}},{"version":"8.8.3","version_normalized":"8.8.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"77971de6d6ade7366cdd3fadfc16c5d02e531446"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/77971de6d6ade7366cdd3fadfc16c5d02e531446","reference":"77971de6d6ade7366cdd3fadfc16c5d02e531446","shasum":""},"time":"2020-03-04T18:01:37+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.3"}},{"version":"8.8.2","version_normalized":"8.8.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f997857003276c2ae6d27db30f0eab9c7dd10e62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f997857003276c2ae6d27db30f0eab9c7dd10e62","reference":"f997857003276c2ae6d27db30f0eab9c7dd10e62","shasum":""},"time":"2020-02-01T19:51:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.2"}},{"version":"8.8.1","version_normalized":"8.8.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d339279f4c4b89477e0f4a8b775eb5dcb86b3087"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d339279f4c4b89477e0f4a8b775eb5dcb86b3087","reference":"d339279f4c4b89477e0f4a8b775eb5dcb86b3087","shasum":""},"time":"2019-12-18T10:34:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.1"}},{"version":"8.8.0","version_normalized":"8.8.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c4890669449ccbab770818de9c9cb7a9f0ffc32e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c4890669449ccbab770818de9c9cb7a9f0ffc32e","reference":"c4890669449ccbab770818de9c9cb7a9f0ffc32e","shasum":""},"time":"2019-12-04T08:44:18+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.3","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.8"},"support":{"source":"https://github.com/drupal/core/tree/8.8.0"}},{"version":"8.8.0-rc1","version_normalized":"8.8.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2e16925020254f876c0ba3a4e11c4cd9ccbc6856"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2e16925020254f876c0ba3a4e11c4cd9ccbc6856","reference":"2e16925020254f876c0ba3a4e11c4cd9ccbc6856","shasum":""},"time":"2019-11-22T22:29:01+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.0-rc1"}},{"version":"8.8.0-beta1","version_normalized":"8.8.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6017c881bc0cec2d096a1e9d31c36f6a06e1f560"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6017c881bc0cec2d096a1e9d31c36f6a06e1f560","reference":"6017c881bc0cec2d096a1e9d31c36f6a06e1f560","shasum":""},"time":"2019-11-08T23:22:14+00:00","support":{"source":"https://github.com/drupal/core/tree/8.8.0-beta1"}},{"version":"8.8.0-alpha1","version_normalized":"8.8.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aa2ea999ca5d2173f14b5030dfba81bec41f5e09"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aa2ea999ca5d2173f14b5030dfba81bec41f5e09","reference":"aa2ea999ca5d2173f14b5030dfba81bec41f5e09","shasum":""},"time":"2019-10-17T23:33:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":">=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^3.1.2","twig/twig":"^1.38.2","doctrine/common":"^2.7","doctrine/annotations":"^1.4","guzzlehttp/guzzle":"^6.3","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.12","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":">=1.7 <1.8","composer/semver":"^1.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.5"},"conflict":{"drush/drush":"<8.1.10"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/claro":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-file-security":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.8.0-alpha1"}},{"version":"8.7.14","version_normalized":"8.7.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326","reference":"3ff1fbdd6e9ba8c778d8111e1f06c8a71113b326","shasum":""},"time":"2020-05-20T08:22:34+00:00","extra":{"merge-plugin":{"require":["core/lib/Drupal/Component/Annotation/composer.json","core/lib/Drupal/Component/Assertion/composer.json","core/lib/Drupal/Component/Bridge/composer.json","core/lib/Drupal/Component/ClassFinder/composer.json","core/lib/Drupal/Component/Datetime/composer.json","core/lib/Drupal/Component/DependencyInjection/composer.json","core/lib/Drupal/Component/Diff/composer.json","core/lib/Drupal/Component/Discovery/composer.json","core/lib/Drupal/Component/EventDispatcher/composer.json","core/lib/Drupal/Component/FileCache/composer.json","core/lib/Drupal/Component/FileSystem/composer.json","core/lib/Drupal/Component/Gettext/composer.json","core/lib/Drupal/Component/Graph/composer.json","core/lib/Drupal/Component/HttpFoundation/composer.json","core/lib/Drupal/Component/PhpStorage/composer.json","core/lib/Drupal/Component/Plugin/composer.json","core/lib/Drupal/Component/ProxyBuilder/composer.json","core/lib/Drupal/Component/Render/composer.json","core/lib/Drupal/Component/Serialization/composer.json","core/lib/Drupal/Component/Transliteration/composer.json","core/lib/Drupal/Component/Utility/composer.json","core/lib/Drupal/Component/Uuid/composer.json","core/lib/Drupal/Component/Version/composer.json"],"recurse":false,"replace":false,"merge-extra":false}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4.9"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.3.1","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.7","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0","justinrainbow/json-schema":"^5.2"},"conflict":{"drush/drush":"<8.1.10","symfony/dom-crawler":">=4"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/jsonapi":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.7.14"}},{"version":"8.7.13","version_normalized":"8.7.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e31ff52ba598ed97f83379ca6444efc2ffcbae62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e31ff52ba598ed97f83379ca6444efc2ffcbae62","reference":"e31ff52ba598ed97f83379ca6444efc2ffcbae62","shasum":""},"time":"2020-04-02T19:05:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.13"}},{"version":"8.7.12","version_normalized":"8.7.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"412ac47f5a17a718617a844504db15208ff61245"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/412ac47f5a17a718617a844504db15208ff61245","reference":"412ac47f5a17a718617a844504db15208ff61245","shasum":""},"time":"2020-03-18T16:27:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.12"}},{"version":"8.7.11","version_normalized":"8.7.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a691876294fadc2795a8add96359b5ffc109d7f2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a691876294fadc2795a8add96359b5ffc109d7f2","reference":"a691876294fadc2795a8add96359b5ffc109d7f2","shasum":""},"time":"2019-12-18T08:55:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.11"}},{"version":"8.7.10","version_normalized":"8.7.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"02400f3ac4970b218dc63064895b3cbbe8576ad9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/02400f3ac4970b218dc63064895b3cbbe8576ad9","reference":"02400f3ac4970b218dc63064895b3cbbe8576ad9","shasum":""},"time":"2019-11-13T23:20:55+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.1.2","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.10"}},{"version":"8.7.9","version_normalized":"8.7.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"881e60062ea86a8f6809a298f09f56afd20b3cf3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/881e60062ea86a8f6809a298f09f56afd20b3cf3","reference":"881e60062ea86a8f6809a298f09f56afd20b3cf3","shasum":""},"time":"2019-11-06T18:00:38+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.9"}},{"version":"8.7.8","version_normalized":"8.7.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"476f491b85306c09101106d9b66a5dbe73c21bf0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/476f491b85306c09101106d9b66a5dbe73c21bf0","reference":"476f491b85306c09101106d9b66a5dbe73c21bf0","shasum":""},"time":"2019-10-02T18:41:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.8"}},{"version":"8.7.7","version_normalized":"8.7.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92","reference":"32e1d7a67bbc28f07dc43d9ff692c0e90a4aeb92","shasum":""},"time":"2019-09-04T10:26:35+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0|^9.99.99","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.7"}},{"version":"8.7.6","version_normalized":"8.7.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"39164616332832e1456199d32fc3ed11562f4721"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/39164616332832e1456199d32fc3ed11562f4721","reference":"39164616332832e1456199d32fc3ed11562f4721","shasum":""},"time":"2019-08-07T19:19:20+00:00","conflict":{"drush/drush":"<8.1.10"},"support":{"source":"https://github.com/drupal/core/tree/8.7.6"}},{"version":"8.7.5","version_normalized":"8.7.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"12cea52c782bb76e666c54c2a65cd3946daa3613"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/12cea52c782bb76e666c54c2a65cd3946daa3613","reference":"12cea52c782bb76e666c54c2a65cd3946daa3613","shasum":""},"time":"2019-07-16T16:24:57+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.5"}},{"version":"8.7.4","version_normalized":"8.7.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a6d447d41545323f54c5034e551fb43b8050eca9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a6d447d41545323f54c5034e551fb43b8050eca9","reference":"a6d447d41545323f54c5034e551fb43b8050eca9","shasum":""},"time":"2019-07-04T07:26:51+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.4"}},{"version":"8.7.3","version_normalized":"8.7.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b8ca92d4274048aff6bb020c329596c0e9b91269"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b8ca92d4274048aff6bb020c329596c0e9b91269","reference":"b8ca92d4274048aff6bb020c329596c0e9b91269","shasum":""},"time":"2019-06-05T19:21:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.3"}},{"version":"8.7.2","version_normalized":"8.7.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9","reference":"31c01fe3b4eb8817e8ef127382a67c9e9d78e1a9","shasum":""},"time":"2019-05-23T07:22:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.x"}},{"version":"8.7.1","version_normalized":"8.7.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"969f24810fb31eac71dd624de593f551bd6dc2a3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/969f24810fb31eac71dd624de593f551bd6dc2a3","reference":"969f24810fb31eac71dd624de593f551bd6dc2a3","shasum":""},"time":"2019-05-08T16:00:55+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.1"}},{"version":"8.7.0","version_normalized":"8.7.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5da135abcf5dbc0204e9a75c87381c7553a74d5e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5da135abcf5dbc0204e9a75c87381c7553a74d5e","reference":"5da135abcf5dbc0204e9a75c87381c7553a74d5e","shasum":""},"time":"2019-05-01T18:39:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0"}},{"version":"8.7.0-rc1","version_normalized":"8.7.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e46d94843a9281b6d72bcf411f3ad6d2647ae2b3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e46d94843a9281b6d72bcf411f3ad6d2647ae2b3","reference":"e46d94843a9281b6d72bcf411f3ad6d2647ae2b3","shasum":""},"time":"2019-04-18T15:48:04+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-rc1"}},{"version":"8.7.0-beta2","version_normalized":"8.7.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bb1c05930162e80277b2cb88eb2d0f647c856946"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bb1c05930162e80277b2cb88eb2d0f647c856946","reference":"bb1c05930162e80277b2cb88eb2d0f647c856946","shasum":""},"time":"2019-04-08T00:25:46+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^2.0","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1","pear/archive_tar":"^1.4"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-beta2"}},{"version":"8.7.0-beta1","version_normalized":"8.7.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aad975103541446bb5da161e011d27474e107c48"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aad975103541446bb5da161e011d27474e107c48","reference":"aad975103541446bb5da161e011d27474e107c48","shasum":""},"time":"2019-03-29T17:36:49+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.0-beta1"}},{"version":"8.7.0-alpha2","version_normalized":"8.7.0.0-alpha2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"01186536523f5a15363ee536c177cf415890a10b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/01186536523f5a15363ee536c177cf415890a10b","reference":"01186536523f5a15363ee536c177cf415890a10b","shasum":""},"time":"2019-03-20T18:08:26+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.7","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/core-version":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.7.0-alpha2"}},{"version":"8.7.0-alpha1","version_normalized":"8.7.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e64e88c0945cb2dfc251b38a7a20266abdf36420"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e64e88c0945cb2dfc251b38a7a20266abdf36420","reference":"e64e88c0945cb2dfc251b38a7a20266abdf36420","shasum":""},"time":"2019-03-14T22:16:29+00:00","support":{"source":"https://github.com/drupal/core/tree/8.7.0-alpha1"}},{"version":"8.6.18","version_normalized":"8.6.18.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"90b77022dd055705369b98ebc7895997096d459f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/90b77022dd055705369b98ebc7895997096d459f","reference":"90b77022dd055705369b98ebc7895997096d459f","shasum":""},"time":"2019-11-13T23:24:48+00:00","extra":{"merge-plugin":{"require":["core/lib/Drupal/Component/Annotation/composer.json","core/lib/Drupal/Component/Assertion/composer.json","core/lib/Drupal/Component/Bridge/composer.json","core/lib/Drupal/Component/ClassFinder/composer.json","core/lib/Drupal/Component/Datetime/composer.json","core/lib/Drupal/Component/DependencyInjection/composer.json","core/lib/Drupal/Component/Diff/composer.json","core/lib/Drupal/Component/Discovery/composer.json","core/lib/Drupal/Component/EventDispatcher/composer.json","core/lib/Drupal/Component/FileCache/composer.json","core/lib/Drupal/Component/FileSystem/composer.json","core/lib/Drupal/Component/Gettext/composer.json","core/lib/Drupal/Component/Graph/composer.json","core/lib/Drupal/Component/HttpFoundation/composer.json","core/lib/Drupal/Component/PhpStorage/composer.json","core/lib/Drupal/Component/Plugin/composer.json","core/lib/Drupal/Component/ProxyBuilder/composer.json","core/lib/Drupal/Component/Render/composer.json","core/lib/Drupal/Component/Serialization/composer.json","core/lib/Drupal/Component/Transliteration/composer.json","core/lib/Drupal/Component/Utility/composer.json","core/lib/Drupal/Component/Uuid/composer.json"],"recurse":false,"replace":false,"merge-extra":false}},"require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.27","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/media_library":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_multilingual":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version","drupal/workspaces":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.6.18"}},{"version":"8.6.17","version_normalized":"8.6.17.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"47cb4ad62b01424221d045313d76385cbd19df22"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/47cb4ad62b01424221d045313d76385cbd19df22","reference":"47cb4ad62b01424221d045313d76385cbd19df22","shasum":""},"time":"2019-06-17T07:26:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.17"}},{"version":"8.6.16","version_normalized":"8.6.16.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a9c4c97c7da9ec1a38782912bb06784d28590539"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a9c4c97c7da9ec1a38782912bb06784d28590539","reference":"a9c4c97c7da9ec1a38782912bb06784d28590539","shasum":""},"time":"2019-05-08T16:00:58+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.1.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.16"}},{"version":"8.6.15","version_normalized":"8.6.15.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"936456cdeac25c6bbd2f55b0d587239c6a81ba86"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/936456cdeac25c6bbd2f55b0d587239c6a81ba86","reference":"936456cdeac25c6bbd2f55b0d587239c6a81ba86","shasum":""},"time":"2019-04-17T20:00:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.15"}},{"version":"8.6.14","version_normalized":"8.6.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5","reference":"7f5f0369ffe08478aa0f26bd48dc95bcc9cde4b5","shasum":""},"time":"2019-04-08T01:37:34+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.14"}},{"version":"8.6.13","version_normalized":"8.6.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8d5b80030ac3f13df2d66aeef0ea388fd9a90632"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8d5b80030ac3f13df2d66aeef0ea388fd9a90632","reference":"8d5b80030ac3f13df2d66aeef0ea388fd9a90632","shasum":""},"time":"2019-03-20T06:01:19+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.13"}},{"version":"8.6.12","version_normalized":"8.6.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f81e50dd6145c1d35797eb522f841a96804e9869"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f81e50dd6145c1d35797eb522f841a96804e9869","reference":"f81e50dd6145c1d35797eb522f841a96804e9869","shasum":""},"time":"2019-03-14T22:08:21+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.12"}},{"version":"8.6.11","version_normalized":"8.6.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"95233343dca7d0276b800ec2a1d9a3e7d0fc622d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/95233343dca7d0276b800ec2a1d9a3e7d0fc622d","reference":"95233343dca7d0276b800ec2a1d9a3e7d0fc622d","shasum":""},"time":"2019-03-13T20:52:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.11"}},{"version":"8.6.10","version_normalized":"8.6.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59568ac02948cf075ee8543e6c6d4386ad8daec1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59568ac02948cf075ee8543e6c6d4386ad8daec1","reference":"59568ac02948cf075ee8543e6c6d4386ad8daec1","shasum":""},"time":"2019-02-20T18:35:01+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.10"}},{"version":"8.6.9","version_normalized":"8.6.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cac12e0ec19d5c6fa53778522b3ff4c542f86c8d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cac12e0ec19d5c6fa53778522b3ff4c542f86c8d","reference":"cac12e0ec19d5c6fa53778522b3ff4c542f86c8d","shasum":""},"time":"2019-02-08T12:21:40+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.9"}},{"version":"8.6.8","version_normalized":"8.6.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0e0ccce552859f6fd3aec6b5754ad0d6ede07227"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0e0ccce552859f6fd3aec6b5754ad0d6ede07227","reference":"0e0ccce552859f6fd3aec6b5754ad0d6ede07227","shasum":""},"time":"2019-02-06T15:13:52+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.8"}},{"version":"8.6.7","version_normalized":"8.6.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e0a09bda1da7552204464894811a59387608c9f9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e0a09bda1da7552204464894811a59387608c9f9","reference":"e0a09bda1da7552204464894811a59387608c9f9","shasum":""},"time":"2019-01-16T23:30:03+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.7"}},{"version":"8.6.6","version_normalized":"8.6.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6736973f399a3a9ac8ecd41f3a159e1153f7ee39"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6736973f399a3a9ac8ecd41f3a159e1153f7ee39","reference":"6736973f399a3a9ac8ecd41f3a159e1153f7ee39","shasum":""},"time":"2019-01-15T17:41:52+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.6"}},{"version":"8.6.5","version_normalized":"8.6.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b66c9334d4a4264589c8b8a2fef73eefcb34a26e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b66c9334d4a4264589c8b8a2fef73eefcb34a26e","reference":"b66c9334d4a4264589c8b8a2fef73eefcb34a26e","shasum":""},"time":"2019-01-02T21:52:52+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.5"}},{"version":"8.6.4","version_normalized":"8.6.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4","reference":"652bdf56b5e9e84648ea53ac7b1e7e73e7608ef4","shasum":""},"time":"2018-12-05T11:58:02+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.x"}},{"version":"8.6.3","version_normalized":"8.6.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9e9a1dd9e280ebaf10622217e54448b529167965"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9e9a1dd9e280ebaf10622217e54448b529167965","reference":"9e9a1dd9e280ebaf10622217e54448b529167965","shasum":""},"time":"2018-11-07T14:45:40+00:00"},{"version":"8.6.2","version_normalized":"8.6.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"356292934802bb1aecc478e88a3cba77442d7c62"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/356292934802bb1aecc478e88a3cba77442d7c62","reference":"356292934802bb1aecc478e88a3cba77442d7c62","shasum":""},"time":"2018-10-17T22:19:50+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.5","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.6.2"}},{"version":"8.6.1","version_normalized":"8.6.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970","reference":"1c8b96c89288daf4d145c6dbcf1e8f0d0c9d7970","shasum":""},"time":"2018-09-10T11:50:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.x"}},{"version":"8.6.0","version_normalized":"8.6.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4a2507b102fcedc74507fd372131f2ed72913429"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4a2507b102fcedc74507fd372131f2ed72913429","reference":"4a2507b102fcedc74507fd372131f2ed72913429","shasum":""},"time":"2018-09-05T22:16:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0"}},{"version":"8.6.0-rc1","version_normalized":"8.6.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9","reference":"2b8e6adebc84259f246bd52ef4faa9dcdd64e1b9","shasum":""},"time":"2018-08-17T18:43:58+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0-rc1"}},{"version":"8.6.0-beta2","version_normalized":"8.6.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b0f9c6865588b1f557e15e284514e807452df270"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b0f9c6865588b1f557e15e284514e807452df270","reference":"b0f9c6865588b1f557e15e284514e807452df270","shasum":""},"time":"2018-08-03T11:56:18+00:00","support":{"source":"https://github.com/drupal/core/tree/8.6.0-beta2"}},{"version":"8.6.0-beta1","version_normalized":"8.6.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1ae53a417211bcc024320cba01b4be7a0c3962ba"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1ae53a417211bcc024320cba01b4be7a0c3962ba","reference":"1ae53a417211bcc024320cba01b4be7a0c3962ba","shasum":""},"time":"2018-08-03T04:09:25+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.6.0-beta1"}},{"version":"8.6.0-alpha1","version_normalized":"8.6.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cefeacd9ca768387d42b5fc6b895c41439f4a7f5"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cefeacd9ca768387d42b5fc6b895c41439f4a7f5","reference":"cefeacd9ca768387d42b5fc6b895c41439f4a7f5","shasum":""},"time":"2018-07-19T20:14:40+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_builder":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.6.0-alpha1"}},{"version":"8.5.15","version_normalized":"8.5.15.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"912e7dd0985ece07bd0cff2e213f1423e2627082"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/912e7dd0985ece07bd0cff2e213f1423e2627082","reference":"912e7dd0985ece07bd0cff2e213f1423e2627082","shasum":""},"time":"2019-04-17T20:00:15+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.26","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.26","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","behat/mink-selenium2-driver":"1.3.x-dev","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.5.15"}},{"version":"8.5.14","version_normalized":"8.5.14.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59b22210b8d4602a35529cca82a543a631933423"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59b22210b8d4602a35529cca82a543a631933423","reference":"59b22210b8d4602a35529cca82a543a631933423","shasum":""},"time":"2019-03-20T06:01:22+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.38.2","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.14"}},{"version":"8.5.13","version_normalized":"8.5.13.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2737f8d6165fcb509846c8232bbedfe152b90c02"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2737f8d6165fcb509846c8232bbedfe152b90c02","reference":"2737f8d6165fcb509846c8232bbedfe152b90c02","shasum":""},"time":"2019-03-14T22:09:26+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.13"}},{"version":"8.5.12","version_normalized":"8.5.12.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f61bb0ec95b958befa0f59430614d1f5718860bf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f61bb0ec95b958befa0f59430614d1f5718860bf","reference":"f61bb0ec95b958befa0f59430614d1f5718860bf","shasum":""},"time":"2019-03-13T20:58:57+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.12"}},{"version":"8.5.11","version_normalized":"8.5.11.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3750c5b2e39857825a2631179d0b9a06b240193f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3750c5b2e39857825a2631179d0b9a06b240193f","reference":"3750c5b2e39857825a2631179d0b9a06b240193f","shasum":""},"time":"2019-02-20T18:35:05+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","typo3/phar-stream-wrapper":"^2.0.1","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.11"}},{"version":"8.5.10","version_normalized":"8.5.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"596f97e4d55dae28e00605d9825529bd8b8ad382"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/596f97e4d55dae28e00605d9825529bd8b8ad382","reference":"596f97e4d55dae28e00605d9825529bd8b8ad382","shasum":""},"time":"2019-01-16T23:30:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.10"}},{"version":"8.5.9","version_normalized":"8.5.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bf8e511b751e3e2147c4009f28167f5545c13e31"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bf8e511b751e3e2147c4009f28167f5545c13e31","reference":"bf8e511b751e3e2147c4009f28167f5545c13e31","shasum":""},"time":"2019-01-15T17:41:56+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.9"}},{"version":"8.5.8","version_normalized":"8.5.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"01703d6f3995fcaa9c67bb02c524d7061dc040b4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/01703d6f3995fcaa9c67bb02c524d7061dc040b4","reference":"01703d6f3995fcaa9c67bb02c524d7061dc040b4","shasum":""},"time":"2018-10-17T22:19:47+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.14","symfony/http-kernel":"~3.4.14","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.8"}},{"version":"8.5.7","version_normalized":"8.5.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d8bdf376c0549e9bfc33030157b498df4b9bec87"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d8bdf376c0549e9bfc33030157b498df4b9bec87","reference":"d8bdf376c0549e9bfc33030157b498df4b9bec87","shasum":""},"time":"2018-09-05T22:26:39+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.7"}},{"version":"8.5.6","version_normalized":"8.5.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7d7184a69ac90ce53929ce99f18458043416107a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7d7184a69ac90ce53929ce99f18458043416107a","reference":"7d7184a69ac90ce53929ce99f18458043416107a","shasum":""},"time":"2018-08-01T20:50:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.6"}},{"version":"8.5.5","version_normalized":"8.5.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"900c28f19d4b5643f43c1cf046684046402eaac4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/900c28f19d4b5643f43c1cf046684046402eaac4","reference":"900c28f19d4b5643f43c1cf046684046402eaac4","shasum":""},"time":"2018-07-04T21:08:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.5","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.5"}},{"version":"8.5.4","version_normalized":"8.5.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6b4dc1cf3347761f63152a31786b4680b8ac7781"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6b4dc1cf3347761f63152a31786b4680b8ac7781","reference":"6b4dc1cf3347761f63152a31786b4680b8ac7781","shasum":""},"time":"2018-06-06T21:02:51+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.4"}},{"version":"8.5.3","version_normalized":"8.5.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b012f0ae51504880e920f2c6efdbdf03b6fe2129"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b012f0ae51504880e920f2c6efdbdf03b6fe2129","reference":"b012f0ae51504880e920f2c6efdbdf03b6fe2129","shasum":""},"time":"2018-04-25T15:39:01+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.3"}},{"version":"8.5.2","version_normalized":"8.5.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bc21760d4be4ad117851809183c8d18880ab275a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bc21760d4be4ad117851809183c8d18880ab275a","reference":"bc21760d4be4ad117851809183c8d18880ab275a","shasum":""},"time":"2018-04-18T17:00:56+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.2"}},{"version":"8.5.1","version_normalized":"8.5.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"2aeca7dfa2661296602ac16bf9fd6085f0a121be"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/2aeca7dfa2661296602ac16bf9fd6085f0a121be","reference":"2aeca7dfa2661296602ac16bf9fd6085f0a121be","shasum":""},"time":"2018-03-27T09:58:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.1"}},{"version":"8.5.0","version_normalized":"8.5.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0b9070370e272da441b4be52561c559c05f4553d"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0b9070370e272da441b4be52561c559c05f4553d","reference":"0b9070370e272da441b4be52561c559c05f4553d","shasum":""},"time":"2018-03-07T21:10:20+00:00","support":{"source":"https://github.com/drupal/core/tree/8.5.0"}},{"version":"8.5.0-rc1","version_normalized":"8.5.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a8897035912d10ecd7930ab15ee1b229746f3db9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a8897035912d10ecd7930ab15ee1b229746f3db9","reference":"a8897035912d10ecd7930ab15ee1b229746f3db9","shasum":""},"time":"2018-02-21T17:08:11+00:00","require":{"ext-date":"*","ext-dom":"*","ext-filter":"*","ext-gd":"*","ext-hash":"*","ext-json":"*","ext-pcre":"*","ext-pdo":"*","ext-session":"*","ext-simplexml":"*","ext-spl":"*","ext-tokenizer":"*","ext-xml":"*","php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.0","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-rc1"}},{"version":"8.5.0-beta1","version_normalized":"8.5.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a32b4341c46d4e3c4ebb4328375ce2510cf576a7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a32b4341c46d4e3c4ebb4328375ce2510cf576a7","reference":"a32b4341c46d4e3c4ebb4328375ce2510cf576a7","shasum":""},"time":"2018-02-09T21:09:34+00:00","require":{"php":"^5.5.9|>=7.0.8","symfony/class-loader":"~3.4.0","symfony/console":"~3.4.0","symfony/dependency-injection":"~3.4.0","symfony/event-dispatcher":"~3.4.0","symfony/http-foundation":"~3.4.0","symfony/http-kernel":"~3.4.0","symfony/routing":"~3.4.0","symfony/serializer":"~3.4.0","symfony/translation":"~3.4.0","symfony/validator":"~3.4.0","symfony/process":"~3.4.0","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.4.0","twig/twig":"^1.35.0","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0","behat/mink-selenium2-driver":"^1.3"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-beta1"}},{"version":"8.5.0-alpha1","version_normalized":"8.5.0.0-alpha1","license":["GPL-2.0+"],"source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"affe6a6651a416bd998acc8840e7ce5f08c2d0e2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/affe6a6651a416bd998acc8840e7ce5f08c2d0e2","reference":"affe6a6651a416bd998acc8840e7ce5f08c2d0e2","shasum":""},"time":"2018-01-18T23:47:28+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":"^4.8.35 || ^6.1","phpspec/prophecy":"^1.4","symfony/css-selector":"^3.4.0","symfony/phpunit-bridge":"^3.4.3","symfony/debug":"^3.4.0"},"support":{"source":"https://github.com/drupal/core/tree/8.5.0-alpha1"},"extra":"__unset"},{"version":"8.4.8","version_normalized":"8.4.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878","reference":"3fed96d0c2d9c922c6ec2e4cbbfdf2d50f4c9878","shasum":""},"time":"2018-04-25T15:39:04+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~3.2.8","symfony/console":"~3.2.8","symfony/dependency-injection":"~3.2.8","symfony/event-dispatcher":"~3.2.8","symfony/http-foundation":"~3.2.8","symfony/http-kernel":"~3.2.8","symfony/routing":"~3.2.8","symfony/serializer":"~3.2.8","symfony/translation":"~3.2.8","symfony/validator":"~3.2.8","symfony/process":"~3.2.8","symfony/polyfill-iconv":"^1.0","symfony/yaml":"~3.2.8","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":">=4.8.35 <5","phpspec/prophecy":"^1.4","symfony/css-selector":"~3.2.8","symfony/phpunit-bridge":"~3.2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-class-finder":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.8"}},{"version":"8.4.7","version_normalized":"8.4.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9","reference":"07c7a7fa28a5a2940e721d1a35a05199ad8e3ec9","shasum":""},"time":"2018-04-18T17:19:54+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.7"}},{"version":"8.4.6","version_normalized":"8.4.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f439a43c7da1df8d16067f797c0bc3498eb4c699"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f439a43c7da1df8d16067f797c0bc3498eb4c699","reference":"f439a43c7da1df8d16067f797c0bc3498eb4c699","shasum":""},"time":"2018-03-27T10:03:10+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.6"}},{"version":"8.4.5","version_normalized":"8.4.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"44a857df6f7ffd063cffed9a41767cdc50dd7474"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/44a857df6f7ffd063cffed9a41767cdc50dd7474","reference":"44a857df6f7ffd063cffed9a41767cdc50dd7474","shasum":""},"time":"2018-02-20T21:35:13+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.5"}},{"version":"8.4.4","version_normalized":"8.4.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c6585ffaea5df4ed529e2bdf4371850f8fc3b88c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c6585ffaea5df4ed529e2bdf4371850f8fc3b88c","reference":"c6585ffaea5df4ed529e2bdf4371850f8fc3b88c","shasum":""},"time":"2018-01-03T19:27:53+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.4"}},{"version":"8.4.3","version_normalized":"8.4.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"793cb14c54624b4be160b78f742af44a01cc7b4e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/793cb14c54624b4be160b78f742af44a01cc7b4e","reference":"793cb14c54624b4be160b78f742af44a01cc7b4e","shasum":""},"time":"2017-12-06T22:45:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.3"}},{"version":"8.4.2","version_normalized":"8.4.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"68d25c07b7306340900abc4020c38683a817f0eb"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/68d25c07b7306340900abc4020c38683a817f0eb","reference":"68d25c07b7306340900abc4020c38683a817f0eb","shasum":""},"time":"2017-11-03T13:20:16+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.2"}},{"version":"8.4.1","version_normalized":"8.4.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dbdd31c4e1a21d2188622107c0b856f5c1b0e56e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dbdd31c4e1a21d2188622107c0b856f5c1b0e56e","reference":"dbdd31c4e1a21d2188622107c0b856f5c1b0e56e","shasum":""},"time":"2017-11-01T18:38:24+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.1"}},{"version":"8.4.0","version_normalized":"8.4.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d4be8e12d9e8b4db82ece760c632213247f56fa7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d4be8e12d9e8b4db82ece760c632213247f56fa7","reference":"d4be8e12d9e8b4db82ece760c632213247f56fa7","shasum":""},"time":"2017-10-04T19:25:32+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/settings_tray":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0"}},{"version":"8.4.0-rc2","version_normalized":"8.4.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b2a6d61fe5752a7c8336611852f027f327e329d3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b2a6d61fe5752a7c8336611852f027f327e329d3","reference":"b2a6d61fe5752a7c8336611852f027f327e329d3","shasum":""},"time":"2017-09-20T12:43:15+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.0-rc2"}},{"version":"8.4.0-rc1","version_normalized":"8.4.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c544a05049e028f61d8c85c4cfc5734e6b3863b2"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c544a05049e028f61d8c85c4cfc5734e6b3863b2","reference":"c544a05049e028f61d8c85c4cfc5734e6b3863b2","shasum":""},"time":"2017-09-06T21:12:42+00:00","support":{"source":"https://github.com/drupal/core/tree/8.4.0-rc1"}},{"version":"8.4.0-beta1","version_normalized":"8.4.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"48a043dc25c4b284fe88dff26f2f48360f5d87c8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/48a043dc25c4b284fe88dff26f2f48360f5d87c8","reference":"48a043dc25c4b284fe88dff26f2f48360f5d87c8","shasum":""},"time":"2017-08-17T17:21:44+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/media":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0-beta1"}},{"version":"8.4.0-alpha1","version_normalized":"8.4.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"770b95b3b0667a3c7f138183babf9a1e78426b7e"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/770b95b3b0667a3c7f138183babf9a1e78426b7e","reference":"770b95b3b0667a3c7f138183babf9a1e78426b7e","shasum":""},"time":"2017-08-03T19:24:50+00:00","require":{"php":">=5.5.9","symfony/class-loader":"^3.2","symfony/console":"^3.2","symfony/dependency-injection":"^3.2","symfony/event-dispatcher":"^3.2","symfony/http-foundation":"^3.2","symfony/http-kernel":"^3.2","symfony/routing":"^3.2","symfony/serializer":"^3.2","symfony/translation":"^3.2","symfony/validator":"^3.2","symfony/process":"^3.2","symfony/polyfill-iconv":"^1.0","symfony/yaml":"^3.2","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"^1.2","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"^1.4","easyrdf/easyrdf":"^0.9","zendframework/zend-feed":"^2.4","stack/builder":"^1.0","egulias/email-validator":"^1.2","masterminds/html5":"^2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"^1.1","composer/semver":"^1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"^1.1"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"^1.2","drupal/coder":"^8.2.12","jcalderonzumba/gastonjs":"^1.0.2","jcalderonzumba/mink-phantomjs-driver":"^0.3.1","mikey179/vfsstream":"^1.2","phpunit/phpunit":">=4.8.35 <5","symfony/css-selector":"^3.2","symfony/phpunit-bridge":"^3.2"},"support":{"source":"https://github.com/drupal/core/tree/8.4.0-alpha1"}},{"version":"8.3.9","version_normalized":"8.3.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a83cbc50bf96ab5e8580413f6a359d999e981883"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a83cbc50bf96ab5e8580413f6a359d999e981883","reference":"a83cbc50bf96ab5e8580413f6a359d999e981883","shasum":""},"time":"2018-03-27T10:06:04+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"^2.5","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"^1.0","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.12","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/browser-kit":">=2.8.13 <3.0","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_layout":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/layout_discovery":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version","drupal/workflows":"self.version"},"support":{"source":"https://github.com/drupal/core/tree/8.3.9"}},{"version":"8.3.8","version_normalized":"8.3.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5d991a86fc445ebe71a63eed8804c4209f8794c4"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5d991a86fc445ebe71a63eed8804c4209f8794c4","reference":"5d991a86fc445ebe71a63eed8804c4209f8794c4","shasum":""},"time":"2018-03-12T19:09:32+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.8"}},{"version":"8.3.7","version_normalized":"8.3.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff","reference":"32f66ed9cc593f8e9ab0eaaaeff4cadbd859d5ff","shasum":""},"time":"2017-08-16T17:10:35+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.7"}},{"version":"8.3.6","version_normalized":"8.3.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a6d76c4428ee40cb3f60974ccc19b41feaf58dc0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a6d76c4428ee40cb3f60974ccc19b41feaf58dc0","reference":"a6d76c4428ee40cb3f60974ccc19b41feaf58dc0","shasum":""},"time":"2017-08-02T15:27:39+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.6"}},{"version":"8.3.5","version_normalized":"8.3.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7adfc8c43615258e242868a393e82971a67be51a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7adfc8c43615258e242868a393e82971a67be51a","reference":"7adfc8c43615258e242868a393e82971a67be51a","shasum":""},"time":"2017-07-05T17:03:07+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.5"}},{"version":"8.3.4","version_normalized":"8.3.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f34eee7255142ab5416107972ef13d011f11e163"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f34eee7255142ab5416107972ef13d011f11e163","reference":"f34eee7255142ab5416107972ef13d011f11e163","shasum":""},"time":"2017-06-21T18:13:27+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.4"}},{"version":"8.3.3","version_normalized":"8.3.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"98da955d81c79f1a753536ab9c9dad5f80a72922"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/98da955d81c79f1a753536ab9c9dad5f80a72922","reference":"98da955d81c79f1a753536ab9c9dad5f80a72922","shasum":""},"time":"2017-06-07T17:35:30+00:00","support":{"source":"https://github.com/drupal/core/tree/8.3.3"}},{"version":"8.3.2","version_normalized":"8.3.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"82c432cfe728458538d4826c9c4be57dcf35443b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/82c432cfe728458538d4826c9c4be57dcf35443b","reference":"82c432cfe728458538d4826c9c4be57dcf35443b","shasum":""},"time":"2017-05-03T17:12:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.2"}},{"version":"8.3.1","version_normalized":"8.3.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"53326f9503e5e9e406fab22e4fbae6ddb706f7be"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/53326f9503e5e9e406fab22e4fbae6ddb706f7be","reference":"53326f9503e5e9e406fab22e4fbae6ddb706f7be","shasum":""},"time":"2017-04-19T16:07:22+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.1"},"conflict":"__unset"},{"version":"8.3.0","version_normalized":"8.3.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e503a252ec5c2811abed6af0c7b70afda8e93a3f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e503a252ec5c2811abed6af0c7b70afda8e93a3f","reference":"e503a252ec5c2811abed6af0c7b70afda8e93a3f","shasum":""},"time":"2017-04-06T00:12:44+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0"}},{"version":"8.3.0-rc2","version_normalized":"8.3.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3","reference":"cbf5f87e70b0a2b3fbebf3d175d9252d3237dad3","shasum":""},"time":"2017-03-15T21:19:09+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/dom-crawler":">=2.8.13 <3.0","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1.0|^2.0","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.11","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-rc2"}},{"version":"8.3.0-rc1","version_normalized":"8.3.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"f9f055385da1f94bb255179f7335ed3a5dbdf28f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/f9f055385da1f94bb255179f7335ed3a5dbdf28f","reference":"f9f055385da1f94bb255179f7335ed3a5dbdf28f","shasum":""},"time":"2017-03-01T15:35:49+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.10","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-rc1"}},{"version":"8.3.0-beta1","version_normalized":"8.3.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7b628e88038c32482a5f9552ca400c8cbdef8c1c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7b628e88038c32482a5f9552ca400c8cbdef8c1c","reference":"7b628e88038c32482a5f9552ca400c8cbdef8c1c","shasum":""},"time":"2017-02-15T16:16:18+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-beta1"}},{"version":"8.3.0-alpha1","version_normalized":"8.3.0.0-alpha1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9cf9a8fb5a53674491efcd62f82a70b4cd138aee"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9cf9a8fb5a53674491efcd62f82a70b4cd138aee","reference":"9cf9a8fb5a53674491efcd62f82a70b4cd138aee","shasum":""},"time":"2017-02-01T16:59:40+00:00","require-dev":{"behat/mink":"1.7.x-dev","behat/mink-goutte-driver":"~1.2","drupal/coder":"8.2.8","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.3.0-alpha1"}},{"version":"8.2.8","version_normalized":"8.2.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7ccc248f4058dd5985ad0c61c129243d0d2b58b8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7ccc248f4058dd5985ad0c61c129243d0d2b58b8","reference":"7ccc248f4058dd5985ad0c61c129243d0d2b58b8","shasum":""},"time":"2017-04-19T16:45:52+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"^1|^2","asm89/stack-cors":"~1.0"},"require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":">=4.8.28 <5","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/datetime_range":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.8"}},{"version":"8.2.7","version_normalized":"8.2.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"7e3e9eb8ceb1428d36f8281fccede3c7f6469216"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/7e3e9eb8ceb1428d36f8281fccede3c7f6469216","reference":"7e3e9eb8ceb1428d36f8281fccede3c7f6469216","shasum":""},"time":"2017-03-15T20:19:51+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.7"}},{"version":"8.2.6","version_normalized":"8.2.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"d1b22419f24414def8333861842cd1a8083b24bf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/d1b22419f24414def8333861842cd1a8083b24bf","reference":"d1b22419f24414def8333861842cd1a8083b24bf","shasum":""},"time":"2017-02-01T17:03:36+00:00","require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","symfony/css-selector":"~2.8","phpunit/phpunit":"~4.8"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.6"}},{"version":"8.2.5","version_normalized":"8.2.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"12ec8a14c0cd269af823375bc05b0738b5293e2a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/12ec8a14c0cd269af823375bc05b0738b5293e2a","reference":"12ec8a14c0cd269af823375bc05b0738b5293e2a","shasum":""},"time":"2017-01-04T11:31:35+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.5"}},{"version":"8.2.4","version_normalized":"8.2.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"5365700e0d9632bd7bf257fc0ec5ab0af5755430"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/5365700e0d9632bd7bf257fc0ec5ab0af5755430","reference":"5365700e0d9632bd7bf257fc0ec5ab0af5755430","shasum":""},"time":"2016-12-07T18:31:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.4"}},{"version":"8.2.3","version_normalized":"8.2.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8734c80df2715e9e1aa30bbe16cef820251c9463"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8734c80df2715e9e1aa30bbe16cef820251c9463","reference":"8734c80df2715e9e1aa30bbe16cef820251c9463","shasum":""},"time":"2016-11-16T18:45:36+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"~1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.3"}},{"version":"8.2.2","version_normalized":"8.2.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"65db92a776d426d39c5e60caf163212af5586119"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/65db92a776d426d39c5e60caf163212af5586119","reference":"65db92a776d426d39c5e60caf163212af5586119","shasum":""},"time":"2016-11-02T17:43:45+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.2"}},{"version":"8.2.1","version_normalized":"8.2.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"43f2009dec1957c5dbbe47b9200ce020095192fc"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/43f2009dec1957c5dbbe47b9200ce020095192fc","reference":"43f2009dec1957c5dbbe47b9200ce020095192fc","shasum":""},"time":"2016-10-11T10:18:49+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.1"}},{"version":"8.2.0","version_normalized":"8.2.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b21089ec64c3de37311ba679663d39d62a7a782b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b21089ec64c3de37311ba679663d39d62a7a782b","reference":"b21089ec64c3de37311ba679663d39d62a7a782b","shasum":""},"time":"2016-10-05T09:36:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0"}},{"version":"8.2.0-rc2","version_normalized":"8.2.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"74a5d5a36c304f77644b08a4ed754f26ca772110"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/74a5d5a36c304f77644b08a4ed754f26ca772110","reference":"74a5d5a36c304f77644b08a4ed754f26ca772110","shasum":""},"time":"2016-09-21T18:56:05+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"^1.0|^2.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-rc2"}},{"version":"8.2.0-rc1","version_normalized":"8.2.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"49b794692bb31e241712ad5ef5446befcd206fe3"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/49b794692bb31e241712ad5ef5446befcd206fe3","reference":"49b794692bb31e241712ad5ef5446befcd206fe3","shasum":""},"time":"2016-09-07T21:40:46+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"~1.4","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","asm89/stack-cors":"~1.0","paragonie/random_compat":"~1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-rc1"}},{"version":"8.2.0-beta3","version_normalized":"8.2.0.0-beta3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"0d8af425bbcfa7c6c97fee64f830b2b57888d435"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/0d8af425bbcfa7c6c97fee64f830b2b57888d435","reference":"0d8af425bbcfa7c6c97fee64f830b2b57888d435","shasum":""},"time":"2016-08-26T14:28:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta3"}},{"version":"8.2.0-beta2","version_normalized":"8.2.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dc1d25edb1cedf25287cb1b525f1537f62e95171"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dc1d25edb1cedf25287cb1b525f1537f62e95171","reference":"dc1d25edb1cedf25287cb1b525f1537f62e95171","shasum":""},"time":"2016-08-20T16:29:45+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_moderation":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/outside_in":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta2"}},{"version":"8.2.0-beta1","version_normalized":"8.2.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"aabe310b294af029d56311cb2995970e953ead1f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/aabe310b294af029d56311cb2995970e953ead1f","reference":"aabe310b294af029d56311cb2995970e953ead1f","shasum":""},"time":"2016-08-03T13:18:11+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/block_place":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.2.0-beta1"}},{"version":"8.1.10","version_normalized":"8.1.10.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"feeefdebf0579524ee67fa86860050e25eb92d1c"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/feeefdebf0579524ee67fa86860050e25eb92d1c","reference":"feeefdebf0579524ee67fa86860050e25eb92d1c","shasum":""},"time":"2016-09-21T17:09:42+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"^6.2.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0"},"require-dev":{"behat/mink":"~1.7","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-http-foundation":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-render":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.10"}},{"version":"8.1.9","version_normalized":"8.1.9.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4cdebb9039fa4c9abf22258db41a7343908ec1e6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4cdebb9039fa4c9abf22258db41a7343908ec1e6","reference":"4cdebb9039fa4c9abf22258db41a7343908ec1e6","shasum":""},"time":"2016-09-07T19:16:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.9"}},{"version":"8.1.8","version_normalized":"8.1.8.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"df2199a585b8c0096adc365de7a3ec582f253a8f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/df2199a585b8c0096adc365de7a3ec582f253a8f","reference":"df2199a585b8c0096adc365de7a3ec582f253a8f","shasum":""},"time":"2016-08-03T14:09:08+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.8"}},{"version":"8.1.7","version_normalized":"8.1.7.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b38637330f9759abcdc4af343e59a29a59cc98db"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b38637330f9759abcdc4af343e59a29a59cc98db","reference":"b38637330f9759abcdc4af343e59a29a59cc98db","shasum":""},"time":"2016-07-18T15:01:43+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.2"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-assertion":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-dependency-injection":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.7"}},{"version":"8.1.6","version_normalized":"8.1.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"4f40eff880595ca7d94941cd5b22a861596f5d18"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/4f40eff880595ca7d94941cd5b22a861596f5d18","reference":"4f40eff880595ca7d94941cd5b22a861596f5d18","shasum":""},"time":"2016-07-11T13:07:34+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/polyfill-iconv":"~1.0","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.1"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.6"}},{"version":"8.1.5","version_normalized":"8.1.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"51d414e479fffddb7d235078ff25ea97bb4399e7"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/51d414e479fffddb7d235078ff25ea97bb4399e7","reference":"51d414e479fffddb7d235078ff25ea97bb4399e7","shasum":""},"time":"2016-07-07T09:38:59+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.5"}},{"version":"8.1.4","version_normalized":"8.1.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"1323599cd94da383516771f2da39960e826f83b1"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/1323599cd94da383516771f2da39960e826f83b1","reference":"1323599cd94da383516771f2da39960e826f83b1","shasum":""},"time":"2016-07-05T08:59:22+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.4"}},{"version":"8.1.3","version_normalized":"8.1.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"621df9820f53a560226d86ded801d37641a11bf6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/621df9820f53a560226d86ded801d37641a11bf6","reference":"621df9820f53a560226d86ded801d37641a11bf6","shasum":""},"time":"2016-06-15T20:08:27+00:00","replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-filesystem":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.3"}},{"version":"8.1.2","version_normalized":"8.1.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b","reference":"59125ba44ca1a9008fc18ef7fcd6a7e8e6ca1d0b","shasum":""},"time":"2016-06-01T23:31:24+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.2"}},{"version":"8.1.1","version_normalized":"8.1.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"9d357f0f0916627048fe9fac016dde1685fbffd9"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/9d357f0f0916627048fe9fac016dde1685fbffd9","reference":"9d357f0f0916627048fe9fac016dde1685fbffd9","shasum":""},"time":"2016-05-04T11:20:24+00:00","require-dev":{"behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"~2.8","behat/mink":"~1.6"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/big_pipe":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/migrate_drupal_ui":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.1"}},{"version":"8.1.0","version_normalized":"8.1.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"bacb5b6a9b9695819f15edf12099bd3bb378d75b"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/bacb5b6a9b9695819f15edf12099bd3bb378d75b","reference":"bacb5b6a9b9695819f15edf12099bd3bb378d75b","shasum":""},"time":"2016-04-20T01:34:34+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"],"classmap":["lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php"]},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0"}},{"version":"8.1.0-rc1","version_normalized":"8.1.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a8cde28699b6e131e5454fe0689cb62d228d5d19"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a8cde28699b6e131e5454fe0689cb62d228d5d19","reference":"a8cde28699b6e131e5454fe0689cb62d228d5d19","shasum":""},"time":"2016-04-06T20:58:23+00:00","require-dev":{"behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","behat/mink":"~1.6","symfony/css-selector":"2.7.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-rc1"}},{"version":"8.1.0-beta2","version_normalized":"8.1.0.0-beta2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"396109d5d6f4cff0c1a064591e738fae45201772"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/396109d5d6f4cff0c1a064591e738fae45201772","reference":"396109d5d6f4cff0c1a064591e738fae45201772","shasum":""},"time":"2016-03-23T02:19:35+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-beta2"}},{"version":"8.1.0-beta1","version_normalized":"8.1.0.0-beta1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"dd636ef74fe482f1f253ab5410463c02cd7f5e36"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/dd636ef74fe482f1f253ab5410463c02cd7f5e36","reference":"dd636ef74fe482f1f253ab5410463c02cd7f5e36","shasum":""},"time":"2016-03-03T03:26:59+00:00","require":{"php":">=5.5.9","symfony/class-loader":"~2.8","symfony/console":"~2.8","symfony/dependency-injection":"~2.8","symfony/event-dispatcher":"~2.8","symfony/http-foundation":"~2.8","symfony/http-kernel":"~2.8","symfony/routing":"~2.8","symfony/serializer":"~2.8","symfony/translation":"~2.8","symfony/validator":"~2.8","symfony/process":"~2.8","symfony/yaml":"~2.8","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","paragonie/random_compat":"~1.0","guzzlehttp/guzzle":"~6.1"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.1.0-beta1"}},{"version":"8.0.6","version_normalized":"8.0.6.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"cc6ff1fc4067c674db839eb7bec0517d756c39c8"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/cc6ff1fc4067c674db839eb7bec0517d756c39c8","reference":"cc6ff1fc4067c674db839eb7bec0517d756c39c8","shasum":""},"time":"2016-04-05T23:34:17+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","twig/twig":"^1.23.1","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0"},"require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","jcalderonzumba/gastonjs":"~1.0.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/inline_form_errors":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.6"}},{"version":"8.0.5","version_normalized":"8.0.5.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a3aa1ee0153eefebd1d0163bb49a18e907ae8dac"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a3aa1ee0153eefebd1d0163bb49a18e907ae8dac","reference":"a3aa1ee0153eefebd1d0163bb49a18e907ae8dac","shasum":""},"time":"2016-03-02T10:31:56+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.5"}},{"version":"8.0.4","version_normalized":"8.0.4.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"c68a2e5ace8dded85af775fb1ee83706ba5f38de"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/c68a2e5ace8dded85af775fb1ee83706ba5f38de","reference":"c68a2e5ace8dded85af775fb1ee83706ba5f38de","shasum":""},"time":"2016-02-24T18:59:52+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","jcalderonzumba/mink-phantomjs-driver":"~0.3.1","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*","jcalderonzumba/gastonjs":"^1.1@dev"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.4"}},{"version":"8.0.3","version_normalized":"8.0.3.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab","reference":"b7c8c7f24de4b31f4047f48c26d9eb23ce3a81ab","shasum":""},"time":"2016-02-03T08:47:36+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.3"}},{"version":"8.0.2","version_normalized":"8.0.2.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"fb5230be7507dda09eb3b246a6d51bda85258d6a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/fb5230be7507dda09eb3b246a6d51bda85258d6a","reference":"fb5230be7507dda09eb3b246a6d51bda85258d6a","shasum":""},"time":"2016-01-06T22:36:23+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.2"}},{"version":"8.0.1","version_normalized":"8.0.1.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"6741bb0c474fb03cf2562524f19e5678df70dc52"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/6741bb0c474fb03cf2562524f19e5678df70dc52","reference":"6741bb0c474fb03cf2562524f19e5678df70dc52","shasum":""},"time":"2015-12-02T14:08:29+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*","jcalderonzumba/gastonjs":"^1.1@dev","jcalderonzumba/mink-phantomjs-driver":"dev-master#10d7c48c9a4129463052321b52450d98983c4332"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.1"}},{"version":"8.0.0","version_normalized":"8.0.0.0","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"344b81f442bfe136a515c864c6d1d5eb7bb711de"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/344b81f442bfe136a515c864c6d1d5eb7bb711de","reference":"344b81f442bfe136a515c864c6d1d5eb7bb711de","shasum":""},"time":"2015-11-19T14:02:15+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0"}},{"version":"8.0.0-rc4","version_normalized":"8.0.0.0-RC4","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba","reference":"8dd9b5cf4e36d5a78757668eb5eb7078da3c66ba","shasum":""},"time":"2015-11-13T11:21:34+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc4"}},{"version":"8.0.0-rc3","version_normalized":"8.0.0.0-RC3","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e82f1217d4695799b45cd38110530c70a24a4a3f"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e82f1217d4695799b45cd38110530c70a24a4a3f","reference":"e82f1217d4695799b45cd38110530c70a24a4a3f","shasum":""},"time":"2015-11-04T10:15:22+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","composer/semver":"~1.0","twig/twig":"^1.22.2"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc3"}},{"version":"8.0.0-rc2","version_normalized":"8.0.0.0-RC2","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"80b12982cf84a9dec175ec86c9ef6a1eb0a40984"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/80b12982cf84a9dec175ec86c9ef6a1eb0a40984","reference":"80b12982cf84a9dec175ec86c9ef6a1eb0a40984","shasum":""},"time":"2015-10-21T22:51:01+00:00","require-dev":{"behat/mink":"~1.6","behat/mink-goutte-driver":"~1.2","mikey179/vfsstream":"~1.2","phpunit/phpunit":"~4.8","symfony/css-selector":"2.7.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/automated_cron":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc2"}},{"version":"8.0.0-rc1","version_normalized":"8.0.0.0-RC1","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b42c200a1452a9ff309e3e30e171373ad71cbb97"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b42c200a1452a9ff309e3e30e171373ad71cbb97","reference":"b42c200a1452a9ff309e3e30e171373ad71cbb97","shasum":""},"time":"2015-10-07T21:20:43+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-rc1"}},{"version":"8.0.0-beta16","version_normalized":"8.0.0.0-beta16","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"563da4c404d12f24ee8ee9098ca05875af613c58"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/563da4c404d12f24ee8ee9098ca05875af613c58","reference":"563da4c404d12f24ee8ee9098ca05875af613c58","shasum":""},"time":"2015-10-02T00:39:06+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-foundation":"~2.7.2","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/common":"2.5.*","doctrine/annotations":"1.2.*","guzzlehttp/guzzle":"~6.1","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","zendframework/zend-feed":"~2.4","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","zendframework/zend-diactoros":"~1.1","twig/twig":"^1.22.2"},"require-dev":{"behat/mink":"~1.6","mikey179/vfsstream":"~1.2","symfony/css-selector":"2.7.*","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","phpunit/phpunit":"4.8.*"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/dynamic_page_cache":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta16"}},{"version":"8.0.0-beta15","version_normalized":"8.0.0.0-beta15","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b6013eba2dfacc04ffc855b9547b3f258f0e8066"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b6013eba2dfacc04ffc855b9547b3f258f0e8066","reference":"b6013eba2dfacc04ffc855b9547b3f258f0e8066","shasum":""},"time":"2015-09-04T08:56:05+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.20.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"dev-master#1879fbe853b0c64d109e369c7aeff09849e62d1e","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"~1.2","behat/mink":"~1.6","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","fabpot/goutte":"~3.1","zendframework/zend-diactoros":"1.1.0"},"replace":{"drupal/action":"self.version","drupal/aggregator":"self.version","drupal/bartik":"self.version","drupal/ban":"self.version","drupal/basic_auth":"self.version","drupal/block":"self.version","drupal/block_content":"self.version","drupal/book":"self.version","drupal/breakpoint":"self.version","drupal/ckeditor":"self.version","drupal/classy":"self.version","drupal/color":"self.version","drupal/comment":"self.version","drupal/config":"self.version","drupal/config_translation":"self.version","drupal/contact":"self.version","drupal/content_translation":"self.version","drupal/contextual":"self.version","drupal/core-annotation":"self.version","drupal/core-bridge":"self.version","drupal/core-datetime":"self.version","drupal/core-diff":"self.version","drupal/core-discovery":"self.version","drupal/core-event-dispatcher":"self.version","drupal/core-file-cache":"self.version","drupal/core-gettext":"self.version","drupal/core-graph":"self.version","drupal/core-php-storage":"self.version","drupal/core-plugin":"self.version","drupal/core-proxy-builder":"self.version","drupal/core-serialization":"self.version","drupal/core-transliteration":"self.version","drupal/core-utility":"self.version","drupal/core-uuid":"self.version","drupal/datetime":"self.version","drupal/dblog":"self.version","drupal/editor":"self.version","drupal/entity_reference":"self.version","drupal/field":"self.version","drupal/field_ui":"self.version","drupal/file":"self.version","drupal/filter":"self.version","drupal/forum":"self.version","drupal/hal":"self.version","drupal/help":"self.version","drupal/history":"self.version","drupal/image":"self.version","drupal/language":"self.version","drupal/link":"self.version","drupal/locale":"self.version","drupal/minimal":"self.version","drupal/menu_link_content":"self.version","drupal/menu_ui":"self.version","drupal/migrate":"self.version","drupal/migrate_drupal":"self.version","drupal/node":"self.version","drupal/options":"self.version","drupal/page_cache":"self.version","drupal/path":"self.version","drupal/quickedit":"self.version","drupal/rdf":"self.version","drupal/responsive_image":"self.version","drupal/rest":"self.version","drupal/search":"self.version","drupal/serialization":"self.version","drupal/seven":"self.version","drupal/shortcut":"self.version","drupal/simpletest":"self.version","drupal/standard":"self.version","drupal/stark":"self.version","drupal/statistics":"self.version","drupal/syslog":"self.version","drupal/system":"self.version","drupal/taxonomy":"self.version","drupal/telephone":"self.version","drupal/text":"self.version","drupal/toolbar":"self.version","drupal/tour":"self.version","drupal/tracker":"self.version","drupal/update":"self.version","drupal/user":"self.version","drupal/views":"self.version","drupal/views_ui":"self.version"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta15"},"require-dev":"__unset"},{"version":"8.0.0-beta14","version_normalized":"8.0.0.0-beta14","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"a346886d5f85f93a90f306bc3b814ddca1ed7cd6"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/a346886d5f85f93a90f306bc3b814ddca1ed7cd6","reference":"a346886d5f85f93a90f306bc3b814ddca1ed7cd6","shasum":""},"time":"2015-08-03T09:10:38+00:00","require":{"php":">=5.5.9","symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","symfony/psr-http-message-bridge":"v0.2","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"dev-master#1879fbe853b0c64d109e369c7aeff09849e62d1e","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"~1.2","behat/mink":"~1.6","behat/mink-goutte-driver":"dev-master#cc5ce119b5a8e06662f634b35967aff0b0c7dfdd","fabpot/goutte":"~3.1","zendframework/zend-diactoros":"1.1.0"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta14"}},{"version":"8.0.0-beta13","version_normalized":"8.0.0.0-beta13","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"39062bf24f3cfa996dbc0a009fc64dec14624c60"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/39062bf24f3cfa996dbc0a009fc64dec14624c60","reference":"39062bf24f3cfa996dbc0a009fc64dec14624c60","shasum":""},"time":"2015-07-29T18:06:42+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta13"}},{"version":"8.0.0-beta12","version_normalized":"8.0.0.0-beta12","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e0f5550ea38bd53d05512f078e0cf5c413c7bda0"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e0f5550ea38bd53d05512f078e0cf5c413c7bda0","reference":"e0f5550ea38bd53d05512f078e0cf5c413c7bda0","shasum":""},"time":"2015-06-29T18:12:48+00:00","require":{"symfony/class-loader":"2.7.*","symfony/console":"2.7.*","symfony/dependency-injection":"2.7.*","symfony/event-dispatcher":"2.7.*","symfony/http-kernel":"2.7.*","symfony/routing":"2.7.*","symfony/serializer":"2.7.*","symfony/translation":"2.7.*","symfony/validator":"2.7.*","symfony/process":"2.7.*","symfony/yaml":"2.7.*","doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/css-selector":"2.7.*","symfony/http-foundation":"2.7.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta12"}},{"version":"8.0.0-beta11","version_normalized":"8.0.0.0-beta11","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"b2d77934d1a82c8c285cbe44ab2f62418a86b93a"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/b2d77934d1a82c8c285cbe44ab2f62418a86b93a","reference":"b2d77934d1a82c8c285cbe44ab2f62418a86b93a","shasum":""},"time":"2015-05-27T20:26:08+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*@dev","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.6.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta11"},"replace":"__unset"},{"version":"8.0.0-beta10","version_normalized":"8.0.0.0-beta10","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"fc83f4c32a4fda2a755b07ee47935d8d6f596578"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/fc83f4c32a4fda2a755b07ee47935d8d6f596578","reference":"fc83f4c32a4fda2a755b07ee47935d8d6f596578","shasum":""},"time":"2015-04-29T13:28:43+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.18.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.4.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta10"}},{"version":"8.0.0-beta9","version_normalized":"8.0.0.0-beta9","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"600d79f984f2ab37a72cfe1c7c766d4b320ba926"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/600d79f984f2ab37a72cfe1c7c766d4b320ba926","reference":"600d79f984f2ab37a72cfe1c7c766d4b320ba926","shasum":""},"time":"2015-03-25T16:13:13+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"],"classmap":["lib/Drupal/Component/Utility/Timer.php","lib/Drupal/Component/Utility/Unicode.php","lib/Drupal/Core/Database/Database.php","lib/Drupal/Core/DrupalKernel.php","lib/Drupal/Core/DrupalKernelInterface.php","lib/Drupal/Core/Site/Settings.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ParameterBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ServerBag.php","vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernelInterface.php","vendor/symfony/http-kernel/Symfony/Component/HttpKernel/TerminableInterface.php"]},"require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","masterminds/html5":"~2.1","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*","behat/mink":"~1.6","behat/mink-goutte-driver":"~1.1","fabpot/goutte":"^2.0.3"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta9"}},{"version":"8.0.0-beta8","version_normalized":"8.0.0.0-beta8","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"529c681e48f03884cb6c30ac5a0aac37346e8266"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/529c681e48f03884cb6c30ac5a0aac37346e8266","reference":"529c681e48f03884cb6c30ac5a0aac37346e8266","shasum":""},"time":"2015-03-24T23:50:56+00:00","support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta8"}},{"version":"8.0.0-beta7","version_normalized":"8.0.0.0-beta7","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"292329995117fe5ce3cd4e3b8f68bb577e522617"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/292329995117fe5ce3cd4e3b8f68bb577e522617","reference":"292329995117fe5ce3cd4e3b8f68bb577e522617","shasum":""},"time":"2015-02-24T23:52:34+00:00","require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"~2.4.2","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta7"}},{"version":"8.0.0-beta6","version_normalized":"8.0.0.0-beta6","source":{"type":"git","url":"https://github.com/drupal/core.git","reference":"e9174812eb5816f9d9c03b4552a9af5a8f7782cf"},"dist":{"type":"zip","url":"https://api.github.com/repos/drupal/core/zipball/e9174812eb5816f9d9c03b4552a9af5a8f7782cf","reference":"e9174812eb5816f9d9c03b4552a9af5a8f7782cf","shasum":""},"time":"2015-01-28T10:55:26+00:00","autoload":{"psr-4":{"Drupal\\Core\\":"lib/Drupal/Core","Drupal\\Component\\":"lib/Drupal/Component","Drupal\\Driver\\":"../drivers/lib/Drupal/Driver"},"files":["lib/Drupal.php"]},"require":{"doctrine/annotations":"1.2.*","symfony-cmf/routing":"1.3.*","easyrdf/easyrdf":"0.9.*","stack/builder":"1.0.*","egulias/email-validator":"1.2.*","php":">=5.4.5","sdboyer/gliph":"0.1.*","symfony/class-loader":"2.6.*","symfony/css-selector":"2.6.*","symfony/dependency-injection":"2.6.*","symfony/event-dispatcher":"2.6.*","symfony/http-foundation":"2.6.*","symfony/http-kernel":"2.6.*","symfony/routing":"2.6.*","symfony/serializer":"2.6.*","symfony/validator":"2.6.*","symfony/process":"2.6.*","symfony/yaml":"2.6.*","twig/twig":"1.16.*","doctrine/common":"dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5","guzzlehttp/guzzle":"~5.0","phpunit/phpunit":"4.4.*","phpunit/phpunit-mock-objects":"dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2","zendframework/zend-feed":"2.3.*","mikey179/vfsstream":"1.*"},"support":{"issues":"https://github.com/drupal/core/issues","source":"https://github.com/drupal/core/tree/8.0.0-beta6"}}]},"minified":"composer/2.0"} \ No newline at end of file diff --git a/fixtures/targets/packages.json b/fixtures/targets/packages.json index cc4e9dd..56d18ab 100644 --- a/fixtures/targets/packages.json +++ b/fixtures/targets/packages.json @@ -2,6 +2,4 @@ "packages": [], "metadata-url": "/p2/%package%.json", "available-package-regexes": ["drupal/*"], - "search": "https://packagist.org/search.json?q=%query%&type=%type%", - "providers-api": "https://packagist.org/providers/%package%.json" } diff --git a/fixtures/test-project/composer.json b/fixtures/test-project/composer.json index 01de52f..5e1cbd8 100644 --- a/fixtures/test-project/composer.json +++ b/fixtures/test-project/composer.json @@ -5,12 +5,9 @@ "repositories": [ { "type": "composer", - "url": "http://localhost:8080/composer-repo/root.json", - "allow_ssl_downgrade": true, + "url": "http://localhost:8080", "tuf": { - "url": "http://localhost:8080/tuf-repo/tufrepo", - "initial-root-file": "tuf-root.json", - "unsafely-update-root-if-necessary": true + "root": "tuf-root.json" } }, { @@ -23,10 +20,6 @@ } ], "minimum-stability": "dev", - "require": { - "drupal/core": "^8.0", - "php-tuf/composer-integration": "dev-main" - }, "config": { "secure-http": false } From 6ea7f06cd8f68f5e169f18e5ef5abd13ac9fc7d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Fri, 2 Apr 2021 10:54:38 -0400 Subject: [PATCH 37/50] Fix typo in packages.json --- fixtures/targets/packages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fixtures/targets/packages.json b/fixtures/targets/packages.json index 56d18ab..a269296 100644 --- a/fixtures/targets/packages.json +++ b/fixtures/targets/packages.json @@ -1,5 +1,5 @@ { "packages": [], "metadata-url": "/p2/%package%.json", - "available-package-regexes": ["drupal/*"], + "available-package-regexes": ["drupal/*"] } From fd5d022b101b663e5b327fc59da0359c34376a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 5 Apr 2021 09:49:01 -0400 Subject: [PATCH 38/50] Add more unit tests --- src/HttpDownloaderAdapter.php | 12 +++-- tests/HttpDownloaderTest.php | 82 ++++++++++++++++++++++++++++++++++- tests/PluginTest.php | 20 +++++++++ 3 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 tests/PluginTest.php diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 60eec9c..20f3eb4 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -122,6 +122,9 @@ public function getDecorated(): HttpDownloader * * @param \Composer\Repository\ComposerRepository $repository * The Composer repository. + * @param \Tuf\Client\Updater $updater + * The TUF instance to associate with the repository. Meant only for + * internal unit testing purposes. * * @throws \Composer\Downloader\FilesystemException * Thrown if the root metadata file can't be copied into the metadata @@ -129,7 +132,7 @@ public function getDecorated(): HttpDownloader * * @return void */ - public function addRepository(ComposerRepository $repository): void + public function addRepository(ComposerRepository $repository, Updater $updater = null): void { $config = $repository->getRepoConfig(); $url = $config['url']; @@ -156,8 +159,11 @@ public function addRepository(ComposerRepository $repository): void } } - $fetcher = GuzzleFileFetcher::createFromUri($url); - $this->tufUpdaters[$url] = new Updater($fetcher, [], new FileStorage($repoPath)); + if (empty($updater)) { + $fetcher = GuzzleFileFetcher::createFromUri($url); + $updater = new Updater($fetcher, [], new FileStorage($repoPath)); + } + $this->tufUpdaters[$url] = $updater; } /** diff --git a/tests/HttpDownloaderTest.php b/tests/HttpDownloaderTest.php index f5eedeb..266085a 100644 --- a/tests/HttpDownloaderTest.php +++ b/tests/HttpDownloaderTest.php @@ -2,14 +2,94 @@ namespace Tuf\ComposerIntegration\Tests; +use Composer\Util\Filesystem; use Composer\Util\HttpDownloader; +use GuzzleHttp\Promise\FulfilledPromise; +use GuzzleHttp\Psr7\Response; +use GuzzleHttp\Psr7\Utils; use PHPUnit\Framework\TestCase; +use Prophecy\Argument; +use Tuf\Client\ResponseStream; +use Tuf\Client\Updater; use Tuf\ComposerIntegration\HttpDownloaderAdapter; +use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; +/** + * @coversDefaultClass \Tuf\ComposerIntegration\HttpDownloaderAdapter + */ class HttpDownloaderTest extends TestCase { + private $downloader; + + private $repository; + + private $storageDir; + + /** + * {@inheritDoc} + */ + protected function setUp(): void + { + parent::setUp(); + $io = $this->prophesize('\Composer\IO\IOInterface')->reveal(); + $config = $this->prophesize('\Composer\Config')->reveal(); + + $decorated = new HttpDownloader($io, $config); + $this->storageDir = sys_get_temp_dir() . '/https---test.net'; + $this->downloader = new HttpDownloaderAdapter($decorated, dirname($this->storageDir)); + + $repoConfig = [ + 'url' => 'https://test.net', + 'tuf' => [ + 'root' => __DIR__ . '/../fixtures/test-project/tuf-root.json', + ], + ]; + $this->repository = new TufValidatedComposerRepository($repoConfig, $io, $config, $this->downloader); + } + + /** + * {@inheritDoc} + */ + protected function tearDown(): void + { + (new Filesystem())->removeDirectoryPhp($this->storageDir); + parent::tearDown(); + } + + /** + * @covers ::get + */ + public function testGet(): void + { + $response = new Response(200, [], Utils::streamFor('My bag of evil tricks has no limit!')); + $updater = $this->prophesize(Updater::class); + $updater->download('packages.json', Argument::cetera()) + ->willReturn(new FulfilledPromise(new ResponseStream($response))) + ->shouldBeCalled(); + + $this->downloader->addRepository($this->repository, $updater->reveal()); + + $response = $this->downloader->get('https://test.net/packages.json', [ + 'tuf' => [ + 'repository' => 'https://test.net', + ], + ]); + // The response should be converted to a native Composer response. + $this->assertInstanceOf('\Composer\Util\Http\Response', $response); + $this->assertSame('My bag of evil tricks has no limit!', $response->getBody()); + } + + /** + * @covers ::addRepository + */ + public function testAddRepository(): void + { + $this->downloader->addRepository($this->repository); + $this->assertFileExists("$this->storageDir/root.json"); + } + /** - * Tests that method of the decorated downloader are called. + * Tests that methods of the decorated downloader are called. */ public function testDecoration(): void { diff --git a/tests/PluginTest.php b/tests/PluginTest.php new file mode 100644 index 0000000..6a7de3e --- /dev/null +++ b/tests/PluginTest.php @@ -0,0 +1,20 @@ +mustRun(); + } + + private static function composer(array $arguments): Process + { + array_unshift($arguments, __DIR__ . '/../vendor/composer/composer/bin/composer'); + return new Process($arguments, __DIR__ . '/../fixtures/test-project'); + } +} From bf304a28a0851f24ba93a38db4114b1f40d86532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 5 Apr 2021 10:19:16 -0400 Subject: [PATCH 39/50] Add more test cases --- tests/HttpDownloaderTest.php | 49 +++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/tests/HttpDownloaderTest.php b/tests/HttpDownloaderTest.php index 266085a..fa01d17 100644 --- a/tests/HttpDownloaderTest.php +++ b/tests/HttpDownloaderTest.php @@ -5,6 +5,7 @@ use Composer\Util\Filesystem; use Composer\Util\HttpDownloader; use GuzzleHttp\Promise\FulfilledPromise; +use GuzzleHttp\Promise\RejectedPromise; use GuzzleHttp\Psr7\Response; use GuzzleHttp\Psr7\Utils; use PHPUnit\Framework\TestCase; @@ -13,16 +14,33 @@ use Tuf\Client\Updater; use Tuf\ComposerIntegration\HttpDownloaderAdapter; use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; +use Tuf\Exception\PotentialAttackException\InvalidHashException; +use Tuf\Exception\RepoFileNotFound; /** * @coversDefaultClass \Tuf\ComposerIntegration\HttpDownloaderAdapter */ class HttpDownloaderTest extends TestCase { + /** + * The TUF-aware HTTP downloader under test. + * + * @var \Tuf\ComposerIntegration\HttpDownloaderAdapter + */ private $downloader; + /** + * A mocked TUF-validated Composer repository. + * + * @var \Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository + */ private $repository; + /** + * Directory where TUF data is persisted for the test repository. + * + * @var string + */ private $storageDir; /** @@ -61,22 +79,47 @@ protected function tearDown(): void */ public function testGet(): void { + $responses = []; + // A boring, successful response. $response = new Response(200, [], Utils::streamFor('My bag of evil tricks has no limit!')); + $responses[] = new FulfilledPromise(new ResponseStream($response)); + // A 304 (not modified) response with no body, which would normally + // trigger a TUF exception. + $error = new InvalidHashException(new ResponseStream(new Response(304)), '', 304); + $responses[] = new RejectedPromise($error); + // A RepoFileNotFound (i.e., a 404), which should result in an exception. + $responses[] = new RejectedPromise(new RepoFileNotFound('Ask moar nicely.')); + $updater = $this->prophesize(Updater::class); $updater->download('packages.json', Argument::cetera()) - ->willReturn(new FulfilledPromise(new ResponseStream($response))) + ->willReturn(...$responses) ->shouldBeCalled(); $this->downloader->addRepository($this->repository, $updater->reveal()); - $response = $this->downloader->get('https://test.net/packages.json', [ + $url = 'https://test.net/packages.json'; + $options = [ 'tuf' => [ 'repository' => 'https://test.net', ], - ]); + ]; + $response = $this->downloader->get($url, $options); // The response should be converted to a native Composer response. $this->assertInstanceOf('\Composer\Util\Http\Response', $response); $this->assertSame('My bag of evil tricks has no limit!', $response->getBody()); + + $response = $this->downloader->get($url, $options); + // This 304 response would normally be an error, but should be converted + // to a native Composer response with an empty body. + $this->assertInstanceOf('\Composer\Util\Http\Response', $response); + $this->assertSame(304, $response->getStatusCode()); + $this->assertEmpty($response->getBody()); + + // A RepoFileNotFound exception should be converted to a native Composer + // TransportException. + $this->expectException('\Composer\Downloader\TransportException'); + $this->expectExceptionMessage('Ask moar nicely.'); + $this->downloader->get($url, $options); } /** From 6eaaffeff16fe219df00960e1c4df3b863cd42e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 5 Apr 2021 11:00:03 -0400 Subject: [PATCH 40/50] Handle NotFoundException --- composer.lock | 8 ++++---- src/HttpDownloaderAdapter.php | 5 +++-- tests/HttpDownloaderTest.php | 27 ++++++++++++++++++++++----- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/composer.lock b/composer.lock index 6c51847..3795da4 100644 --- a/composer.lock +++ b/composer.lock @@ -439,12 +439,12 @@ "source": { "type": "git", "url": "https://github.com/php-tuf/php-tuf.git", - "reference": "9838730b9d1504d935c7100efaad6d5eb7974528" + "reference": "d24ebc6d8daa02f157fa1e98e87c803ec407d81c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-tuf/php-tuf/zipball/9838730b9d1504d935c7100efaad6d5eb7974528", - "reference": "9838730b9d1504d935c7100efaad6d5eb7974528", + "url": "https://api.github.com/repos/php-tuf/php-tuf/zipball/d24ebc6d8daa02f157fa1e98e87c803ec407d81c", + "reference": "d24ebc6d8daa02f157fa1e98e87c803ec407d81c", "shasum": "" }, "require": { @@ -498,7 +498,7 @@ "MIT" ], "description": "PHP implementation of The Update Framework (TUF)", - "time": "2021-04-01T19:02:50+00:00" + "time": "2021-04-05T14:54:55+00:00" }, { "name": "psr/http-client", diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php index 20f3eb4..9c014ae 100644 --- a/src/HttpDownloaderAdapter.php +++ b/src/HttpDownloaderAdapter.php @@ -18,6 +18,7 @@ use Tuf\Client\GuzzleFileFetcher; use Tuf\Client\ResponseStream; use Tuf\Client\Updater; +use Tuf\Exception\NotFoundException; use Tuf\Exception\PotentialAttackException\InvalidHashException; use Tuf\Exception\RepoFileNotFound; @@ -242,8 +243,8 @@ private function createPromise(array $request): PromiseInterface // If the target doesn't exist or could not be found by the file // fetcher, convert it to a regular TransportException, which is // what the regular HttpDownloader would throw. - } elseif ($e instanceof \InvalidArgumentException || $e instanceof RepoFileNotFound) { - $e = new TransportException($e->getMessage(), $e->getCode(), $e); + } elseif ($e instanceof NotFoundException || $e instanceof RepoFileNotFound) { + $e = new TransportException($e->getMessage(), 404, $e); $e->setStatusCode(404); } // In all other cases, just re-throw the exception. diff --git a/tests/HttpDownloaderTest.php b/tests/HttpDownloaderTest.php index fa01d17..8e5e4ab 100644 --- a/tests/HttpDownloaderTest.php +++ b/tests/HttpDownloaderTest.php @@ -2,6 +2,7 @@ namespace Tuf\ComposerIntegration\Tests; +use Composer\Downloader\TransportException; use Composer\Util\Filesystem; use Composer\Util\HttpDownloader; use GuzzleHttp\Promise\FulfilledPromise; @@ -14,6 +15,7 @@ use Tuf\Client\Updater; use Tuf\ComposerIntegration\HttpDownloaderAdapter; use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; +use Tuf\Exception\NotFoundException; use Tuf\Exception\PotentialAttackException\InvalidHashException; use Tuf\Exception\RepoFileNotFound; @@ -89,6 +91,9 @@ public function testGet(): void $responses[] = new RejectedPromise($error); // A RepoFileNotFound (i.e., a 404), which should result in an exception. $responses[] = new RejectedPromise(new RepoFileNotFound('Ask moar nicely.')); + // A NotFoundException (i.e., invalid target), which should also result + // in an exception. + $responses[] = new RejectedPromise(new NotFoundException('packages.json', 'Target')); $updater = $this->prophesize(Updater::class); $updater->download('packages.json', Argument::cetera()) @@ -115,11 +120,23 @@ public function testGet(): void $this->assertSame(304, $response->getStatusCode()); $this->assertEmpty($response->getBody()); - // A RepoFileNotFound exception should be converted to a native Composer - // TransportException. - $this->expectException('\Composer\Downloader\TransportException'); - $this->expectExceptionMessage('Ask moar nicely.'); - $this->downloader->get($url, $options); + // RepoFileNotFound and NotFoundException should be converted to native + // Composer TransportExceptions. + try { + $this->downloader->get($url, $options); + $this->fail('Expected a TransportException to be thrown but it was not.'); + } catch (TransportException $e) { + $this->assertSame('Ask moar nicely.', $e->getMessage()); + $this->assertSame(404, $e->getCode()); + } + + try { + $this->downloader->get($url, $options); + $this->fail('Expected a TransportException to be thrown but it was not.'); + } catch (TransportException $e) { + $this->assertSame('Target not found: packages.json', $e->getMessage()); + $this->assertSame(404, $e->getCode()); + } } /** From 355c1a3c947ef2723649a85aa3fde0644d930aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 5 Apr 2021 11:37:51 -0400 Subject: [PATCH 41/50] Moar test coverage --- tests/HttpDownloaderTest.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/HttpDownloaderTest.php b/tests/HttpDownloaderTest.php index 8e5e4ab..b9415ea 100644 --- a/tests/HttpDownloaderTest.php +++ b/tests/HttpDownloaderTest.php @@ -9,6 +9,7 @@ use GuzzleHttp\Promise\RejectedPromise; use GuzzleHttp\Psr7\Response; use GuzzleHttp\Psr7\Utils; +use GuzzleHttp\RequestOptions; use PHPUnit\Framework\TestCase; use Prophecy\Argument; use Tuf\Client\ResponseStream; @@ -137,6 +138,28 @@ public function testGet(): void $this->assertSame('Target not found: packages.json', $e->getMessage()); $this->assertSame(404, $e->getCode()); } + + // ::copy() should pass the 'sink' option to the updater. + $fetcherOptions = [ + RequestOptions::SINK => '/tmp/file', + ]; + $updater->download('packages.json', $fetcherOptions, null) + ->willReturn($responses[0]) + ->shouldBeCalled(); + $this->downloader->copy($url, '/tmp/file', $options); + + // Additional HTTP headers should be passed to the updater in the + // 'headers' option. + $fetcherOptions = [ + RequestOptions::HEADERS => [ + 'Accept' => 'application/gzip', + ], + ]; + $updater->download('packages.json', $fetcherOptions, null) + ->willReturn($responses[0]) + ->shouldBeCalled(); + $options['http']['header'][] = 'Accept: application/gzip'; + $this->downloader->get($url, $options); } /** From e901f53f9bcab105d0d3ab4ccc30d00daaa86751 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 12 Apr 2021 12:47:26 -0400 Subject: [PATCH 42/50] Require dev-master of composer/composer. --- composer.json | 2 +- composer.lock | 90 +++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 82 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index 2a7219b..4ebdc66 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,7 @@ "class": "Tuf\\ComposerIntegration\\Plugin" }, "require-dev": { - "composer/composer": "^2", + "composer/composer": "dev-master", "phpunit/phpunit": "^9.5" }, "scripts": { diff --git a/composer.lock b/composer.lock index 3795da4..83e8363 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "948e3efaa77f89f0457334da6f1d288b", + "content-hash": "ad70ccab950e3dc1ffe28a5f3e077486", "packages": [ { "name": "guzzlehttp/guzzle", @@ -1306,20 +1306,21 @@ }, { "name": "composer/composer", - "version": "2.0.12", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "6c12ce263da71641903e399c3ce8ecb08fd375fb" + "reference": "180ba49f33401cf185e68d07d684e40903a88a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/6c12ce263da71641903e399c3ce8ecb08fd375fb", - "reference": "6c12ce263da71641903e399c3ce8ecb08fd375fb", + "url": "https://api.github.com/repos/composer/composer/zipball/180ba49f33401cf185e68d07d684e40903a88a31", + "reference": "180ba49f33401cf185e68d07d684e40903a88a31", "shasum": "" }, "require": { "composer/ca-bundle": "^1.0", + "composer/metadata-minifier": "^1.0", "composer/semver": "^3.0", "composer/spdx-licenses": "^1.2", "composer/xdebug-handler": "^1.1", @@ -1343,13 +1344,14 @@ "ext-zip": "Enabling the zip extension allows you to unzip archives", "ext-zlib": "Allow gzip compression of HTTP requests" }, + "default-branch": true, "bin": [ "bin/composer" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -1383,7 +1385,76 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.0.12" + "source": "https://github.com/composer/composer/tree/master" + }, + "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": "2021-04-11T11:59:18+00:00" + }, + { + "name": "composer/metadata-minifier", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/metadata-minifier.git", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "composer/composer": "^2", + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\MetadataMinifier\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Small utility library that handles metadata minification and expansion.", + "keywords": [ + "composer", + "compression" + ], + "support": { + "issues": "https://github.com/composer/metadata-minifier/issues", + "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" }, "funding": [ { @@ -1399,7 +1470,7 @@ "type": "tidelift" } ], - "time": "2021-04-01T08:14:59+00:00" + "time": "2021-04-07T13:37:33+00:00" }, { "name": "composer/semver", @@ -4521,7 +4592,8 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { - "php-tuf/php-tuf": 20 + "php-tuf/php-tuf": 20, + "composer/composer": 20 }, "prefer-stable": false, "prefer-lowest": false, From c8e39e1c18abaad575ec9357d352ee0e8c757fed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 12 Apr 2021 13:07:29 -0400 Subject: [PATCH 43/50] Remove scary things --- composer.lock | 9 +- fixtures/packages.json | 1 - src/HttpDownloaderAdapter.php | 402 ------------------ src/PackageLoader.php | 60 --- src/Plugin.php | 112 +---- .../TufValidatedComposerRepository.php | 93 +++- 6 files changed, 88 insertions(+), 589 deletions(-) delete mode 120000 fixtures/packages.json delete mode 100644 src/HttpDownloaderAdapter.php delete mode 100644 src/PackageLoader.php diff --git a/composer.lock b/composer.lock index 83e8363..281545c 100644 --- a/composer.lock +++ b/composer.lock @@ -439,12 +439,12 @@ "source": { "type": "git", "url": "https://github.com/php-tuf/php-tuf.git", - "reference": "d24ebc6d8daa02f157fa1e98e87c803ec407d81c" + "reference": "0307adcac7afbfcbe25fdde1205b12bc61003d2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-tuf/php-tuf/zipball/d24ebc6d8daa02f157fa1e98e87c803ec407d81c", - "reference": "d24ebc6d8daa02f157fa1e98e87c803ec407d81c", + "url": "https://api.github.com/repos/php-tuf/php-tuf/zipball/0307adcac7afbfcbe25fdde1205b12bc61003d2f", + "reference": "0307adcac7afbfcbe25fdde1205b12bc61003d2f", "shasum": "" }, "require": { @@ -457,7 +457,6 @@ "symfony/validator": "^4.4 || ^5" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", "php-tuf/phpcodesniffer-standard": "dev-main", "phpunit/phpunit": "^8.5.8|^9", "symfony/phpunit-bridge": "^5" @@ -498,7 +497,7 @@ "MIT" ], "description": "PHP implementation of The Update Framework (TUF)", - "time": "2021-04-05T14:54:55+00:00" + "time": "2021-04-09T17:35:19+00:00" }, { "name": "psr/http-client", diff --git a/fixtures/packages.json b/fixtures/packages.json deleted file mode 120000 index f7303b8..0000000 --- a/fixtures/packages.json +++ /dev/null @@ -1 +0,0 @@ -targets/packages.json \ No newline at end of file diff --git a/src/HttpDownloaderAdapter.php b/src/HttpDownloaderAdapter.php deleted file mode 100644 index 9c014ae..0000000 --- a/src/HttpDownloaderAdapter.php +++ /dev/null @@ -1,402 +0,0 @@ -decorated = $decorated; - $this->storagePath = $storagePath; - } - - /** - * Returns the decorated HTTP downloader. - * - * @return \Composer\Util\HttpDownloader - * The HTTP downloader that this class is decorating. - */ - public function getDecorated(): HttpDownloader - { - return $this->decorated; - } - - /** - * Registers a Composer repository with TUF. - * - * This will create a local directory to store TUF metadata for the - * the repository, if it doesn't already exit. A trusted root metadata file - * in a known good state is expected to exist locally, and will be copied - * into the created directory. - * - * @param \Composer\Repository\ComposerRepository $repository - * The Composer repository. - * @param \Tuf\Client\Updater $updater - * The TUF instance to associate with the repository. Meant only for - * internal unit testing purposes. - * - * @throws \Composer\Downloader\FilesystemException - * Thrown if the root metadata file can't be copied into the metadata - * directory. - * - * @return void - */ - public function addRepository(ComposerRepository $repository, Updater $updater = null): void - { - $config = $repository->getRepoConfig(); - $url = $config['url']; - - // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? - // Use the repository URL to derive a path where we can persist the TUF - // data. - $repoPath = implode(DIRECTORY_SEPARATOR, [ - $this->storagePath, - preg_replace('/[^[:alnum:]\.]/', '-', $url), - ]); - - $fs = new Filesystem(); - $fs->ensureDirectoryExists($repoPath); - - // We expect the repository to have a root metadata file in a known - // good state. Copy that file to our persistent storage location if - // it doesn't already exist. - $rootFile = $repoPath . '/root.json'; - if (!file_exists($rootFile)) { - $sourcePath = realpath($config['tuf']['root']); - if (!$fs->copy($sourcePath, $rootFile)) { - throw new FilesystemException("Could not copy '$sourcePath' to '$rootFile"); - } - } - - if (empty($updater)) { - $fetcher = GuzzleFileFetcher::createFromUri($url); - $updater = new Updater($fetcher, [], new FileStorage($repoPath)); - } - $this->tufUpdaters[$url] = $updater; - } - - /** - * Associates a TUF-validated package with a specific URL. - * - * It is assumed that the package's transport options include an indexed - * array of information needed by TUF. In order: - * - The URL of the repository. - * - The target key, as known to TUF. - * - * @param \Composer\Package\PackageInterface $package - * The package object. - * @param string $url - * The URL from which the package should be downloaded. - * - * @see \Tuf\ComposerIntegration\PackageLoader::loadPackages() - */ - public function setPackageUrl(PackageInterface $package, string $url): void - { - $options = $package->getTransportOptions(); - $tuf = $options['tuf']; - $repository = $tuf['repository']; - $target = $tuf['target']; - $this->targets[$repository][$target] = $url; - } - - /** - * Creates a promise for a request. - * - * @param array $request - * The request array. Must contain at least a 'url' element with the URL. - * - * @return \GuzzleHttp\Promise\PromiseInterface - * A promise representing the eventual result of the request. - */ - private function createPromise(array $request): PromiseInterface - { - $request += [ - 'copyTo' => false, - ]; - $request['options'] = array_replace_recursive($this->getOptions(), $request['options']); - - $fetcherOptions = []; - if ($request['copyTo']) { - $fetcherOptions[RequestOptions::SINK] = $request['copyTo']; - } - // Ensure that any additional HTTP headers are passed through to Guzzle. - if (isset($request['options']['http']['header'])) { - foreach ((array) $request['options']['http']['header'] as $header) { - list ($header, $value) = explode(':', $header, 2); - $fetcherOptions[RequestOptions::HEADERS][$header] = trim($value); - } - } - - // When the promise is fulfilled, convert it to an instance of - // \Composer\Util\Http\Response that resembles what the regular - // HttpDownloader would produce. - $accept = function (ResponseStream $stream) use ($request) { - $this->markJobDone(); - return static::createResponse($request, $stream); - }; - - $reject = function (\Throwable $e) use ($request) { - $this->markJobDone(); - - // If the response was a 304 (i.e., doesn't include a body), TUF - // validation will fail. In that case, convert the error into a - // legitimate empty response. - if ($e instanceof InvalidHashException) { - /** @var \Tuf\Client\ResponseStream $stream */ - $stream = $e->getStream(); - - if ($stream->getResponse()->getStatusCode() === 304 && $stream->getSize() === 0) { - return static::createResponse($request, $stream, false); - } - // If the target doesn't exist or could not be found by the file - // fetcher, convert it to a regular TransportException, which is - // what the regular HttpDownloader would throw. - } elseif ($e instanceof NotFoundException || $e instanceof RepoFileNotFound) { - $e = new TransportException($e->getMessage(), 404, $e); - $e->setStatusCode(404); - } - // In all other cases, just re-throw the exception. - throw $e; - }; - - // If this function is executing, we expect the TUF repository URL, plus - // an optional target ID, to be in the request options. If no target ID - // is given, derive it from the request URL. - // @see \Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository::__construct() - // @see \Tuf\ComposerIntegration\PackageLoader::loadPackages() - $repository = $request['options']['tuf']['repository']; - if (isset($request['options']['tuf']['target'])) { - $target = $request['options']['tuf']['target']; - } else { - $target = parse_url($request['url'], PHP_URL_PATH); - $target = ltrim($target, '/'); - } - - $this->activeJobs++; - $this->queue[] = $this->tufUpdaters[$repository] - ->download($target, $fetcherOptions, $this->targets[$repository][$target] ?? null) - ->then($accept, $reject); - return end($this->queue); - } - - private static function createResponse(array $request, ResponseStream $stream, bool $includeBody = true): Response - { - $response = $stream->getResponse(); - $headers = []; - foreach ($response->getHeaders() as $name => $values) { - $headers[] = "$name: " . reset($values); - } - - if ($includeBody) { - $uri = $stream->getMetadata('uri'); - if ($uri && file_exists($uri)) { - $contents = "$uri~"; - } else { - $contents = $stream->getContents(); - } - } else { - $contents = ''; - } - return new Response($request, $response->getStatusCode(), $headers, $contents); - } - - /** - * {@inheritDoc} - */ - public function get($url, $options = array()) - { - if (isset($options['tuf'])) { - return $this->add($url, $options)->wait(); - } else { - return $this->getDecorated()->get($url, $options); - } - } - - /** - * {@inheritDoc} - */ - public function add($url, $options = array()) - { - if (isset($options['tuf'])) { - return $this->createPromise([ - 'url' => $url, - 'options' => $options, - ]); - } else { - return $this->getDecorated()->add($url, $options); - } - } - - /** - * {@inheritDoc} - */ - public function copy($url, $to, $options = array()) - { - if (isset($options['tuf'])) { - return $this->addCopy($url, $to, $options)->wait(); - } else { - return $this->getDecorated()->copy($url, $to, $options); - } - } - - /** - * {@inheritDoc} - */ - public function addCopy($url, $to, $options = array()) - { - if (isset($options['tuf'])) { - return $this->createPromise([ - 'url' => $url, - 'options' => $options, - 'copyTo' => $to, - ]); - } else { - return $this->getDecorated()->addCopy($url, $to, $options); - } - } - - /** - * {@inheritDoc} - */ - public function getOptions() - { - return $this->getDecorated()->getOptions(); - } - - /** - * {@inheritDoc} - */ - public function setOptions(array $options) - { - $this->getDecorated()->setOptions($options); - } - - /** - * {@inheritDoc} - */ - public function markJobDone() - { - $this->activeJobs--; - $this->getDecorated()->markJobDone(); - } - - /** - * {@inheritDoc} - */ - public function wait($index = null) - { - parent::wait($index); - $this->getDecorated()->wait($index); - } - - /** - * {@inheritDoc} - */ - public function enableAsync() - { - $this->getDecorated()->enableAsync(); - } - - /** - * {@inheritDoc} - */ - public function countActiveJobs($index = null) - { - $this->queue = array_filter($this->queue, '\GuzzleHttp\Promise\Is::pending'); - $aggregate = new EachPromise($this->queue, ['concurrency' => 12]); - $aggregate->promise()->wait(); - return $this->activeJobs + $this->getDecorated()->countActiveJobs($index); - } -} diff --git a/src/PackageLoader.php b/src/PackageLoader.php deleted file mode 100644 index 5f54011..0000000 --- a/src/PackageLoader.php +++ /dev/null @@ -1,60 +0,0 @@ -url = $url; - } - - /** - * {@inheritDoc} - */ - public function loadPackages(array $versions, $class) - { - $packages = parent::loadPackages($versions, $class); - - /** @var \Composer\Package\CompletePackage $package */ - foreach ($packages as $package) { - $options = $package->getTransportOptions(); - // In order for the TUF-aware HTTP downloader to grab this package, - // we need to store the URL of the repository and the package's - // target key (as known to TUF). We need to store these in a way - // that can be serialized to and from JSON, since this will be - // stored in the lock file. - $options['tuf'] = [ - 'repository' => $this->url, - 'target' => $package->getName() . '/' . $package->getVersion(), - ]; - $package->setTransportOptions($options); - } - return $packages; - } -} diff --git a/src/Plugin.php b/src/Plugin.php index a463319..8a4565e 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -4,17 +4,14 @@ use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; -use Composer\Factory; use Composer\IO\IOInterface; use Composer\Plugin\PluginEvents; use Composer\Plugin\PluginInterface; -use Composer\Plugin\PreFileDownloadEvent; +use Composer\Plugin\PostFileDownloadEvent; use Composer\Repository\ComposerRepository; use Composer\Repository\RepositoryFactory; use Composer\Repository\RepositoryManager; use Composer\Util\Filesystem; -use Composer\Util\HttpDownloader; -use Composer\Util\Loop; use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; class Plugin implements PluginInterface, EventSubscriberInterface @@ -25,34 +22,16 @@ class Plugin implements PluginInterface, EventSubscriberInterface public static function getSubscribedEvents() { return [ - PluginEvents::PRE_FILE_DOWNLOAD => ['preFileDownload', -1000], + PluginEvents::POST_FILE_DOWNLOAD => ['postFileDownload', -1000], ]; } - /** - * Reacts when a package is about to be downloaded. - * - * Note that this event handler is undebuggable due to some inexplicable - * bananapantsing in Composer's plugin manager. It copies the code of this - * class, renames it, and evals it into existence...which means it's not - * debuggable, since the code doesn't concretely exist in a place where - * Xdebug can find it. Dafuq! (See - * \Composer\Plugin\PluginManager::registerPackage() if you don't believe - * me.) - * - * @param \Composer\Plugin\PreFileDownloadEvent $event - * The event object. - */ - public function preFileDownload(PreFileDownloadEvent $event): void + public function postFileDownload(PostFileDownloadEvent $event): void { - if ($event->getType() === 'package') { - /** @var \Composer\Package\PackageInterface $package */ - $package = $event->getContext(); - // If the package is protected by TUF, its repository URL and target - // key should have been set by - // \Tuf\ComposerIntegration\PackageLoader::loadPackages(). - if (array_key_exists('tuf', $package->getTransportOptions())) { - $event->getHttpDownloader()->setPackageUrl($package, $event->getProcessedUrl()); + if ($event->getType() === 'metadata') { + $context = $event->getContext(); + if ($context['repository'] instanceof TufValidatedComposerRepository) { + $context['repository']->validateMetadata($event->getUrl(), $context['response']); } } } @@ -62,13 +41,6 @@ public function preFileDownload(PreFileDownloadEvent $event): void */ public function activate(Composer $composer, IOInterface $io) { - // Finish any pending transfers, then swap out the HTTP downloader with - // a TUF-aware one. - $downloader = $composer->getLoop()->getHttpDownloader(); - $downloader->wait(); - $downloader = new HttpDownloaderAdapter($downloader, static::getStoragePath($composer)); - $this->setHttpDownloader($composer, $io, $downloader); - // By the time this plugin is activated, several repositories may have // already been instantiated, and we need to convert them to // TUF-validated repositories. Unfortunately, the repository manager @@ -96,14 +68,7 @@ private function addTufValidationToRepositories(Composer $composer, RepositoryMa { foreach ($composer->getRepositoryManager()->getRepositories() as $repository) { if ($repository instanceof ComposerRepository) { - $config = $repository->getRepoConfig(); - - if (isset($config['tuf'])) { - $repository = new TufValidatedComposerRepository($config, $io, $composer->getConfig(), $composer->getLoop()->getHttpDownloader(), $composer->getEventDispatcher()); - } else { - // @todo Usability assessment. Should we output this for other repo types, or not at all? - $io->warning("Authenticity of packages from ${config['url']} are not verified by TUF."); - } + $repository = new TufValidatedComposerRepository($repository->getRepoConfig(), $io, $composer->getConfig(), $composer->getLoop()->getHttpDownloader(), $composer->getEventDispatcher()); } $manager->addRepository($repository); } @@ -114,6 +79,8 @@ private function addTufValidationToRepositories(Composer $composer, RepositoryMa */ public function uninstall(Composer $composer, IOInterface $io) { + return; + // @todo Delete all persistent TUF data. $path = static::getStoragePath($composer); $io->info("Deleting TUF data in $path"); @@ -126,64 +93,5 @@ public function uninstall(Composer $composer, IOInterface $io) */ public function deactivate(Composer $composer, IOInterface $io) { - $downloader = $composer->getLoop()->getHttpDownloader(); - - if ($downloader instanceof HttpDownloaderAdapter) { - $this->setHttpDownloader($composer, $io, $downloader->getDecorated()); - } - } - - /** - * Swaps out the HTTP downloader. - * - * The HTTP downloader is a low-level service used by a lot of things. - * Therefore, we need to reinitialize the main event loop, the download - * manager, and the installation manager for the change to take full effect. - * - * @param \Composer\Composer $composer - * The Composer instance. - * @param \Composer\IO\IOInterface $io - * The I/O object. - * @param \Composer\Util\HttpDownloader $newDownloader - * The new HTTP downloader to swap in. - */ - private function setHttpDownloader(Composer $composer, IOInterface $io, HttpDownloader $newDownloader): void - { - $loop = new Loop($newDownloader, $composer->getLoop()->getProcessExecutor()); - $composer->setLoop($loop); - - $factory = new Factory(); - - $downloadManager = $factory->createDownloadManager($io, $composer->getConfig(), $newDownloader, $loop->getProcessExecutor(), $composer->getEventDispatcher()); - $composer->setDownloadManager($downloadManager); - - $installationManager = $factory->createInstallationManager($loop, $io, $composer->getEventDispatcher()); - $composer->setInstallationManager($installationManager); - - // It sucks to call a protected method, but if we don't do this, package - // installations and updates will fail hard. Hopefully we can fix this - // later if Composer makes Factory::createDefaultInstallers() public. - // @todo Support composer/installers and - // oomphinc/composer-installers-extender as well. - $reflector = new \ReflectionObject($factory); - $method = $reflector->getMethod('createDefaultInstallers'); - $method->setAccessible(true); - $method->invoke($factory, $installationManager, $composer, $io, $loop->getProcessExecutor()); - } - - /** - * Gets the path where persistent TUF data should be stored. - * - * @param \Composer\Composer $composer - * The Composer instance. - * - * @return string - * The path where persistent TUF data should be stored. - */ - private static function getStoragePath(Composer $composer): string - { - $vendorDir = $composer->getConfig()->get('vendor-dir'); - $vendorDir = rtrim($vendorDir, DIRECTORY_SEPARATOR); - return implode(DIRECTORY_SEPARATOR, [$vendorDir, 'composer', 'tuf']); } } diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 73f3bda..749869a 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -3,38 +3,93 @@ namespace Tuf\ComposerIntegration\Repository; use Composer\Config; +use Composer\Downloader\FilesystemException; use Composer\EventDispatcher\EventDispatcher; use Composer\IO\IOInterface; +use Composer\Package\PackageInterface; use Composer\Repository\ComposerRepository; -use Tuf\ComposerIntegration\HttpDownloaderAdapter; -use Tuf\ComposerIntegration\PackageLoader; +use Composer\Util\Filesystem; +use Composer\Util\Http\Response; +use Composer\Util\HttpDownloader; +use GuzzleHttp\Psr7\Utils; +use Tuf\Client\DurableStorage\FileStorage; +use Tuf\Client\GuzzleFileFetcher; +use Tuf\Client\Updater; /** * Defines a Composer repository that is protected by TUF. */ class TufValidatedComposerRepository extends ComposerRepository { + /** + * @var Updater + */ + private $updater; + /** * {@inheritDoc} */ - public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloaderAdapter $httpDownloader, EventDispatcher $eventDispatcher = null) + public function __construct(array $repoConfig, IOInterface $io, Config $config, HttpDownloader $httpDownloader, EventDispatcher $eventDispatcher = null) { - // Ensure that all HTTP requests made by the parent class will identify - // which TUF repository they're associated with. The TUF-aware HTTP - // downloader keeps track of all instantiated TUF repositories and - // identifies them by their URL. We need to do this before calling the - // parent constructor because the options are stored in a private - // property. - // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::addRepository() - // @see \Tuf\ComposerIntegration\HttpDownloaderAdapter::createPromise() - $repoConfig['options']['tuf'] = [ - 'repository' => $repoConfig['url'], - ]; + $url = $repoConfig['url']; + + if (isset($repoConfig['tuf'])) { + // @todo: Write a custom implementation of FileStorage that stores repo keys to user's global composer cache? + // Use the repository URL to derive a path where we can persist the TUF + // data. + $repoPath = implode(DIRECTORY_SEPARATOR, [ + rtrim($config->get('vendor-dir'), DIRECTORY_SEPARATOR), + 'composer', + 'tuf', + preg_replace('/[^[:alnum:]\.]/', '-', $url), + ]); + + $fs = new Filesystem(); + $fs->ensureDirectoryExists($repoPath); + + // We expect the repository to have a root metadata file in a known + // good state. Copy that file to our persistent storage location if + // it doesn't already exist. + $rootFile = $repoPath . '/root.json'; + if (!file_exists($rootFile)) { + $sourcePath = realpath($repoConfig['tuf']['root']); + if (!$fs->copy($sourcePath, $rootFile)) { + throw new FilesystemException("Could not copy '$sourcePath' to '$rootFile"); + } + } + + $fetcher = GuzzleFileFetcher::createFromUri($url); + $this->updater = new Updater($fetcher, [], new FileStorage($repoPath)); + + $repoConfig['url'] .= '/targets'; + } else { + // @todo Usability assessment. Should we output this for other repo types, or not at all? + $io->warning("Authenticity of packages from $url are not verified by TUF."); + } parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); - // Make the HTTP downloader aware of this repository. - $httpDownloader->addRepository($this); - // The parent constructor sets up a package loader, so we need to - // override that with our TUF-aware one. - $this->loader = new PackageLoader($repoConfig['url'], $this->versionParser); + } + + protected function configurePackageTransportOptions(PackageInterface $package) + { + parent::configurePackageTransportOptions($package); + + $options = $package->getTransportOptions(); + $config = $this->getRepoConfig(); + $options['tuf'] = [ + 'repository' => $config['url'], + 'target' => $package->getName() . '/' . $package->getVersion(), + ]; + $package->setTransportOptions($options); + } + + public function validateMetadata(string $url, Response $response): void + { + if ($this->updater) { + $config = $this->getRepoConfig(); + $target = str_replace($config['url'], null, $url); + $target = ltrim($target, '/'); + $stream = Utils::streamFor($response->getBody()); + $this->updater->verify($target, $stream); + } } } From c709785177cfb5d68249af99ce2d3dd08a2e4bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 12 Apr 2021 13:29:36 -0400 Subject: [PATCH 44/50] Awww yeah, working proof of concept --- src/Plugin.php | 26 +++++++++++++++++-- .../TufValidatedComposerRepository.php | 9 +++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Plugin.php b/src/Plugin.php index 8a4565e..af8bc89 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -5,6 +5,7 @@ use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; +use Composer\Package\PackageInterface; use Composer\Plugin\PluginEvents; use Composer\Plugin\PluginInterface; use Composer\Plugin\PostFileDownloadEvent; @@ -16,6 +17,11 @@ class Plugin implements PluginInterface, EventSubscriberInterface { + /** + * @var RepositoryManager + */ + private $repositoryManager; + /** * {@inheritDoc} */ @@ -28,11 +34,26 @@ public static function getSubscribedEvents() public function postFileDownload(PostFileDownloadEvent $event): void { - if ($event->getType() === 'metadata') { - $context = $event->getContext(); + $type = $event->getType(); + /** @var array|PackageInterface $context */ + $context = $event->getContext(); + + if ($type === 'metadata') { if ($context['repository'] instanceof TufValidatedComposerRepository) { $context['repository']->validateMetadata($event->getUrl(), $context['response']); } + } elseif ($type === 'package') { + $options = $context->getTransportOptions(); + if (array_key_exists('tuf', $options)) { + foreach ($this->repositoryManager->getRepositories() as $repository) { + if ($repository instanceof TufValidatedComposerRepository) { + $config = $repository->getRepoConfig(); + if ($config['url'] === $options['tuf']['repository']) { + $repository->validatePackage($context, $event->getFileName()); + } + } + } + } } } @@ -50,6 +71,7 @@ public function activate(Composer $composer, IOInterface $io) $newManager = $this->createNewRepositoryManager($composer, $io); $this->addTufValidationToRepositories($composer, $newManager, $io); $composer->setRepositoryManager($newManager); + $this->repositoryManager = $newManager; } private function createNewRepositoryManager(Composer $composer, IOInterface $io): RepositoryManager diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/Repository/TufValidatedComposerRepository.php index 749869a..e272a96 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/Repository/TufValidatedComposerRepository.php @@ -92,4 +92,13 @@ public function validateMetadata(string $url, Response $response): void $this->updater->verify($target, $stream); } } + + public function validatePackage(PackageInterface $package, string $filename): void + { + if ($this->updater) { + $options = $package->getTransportOptions(); + $data = Utils::tryFopen($filename, 'r'); + $this->updater->verify($options['tuf']['target'], Utils::streamFor($data)); + } + } } From eb4edcf236b3f1b109cbc2a3a25572c47b9dc74c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 12 Apr 2021 13:35:40 -0400 Subject: [PATCH 45/50] Remove HttpDownloaderTest --- fixtures/targets/packages.json | 2 +- fixtures/test-project/composer.json | 6 +- fixtures/test-project/tuf-root.json | 30 ++-- tests/HttpDownloaderTest.php | 203 ---------------------------- 4 files changed, 21 insertions(+), 220 deletions(-) delete mode 100644 tests/HttpDownloaderTest.php diff --git a/fixtures/targets/packages.json b/fixtures/targets/packages.json index d31de98..730cc70 100644 --- a/fixtures/targets/packages.json +++ b/fixtures/targets/packages.json @@ -1,5 +1,5 @@ { "packages": [], - "metadata-url": "/files/packages/8/p2/%package%.json", + "metadata-url": "/targets/files/packages/8/p2/%package%.json", "available-package-regexes": ["drupal/*"] } diff --git a/fixtures/test-project/composer.json b/fixtures/test-project/composer.json index 5c97244..12d57de 100644 --- a/fixtures/test-project/composer.json +++ b/fixtures/test-project/composer.json @@ -23,5 +23,9 @@ "config": { "secure-http": false }, - "prefer-stable": true + "prefer-stable": true, + "require": { + "php-tuf/composer-integration": "dev-wip", + "drupal/token": "^1.9" + } } diff --git a/fixtures/test-project/tuf-root.json b/fixtures/test-project/tuf-root.json index 62529a2..0898610 100644 --- a/fixtures/test-project/tuf-root.json +++ b/fixtures/test-project/tuf-root.json @@ -1,56 +1,56 @@ { "signatures": [ { - "keyid": "fe0b76397242d6736cad37b86d64ba348043f667900160e4acbf5068250d9c51", - "sig": "f397503d221b131dbd2bdf514884b887b7305eb461bd64389e50f92a7fc6dd7206cb5ab1adbadb9679b9f1f276c4209a40d416c8cea5994db36598bf6fdf1908" + "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", + "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" } ], "signed": { "_type": "root", "consistent_snapshot": true, - "expires": "2021-09-09T20:22:01Z", + "expires": "2020-12-31T05:48:20Z", "keys": { - "35c00c84cd0fd666d0feecb18b45449a4f516654ab7dcee5970617890e53d158": { + "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { - "public": "12a061699da923e19abdde69df4521e750e2c2c8461ed5f8c680490d3e275b0d" + "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" }, "scheme": "ed25519" }, - "415a4fa52349bd67cb50c5a5becb85cfdea8171573ed424e0484cd5f3d062c16": { + "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { - "public": "82229f0beb795f88b32ef9f6ca54c747ffa7c3a8cf47b91d64aad7bcdf0c058a" + "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" }, "scheme": "ed25519" }, - "eccb1d2638b9cfda0eed972e04c0d5249b39c2da2e3b7aef048f4184a913f01c": { + "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { - "public": "9df2f9b61e96c889896f1a14c21c7b1fe86be0226ab852f80600160b765402c4" + "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" }, "scheme": "ed25519" }, - "fe0b76397242d6736cad37b86d64ba348043f667900160e4acbf5068250d9c51": { + "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { "keyid_hash_algorithms": [ "sha256", "sha512" ], "keytype": "ed25519", "keyval": { - "public": "176fab2ee48a73684b27a34c08a7f29d285c55f2cf940c89f146b7e59a649d11" + "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" }, "scheme": "ed25519" } @@ -58,25 +58,25 @@ "roles": { "root": { "keyids": [ - "fe0b76397242d6736cad37b86d64ba348043f667900160e4acbf5068250d9c51" + "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" ], "threshold": 1 }, "snapshot": { "keyids": [ - "eccb1d2638b9cfda0eed972e04c0d5249b39c2da2e3b7aef048f4184a913f01c" + "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" ], "threshold": 1 }, "targets": { "keyids": [ - "35c00c84cd0fd666d0feecb18b45449a4f516654ab7dcee5970617890e53d158" + "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" ], "threshold": 1 }, "timestamp": { "keyids": [ - "415a4fa52349bd67cb50c5a5becb85cfdea8171573ed424e0484cd5f3d062c16" + "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" ], "threshold": 1 } diff --git a/tests/HttpDownloaderTest.php b/tests/HttpDownloaderTest.php deleted file mode 100644 index b9415ea..0000000 --- a/tests/HttpDownloaderTest.php +++ /dev/null @@ -1,203 +0,0 @@ -prophesize('\Composer\IO\IOInterface')->reveal(); - $config = $this->prophesize('\Composer\Config')->reveal(); - - $decorated = new HttpDownloader($io, $config); - $this->storageDir = sys_get_temp_dir() . '/https---test.net'; - $this->downloader = new HttpDownloaderAdapter($decorated, dirname($this->storageDir)); - - $repoConfig = [ - 'url' => 'https://test.net', - 'tuf' => [ - 'root' => __DIR__ . '/../fixtures/test-project/tuf-root.json', - ], - ]; - $this->repository = new TufValidatedComposerRepository($repoConfig, $io, $config, $this->downloader); - } - - /** - * {@inheritDoc} - */ - protected function tearDown(): void - { - (new Filesystem())->removeDirectoryPhp($this->storageDir); - parent::tearDown(); - } - - /** - * @covers ::get - */ - public function testGet(): void - { - $responses = []; - // A boring, successful response. - $response = new Response(200, [], Utils::streamFor('My bag of evil tricks has no limit!')); - $responses[] = new FulfilledPromise(new ResponseStream($response)); - // A 304 (not modified) response with no body, which would normally - // trigger a TUF exception. - $error = new InvalidHashException(new ResponseStream(new Response(304)), '', 304); - $responses[] = new RejectedPromise($error); - // A RepoFileNotFound (i.e., a 404), which should result in an exception. - $responses[] = new RejectedPromise(new RepoFileNotFound('Ask moar nicely.')); - // A NotFoundException (i.e., invalid target), which should also result - // in an exception. - $responses[] = new RejectedPromise(new NotFoundException('packages.json', 'Target')); - - $updater = $this->prophesize(Updater::class); - $updater->download('packages.json', Argument::cetera()) - ->willReturn(...$responses) - ->shouldBeCalled(); - - $this->downloader->addRepository($this->repository, $updater->reveal()); - - $url = 'https://test.net/packages.json'; - $options = [ - 'tuf' => [ - 'repository' => 'https://test.net', - ], - ]; - $response = $this->downloader->get($url, $options); - // The response should be converted to a native Composer response. - $this->assertInstanceOf('\Composer\Util\Http\Response', $response); - $this->assertSame('My bag of evil tricks has no limit!', $response->getBody()); - - $response = $this->downloader->get($url, $options); - // This 304 response would normally be an error, but should be converted - // to a native Composer response with an empty body. - $this->assertInstanceOf('\Composer\Util\Http\Response', $response); - $this->assertSame(304, $response->getStatusCode()); - $this->assertEmpty($response->getBody()); - - // RepoFileNotFound and NotFoundException should be converted to native - // Composer TransportExceptions. - try { - $this->downloader->get($url, $options); - $this->fail('Expected a TransportException to be thrown but it was not.'); - } catch (TransportException $e) { - $this->assertSame('Ask moar nicely.', $e->getMessage()); - $this->assertSame(404, $e->getCode()); - } - - try { - $this->downloader->get($url, $options); - $this->fail('Expected a TransportException to be thrown but it was not.'); - } catch (TransportException $e) { - $this->assertSame('Target not found: packages.json', $e->getMessage()); - $this->assertSame(404, $e->getCode()); - } - - // ::copy() should pass the 'sink' option to the updater. - $fetcherOptions = [ - RequestOptions::SINK => '/tmp/file', - ]; - $updater->download('packages.json', $fetcherOptions, null) - ->willReturn($responses[0]) - ->shouldBeCalled(); - $this->downloader->copy($url, '/tmp/file', $options); - - // Additional HTTP headers should be passed to the updater in the - // 'headers' option. - $fetcherOptions = [ - RequestOptions::HEADERS => [ - 'Accept' => 'application/gzip', - ], - ]; - $updater->download('packages.json', $fetcherOptions, null) - ->willReturn($responses[0]) - ->shouldBeCalled(); - $options['http']['header'][] = 'Accept: application/gzip'; - $this->downloader->get($url, $options); - } - - /** - * @covers ::addRepository - */ - public function testAddRepository(): void - { - $this->downloader->addRepository($this->repository); - $this->assertFileExists("$this->storageDir/root.json"); - } - - /** - * Tests that methods of the decorated downloader are called. - */ - public function testDecoration(): void - { - $decorated = $this->prophesize(HttpDownloader::class); - $downloader = new HttpDownloaderAdapter($decorated->reveal(), sys_get_temp_dir()); - - $decorated->enableAsync()->shouldBeCalled(); - $decorated->wait(null)->shouldBeCalled(); - $decorated->countActiveJobs(null)->shouldBeCalled(); - $decorated->markJobDone()->shouldBeCalled(); - $decorated->setOptions([])->shouldBeCalled(); - $decorated->getOptions()->shouldBeCalled(); - $decorated->addCopy('url', 'destination', [])->shouldBeCalled(); - $decorated->copy('url', 'destination', [])->shouldBeCalled(); - $decorated->add('url', [])->shouldBeCalled(); - $decorated->get('url', [])->shouldBeCalled(); - - $downloader->enableAsync(); - $downloader->wait(); - $downloader->markJobDone(); - $downloader->setOptions([]); - $downloader->getOptions(); - $downloader->addCopy('url', 'destination'); - $downloader->copy('url', 'destination'); - $downloader->add('url'); - $downloader->get('url'); - } -} \ No newline at end of file From ed4a40f2fe61384420d6283a60d3666470b897d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Mon, 12 Apr 2021 14:12:21 -0400 Subject: [PATCH 46/50] Clean up and comment --- src/Plugin.php | 96 ++++++++++++++++--- .../TufValidatedComposerRepository.php | 40 ++++++-- 2 files changed, 116 insertions(+), 20 deletions(-) rename src/{Repository => }/TufValidatedComposerRepository.php (73%) diff --git a/src/Plugin.php b/src/Plugin.php index af8bc89..e7579e3 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -3,6 +3,7 @@ namespace Tuf\ComposerIntegration; use Composer\Composer; +use Composer\Config; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; use Composer\Package\PackageInterface; @@ -13,11 +14,12 @@ use Composer\Repository\RepositoryFactory; use Composer\Repository\RepositoryManager; use Composer\Util\Filesystem; -use Tuf\ComposerIntegration\Repository\TufValidatedComposerRepository; class Plugin implements PluginInterface, EventSubscriberInterface { /** + * The repository manager. + * * @var RepositoryManager */ private $repositoryManager; @@ -32,6 +34,15 @@ public static function getSubscribedEvents() ]; } + /** + * Reacts when a file, or metadata, is downloaded. + * + * If the downloaded file or metadata is associated with a TUF-aware Composer + * repository, then the downloaded data will be validated by TUF. + * + * @param PostFileDownloadEvent $event + * The event object. + */ public function postFileDownload(PostFileDownloadEvent $event): void { $type = $event->getType(); @@ -43,18 +54,39 @@ public function postFileDownload(PostFileDownloadEvent $event): void $context['repository']->validateMetadata($event->getUrl(), $context['response']); } } elseif ($type === 'package') { + // The repository URL is saved in the package's transport options so that + // it will persist even when loaded from the lock file. + // @see \Tuf\ComposerIntegration\TufValidatedComposerRepository::configurePackageTransportOptions() $options = $context->getTransportOptions(); if (array_key_exists('tuf', $options)) { - foreach ($this->repositoryManager->getRepositories() as $repository) { - if ($repository instanceof TufValidatedComposerRepository) { - $config = $repository->getRepoConfig(); - if ($config['url'] === $options['tuf']['repository']) { - $repository->validatePackage($context, $event->getFileName()); - } - } + $repository = $this->getRepositoryByUrl($options['tuf']['repository']); + if ($repository) { + $repository->validatePackage($context, $event->getFileName()); + } + } + } + } + + /** + * Looks up a TUF-validated Composer repository by its URL. + * + * @param string $url + * The repository URL. + * @return TufValidatedComposerRepository|null + * The TUF-validated Composer repository with the given URL, or NULL if none + * is currently registered. + */ + private function getRepositoryByUrl(string $url): ?TufValidatedComposerRepository + { + foreach ($this->repositoryManager->getRepositories() as $repository) { + if ($repository instanceof TufValidatedComposerRepository) { + $config = $repository->getRepoConfig(); + if ($config['url'] === $url) { + return $repository; } } } + return null; } /** @@ -71,9 +103,23 @@ public function activate(Composer $composer, IOInterface $io) $newManager = $this->createNewRepositoryManager($composer, $io); $this->addTufValidationToRepositories($composer, $newManager, $io); $composer->setRepositoryManager($newManager); - $this->repositoryManager = $newManager; + $this->repositoryManager = $composer->getRepositoryManager(); } + /** + * Creates a new repository manager. + * + * The new repository manager will allow Composer repositories to opt into + * TUF protection. + * + * @param Composer $composer + * The Composer instance. + * @param IOInterface $io + * The I/O service. + * + * @return RepositoryManager + * The new repository manager. + */ private function createNewRepositoryManager(Composer $composer, IOInterface $io): RepositoryManager { $loop = $composer->getLoop(); @@ -86,6 +132,16 @@ private function createNewRepositoryManager(Composer $composer, IOInterface $io) return $newManager; } + /** + * Adds TUF validation to already-instantiated Composer repositories. + * + * @param Composer $composer + * The Composer instance. + * @param RepositoryManager $manager + * The repository manager. + * @param IOInterface $io + * The I/O service. + */ private function addTufValidationToRepositories(Composer $composer, RepositoryManager $manager, IOInterface $io): void { foreach ($composer->getRepositoryManager()->getRepositories() as $repository) { @@ -101,15 +157,31 @@ private function addTufValidationToRepositories(Composer $composer, RepositoryMa */ public function uninstall(Composer $composer, IOInterface $io) { - return; - // @todo Delete all persistent TUF data. - $path = static::getStoragePath($composer); + $path = static::getStoragePath($composer->getConfig()); $io->info("Deleting TUF data in $path"); $fs = new Filesystem(); $fs->removeDirectoryPhp($path); } + /** + * Returns the base path where TUF data will be persisted. + * + * @param Config $config + * The Composer configuration. + * + * @return string + * The base path where TUF data will be persisted. + */ + public static function getStoragePath(Config $config): string + { + return implode(DIRECTORY_SEPARATOR, [ + rtrim($config->get('vendor-dir'), DIRECTORY_SEPARATOR), + 'composer', + 'tuf', + ]); + } + /** * {@inheritDoc} */ diff --git a/src/Repository/TufValidatedComposerRepository.php b/src/TufValidatedComposerRepository.php similarity index 73% rename from src/Repository/TufValidatedComposerRepository.php rename to src/TufValidatedComposerRepository.php index e272a96..06e8f6d 100644 --- a/src/Repository/TufValidatedComposerRepository.php +++ b/src/TufValidatedComposerRepository.php @@ -1,6 +1,6 @@ get('vendor-dir'), DIRECTORY_SEPARATOR), - 'composer', - 'tuf', + Plugin::getStoragePath($config), preg_replace('/[^[:alnum:]\.]/', '-', $url), ]); @@ -61,6 +61,9 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, $fetcher = GuzzleFileFetcher::createFromUri($url); $this->updater = new Updater($fetcher, [], new FileStorage($repoPath)); + // The Python tool (which generates the server-side TUF repository) will + // put all signed files into /targets, so ensure that all downloads are + // prefixed with that. $repoConfig['url'] .= '/targets'; } else { // @todo Usability assessment. Should we output this for other repo types, or not at all? @@ -69,12 +72,18 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, parent::__construct($repoConfig, $io, $config, $httpDownloader, $eventDispatcher); } + /** + * {@inheritDoc} + */ protected function configurePackageTransportOptions(PackageInterface $package) { parent::configurePackageTransportOptions($package); $options = $package->getTransportOptions(); $config = $this->getRepoConfig(); + // Store the information identifying this package to TUF in a format + // that can be safely saved to and loaded from the lock file. + // @see \Tuf\ComposerIntegration\Plugin::postFileDownload() $options['tuf'] = [ 'repository' => $config['url'], 'target' => $package->getName() . '/' . $package->getVersion(), @@ -82,23 +91,38 @@ protected function configurePackageTransportOptions(PackageInterface $package) $package->setTransportOptions($options); } + /** + * Validates downloaded metadata with TUF. + * + * @param string $url + * The URL from which the metadata was downloaded. + * @param Response $response + * The HTTP response for the downloaded metadata. + */ public function validateMetadata(string $url, Response $response): void { if ($this->updater) { $config = $this->getRepoConfig(); $target = str_replace($config['url'], null, $url); $target = ltrim($target, '/'); - $stream = Utils::streamFor($response->getBody()); - $this->updater->verify($target, $stream); + $this->updater->verify($target, Utils::streamFor($response->getBody())); } } + /** + * Validates a downloaded package with TUF. + * + * @param PackageInterface $package + * The downloaded package. + * @param string $filename + * The local path of the downloaded file. + */ public function validatePackage(PackageInterface $package, string $filename): void { if ($this->updater) { $options = $package->getTransportOptions(); - $data = Utils::tryFopen($filename, 'r'); - $this->updater->verify($options['tuf']['target'], Utils::streamFor($data)); + $resource = Utils::tryFopen($filename, 'r'); + $this->updater->verify($options['tuf']['target'], Utils::streamFor($resource)); } } } From 2e528388c3b10f30f02a5bb75cbbf66cd9f8408c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 15 Apr 2021 08:11:19 -0400 Subject: [PATCH 47/50] Constrain download size and remove PHPUnit --- composer.json | 3 +- composer.lock | 2176 ++---------------------- src/TufValidatedComposerRepository.php | 6 + tests/PluginTest.php | 20 - 4 files changed, 118 insertions(+), 2087 deletions(-) delete mode 100644 tests/PluginTest.php diff --git a/composer.json b/composer.json index 4ebdc66..8c8f555 100644 --- a/composer.json +++ b/composer.json @@ -40,8 +40,7 @@ "class": "Tuf\\ComposerIntegration\\Plugin" }, "require-dev": { - "composer/composer": "dev-master", - "phpunit/phpunit": "^9.5" + "composer/composer": "dev-master" }, "scripts": { "post-install-cmd": [ diff --git a/composer.lock b/composer.lock index 281545c..7894378 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ad70ccab950e3dc1ffe28a5f3e077486", + "content-hash": "61591d01fd0b7eace8c9cf01588f5e5c", "packages": [ { "name": "guzzlehttp/guzzle", @@ -1696,2068 +1696,222 @@ "time": "2021-03-25T17:01:18+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.10", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" - }, - "time": "2020-05-27T16:41:55+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.10.4", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" - }, - "time": "2020-12-20T10:01:03+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/master" - }, - "time": "2020-06-27T14:33:11+00:00" - }, - { - "name": "phar-io/version", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" - }, - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" - }, - "time": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" - }, - "time": "2020-09-17T18:55:26+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" - }, - "time": "2021-03-17T13:42:18+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-03-28T07:26:59+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:57:25+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4" - }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-03-23T07:16:29+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://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" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/log", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://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/1.1.3" - }, - "time": "2020-03-23T09:12:05+00:00" - }, - { - "name": "react/promise", - "version": "v2.8.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.8.0" - }, - "time": "2020-05-12T15:16:56+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:55:19+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", + "name": "justinrainbow/json-schema", + "version": "5.2.10", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } + "bin": [ + "bin/validate-json" ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" }, { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "issues": "https://github.com/justinrainbow/json-schema/issues", + "source": "https://github.com/justinrainbow/json-schema/tree/5.2.10" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2020-05-27T16:41:55+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "psr/container", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2021-03-05T17:36:06+00:00" }, { - "name": "sebastian/type", - "version": "2.3.1", + "name": "psr/log", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "source": "https://github.com/php-fig/log/tree/1.1.3" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2020-03-23T09:12:05+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "react/promise", + "version": "v2.8.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/reactphp/promise.git", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", + "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=5.4.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "require-dev": { + "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.8.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2020-05-12T15:16:56+00:00" }, { "name": "seld/jsonlint", @@ -4478,114 +2632,6 @@ } ], "time": "2021-03-17T17:12:15+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" } ], "aliases": [], diff --git a/src/TufValidatedComposerRepository.php b/src/TufValidatedComposerRepository.php index 06e8f6d..ab4a4ed 100644 --- a/src/TufValidatedComposerRepository.php +++ b/src/TufValidatedComposerRepository.php @@ -65,6 +65,8 @@ public function __construct(array $repoConfig, IOInterface $io, Config $config, // put all signed files into /targets, so ensure that all downloads are // prefixed with that. $repoConfig['url'] .= '/targets'; + // Ensure that metadata downloads are constrained to a maximum size. + $repoConfig['options']['max_file_size'] = Updater::MAXIMUM_DOWNLOAD_BYTES; } else { // @todo Usability assessment. Should we output this for other repo types, or not at all? $io->warning("Authenticity of packages from $url are not verified by TUF."); @@ -88,6 +90,10 @@ protected function configurePackageTransportOptions(PackageInterface $package) 'repository' => $config['url'], 'target' => $package->getName() . '/' . $package->getVersion(), ]; + // Constrain the download to a maximum size. + $options += [ + 'max_file_size' => Updater::MAXIMUM_DOWNLOAD_BYTES, + ]; $package->setTransportOptions($options); } diff --git a/tests/PluginTest.php b/tests/PluginTest.php deleted file mode 100644 index 6a7de3e..0000000 --- a/tests/PluginTest.php +++ /dev/null @@ -1,20 +0,0 @@ -mustRun(); - } - - private static function composer(array $arguments): Process - { - array_unshift($arguments, __DIR__ . '/../vendor/composer/composer/bin/composer'); - return new Process($arguments, __DIR__ . '/../fixtures/test-project'); - } -} From 0324d243247408e61979bee6cc91b5effeec22ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 15 Apr 2021 08:14:23 -0400 Subject: [PATCH 48/50] Revert changes to test project composer.json and remove old TUF root file. --- fixtures/test-project/composer.json | 6 +- fixtures/test-project/tuf-root.json | 87 ----------------------------- 2 files changed, 1 insertion(+), 92 deletions(-) delete mode 100644 fixtures/test-project/tuf-root.json diff --git a/fixtures/test-project/composer.json b/fixtures/test-project/composer.json index 12d57de..5c97244 100644 --- a/fixtures/test-project/composer.json +++ b/fixtures/test-project/composer.json @@ -23,9 +23,5 @@ "config": { "secure-http": false }, - "prefer-stable": true, - "require": { - "php-tuf/composer-integration": "dev-wip", - "drupal/token": "^1.9" - } + "prefer-stable": true } diff --git a/fixtures/test-project/tuf-root.json b/fixtures/test-project/tuf-root.json deleted file mode 100644 index 0898610..0000000 --- a/fixtures/test-project/tuf-root.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "signatures": [ - { - "keyid": "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129", - "sig": "d0bf76a5cfc0aee1b8a1b1bf0ed8ca646a1a6d5f205945c515e8546bfd3c1e6b5e07cc0b93836bd030dd05ba68f177aecb05f6bf90c6702fd178e53310022506" - } - ], - "signed": { - "_type": "root", - "consistent_snapshot": true, - "expires": "2020-12-31T05:48:20Z", - "keys": { - "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae": { - "keyid_hash_algorithms": [ - "sha256", - "sha512" - ], - "keytype": "ed25519", - "keyval": { - "public": "6bac59b8d9e1aae02fae6fba6e7fe3fc9fe5b4a9fe98c3fca255d8c8ec3e5b35" - }, - "scheme": "ed25519" - }, - "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93": { - "keyid_hash_algorithms": [ - "sha256", - "sha512" - ], - "keytype": "ed25519", - "keyval": { - "public": "6400d770c7c1bce4b3d59ce0079ed686e843b6500bbea77d869a1ae7df4565a1" - }, - "scheme": "ed25519" - }, - "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129": { - "keyid_hash_algorithms": [ - "sha256", - "sha512" - ], - "keytype": "ed25519", - "keyval": { - "public": "28bf74baa87ed923f8fa27e3292684f8ec4730ce0bdc65150ed58199206ce089" - }, - "scheme": "ed25519" - }, - "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4": { - "keyid_hash_algorithms": [ - "sha256", - "sha512" - ], - "keytype": "ed25519", - "keyval": { - "public": "e6ae9d3b67d7b3ce274130291dd90287f32b8fd72bfb4ac5430859ebd1c28a46" - }, - "scheme": "ed25519" - } - }, - "roles": { - "root": { - "keyids": [ - "d4dab4b4d68b91665a6d0dac5b4e64677aa6d853fc787669168b4b4ba9822129" - ], - "threshold": 1 - }, - "snapshot": { - "keyids": [ - "77dfdca206c0fe1b8e55d67d21dd0e195a0998a9d2b56c6d3ee8f68d04c21e93" - ], - "threshold": 1 - }, - "targets": { - "keyids": [ - "e4dae3872d28d29f7624a702bfd25f68453544d597229ee9e0a8569d1f940cf4" - ], - "threshold": 1 - }, - "timestamp": { - "keyids": [ - "3a05831328273e4b821c3bbe1fed0c5332749d8e071675879af26a401a5c85ae" - ], - "threshold": 1 - } - }, - "spec_version": "1.0.0", - "version": 1 - } -} \ No newline at end of file From 0162580c5117d11bacb47b9cba68ebabd830432f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 15 Apr 2021 08:18:52 -0400 Subject: [PATCH 49/50] Use GITHUB_HEAD_REF in workflow --- .github/workflows/build-fixture.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-fixture.yml b/.github/workflows/build-fixture.yml index 3e97d6e..2f1191e 100644 --- a/.github/workflows/build-fixture.yml +++ b/.github/workflows/build-fixture.yml @@ -32,5 +32,5 @@ jobs: - name: Start PHP server run: 'php -S localhost:8080 &' - name: Install test project dependencies - run: 'composer require php-tuf/composer-integration:dev-wip' + run: 'composer require php-tuf/composer-integration:dev-${{ env.GITHUB_HEAD_REF }}' working-directory: ./fixtures/test-project From 7b3d1b308b99451139948dce748b6f395ba7c28e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= Date: Thu, 15 Apr 2021 08:24:14 -0400 Subject: [PATCH 50/50] Symlink packages.json for CI --- fixtures/packages.json | 1 + 1 file changed, 1 insertion(+) create mode 120000 fixtures/packages.json diff --git a/fixtures/packages.json b/fixtures/packages.json new file mode 120000 index 0000000..f7303b8 --- /dev/null +++ b/fixtures/packages.json @@ -0,0 +1 @@ +targets/packages.json \ No newline at end of file